├── .gitattributes ├── .gitignore ├── Makefile ├── data ├── data.mk ├── messages.asm ├── puzzle_names.asm └── text_chars.asm ├── doc ├── bgm_portraits.png ├── complete_save.txt ├── credits_bgs.png ├── demo_item_pic.png ├── demo_pikachu_pic.png ├── item_pics.png ├── level_bgs.png ├── pokedex_pics.png ├── safari_zone_album_pics.png ├── screens.png └── sgb_border.png ├── gfx ├── bgm │ ├── bulbasaur_1.png │ ├── bulbasaur_1_sgb.png │ ├── bulbasaur_2.png │ ├── bulbasaur_2_sgb.png │ ├── bulbasaur_3.png │ ├── bulbasaur_3_sgb.png │ ├── bulbasaur_4.png │ ├── bulbasaur_4_sgb.png │ ├── bulbasaur_blink.png │ ├── charmander_1.png │ ├── charmander_1_sgb.png │ ├── charmander_2.png │ ├── charmander_2_sgb.png │ ├── charmander_3.png │ ├── charmander_3_sgb.png │ ├── charmander_4.png │ ├── charmander_4_sgb.png │ ├── charmander_blink.png │ ├── clefairy_1.png │ ├── clefairy_1_sgb.png │ ├── clefairy_2.png │ ├── clefairy_2_sgb.png │ ├── clefairy_3.png │ ├── clefairy_3_sgb.png │ ├── clefairy_4.png │ ├── clefairy_4_sgb.png │ ├── clefairy_blink.png │ ├── jigglypuff_1.png │ ├── jigglypuff_1_sgb.png │ ├── jigglypuff_2.png │ ├── jigglypuff_2_sgb.png │ ├── jigglypuff_3.png │ ├── jigglypuff_3_sgb.png │ ├── jigglypuff_4.png │ ├── jigglypuff_4_sgb.png │ ├── jigglypuff_blink.png │ ├── no_blink.png │ ├── pikachu_1.png │ ├── pikachu_1_sgb.png │ ├── pikachu_2.png │ ├── pikachu_2_sgb.png │ ├── pikachu_3.png │ ├── pikachu_3_sgb.png │ ├── pikachu_4.png │ ├── pikachu_4_sgb.png │ ├── pikachu_blink.png │ ├── squirtle_1.png │ ├── squirtle_1_sgb.png │ ├── squirtle_2.png │ ├── squirtle_2_sgb.png │ ├── squirtle_3.png │ ├── squirtle_3_sgb.png │ ├── squirtle_4.png │ ├── squirtle_4_sgb.png │ └── squirtle_blink.png ├── copyright │ ├── copyright.pal │ ├── copyright.png │ └── copyright.tilemap ├── data_select │ ├── data_select.attrmap │ ├── data_select.png │ └── data_select.tilemap ├── demo │ └── puzzle_demo.png ├── easy_picross │ ├── easy_picross.attrmap │ ├── easy_picross.tilemap │ ├── lv_0_home.png │ ├── lv_0_home_sgb.png │ └── lv_0_home_unused.png ├── fonts │ ├── alphabets.png │ ├── font_1.png │ ├── font_2.png │ ├── font_striped_dark.png │ ├── font_striped_light.png │ ├── text_chars_bw.png │ ├── text_chars_dark.png │ ├── text_chars_light.png │ ├── textbox_border_bw.png │ └── textbox_border_dark.png ├── game_select │ ├── game_select.png │ ├── pokemon_picross.attrmap │ ├── pokemon_picross.tilemap │ ├── pokemon_picross_bg.pal │ ├── safari_picross.attrmap │ └── safari_picross.tilemap ├── gfx.mk ├── how_to_play │ ├── how_to_play.attrmap │ ├── how_to_play.png │ ├── how_to_play.tilemap │ ├── how_to_play_sgb.png │ ├── oak_mouth_sgb.png │ ├── safari.attrmap │ ├── safari.png │ └── safari.tilemap ├── itemdex │ ├── itemdex.attrmap │ ├── itemdex.png │ └── itemdex.tilemap ├── menus │ └── cancel_ok_no_yes.png ├── pokedex │ ├── pokedex_list.attrmap │ ├── pokedex_list.tilemap │ ├── pokedex_pic.attrmap │ ├── pokedex_pic.tilemap │ ├── pokedex_scroll.attrmap │ └── pokedex_scroll.tilemap ├── safari_map │ ├── lv_1_plain_zone.png │ ├── lv_1_plain_zone_sgb.png │ ├── lv_1_plain_zone_unused.png │ ├── lv_2_lake_zone.png │ ├── lv_2_lake_zone_sgb.png │ ├── lv_3_mountain_zone.png │ ├── lv_3_mountain_zone_sgb.png │ ├── lv_4_jungle_zone.png │ ├── lv_4_jungle_zone_sgb.png │ ├── lv_4_jungle_zone_unused.png │ ├── safari_map.attrmap │ └── safari_map.tilemap ├── safari_zone_album │ ├── album_list.attrmap │ ├── album_list.tilemap │ ├── album_pic.attrmap │ ├── album_pic.tilemap │ ├── album_scroll.attrmap │ ├── album_scroll.tilemap │ ├── picture_frames.png │ └── picture_frames_light.png ├── save │ └── save_sgb.png ├── sgb_border │ ├── sgb_border.bin │ ├── sgb_border_1.png │ └── sgb_border_2.png ├── sprites │ ├── bill_walk.png │ ├── bulbasaur_walk.png │ ├── charmander_walk.png │ ├── clefairy_walk.png │ ├── jigglypuff_walk.png │ ├── joy_jenny.png │ ├── mew_silhouette_walk.png │ ├── mew_walk.png │ ├── misty_walk.png │ ├── pikachu_walk.png │ ├── psyduck_walk.png │ └── squirtle_walk.png ├── title │ ├── title.attrmap │ ├── title.tilemap │ ├── title_1.png │ ├── title_2.png │ ├── title_bg.pal │ └── title_ob.pal ├── town_map │ ├── lv_10_hanada_cave.png │ ├── lv_10_hanada_cave_sgb.png │ ├── lv_10_hanada_cave_unused.png │ ├── lv_1_tokiwa_forest.png │ ├── lv_1_tokiwa_forest_sgb.png │ ├── lv_1_tokiwa_forest_unused.png │ ├── lv_2_mt_otsukimi.png │ ├── lv_2_mt_otsukimi_sgb.png │ ├── lv_3_sea_cottage.png │ ├── lv_3_sea_cottage_sgb.png │ ├── lv_3_sea_cottage_unused.png │ ├── lv_4_s_s_anne.png │ ├── lv_4_s_s_anne_sgb.png │ ├── lv_5_pokemon_tower.png │ ├── lv_5_pokemon_tower_sgb.png │ ├── lv_6_silph_company.png │ ├── lv_6_silph_company_sgb.png │ ├── lv_6_silph_company_unused.png │ ├── lv_7_cycling_road.png │ ├── lv_7_cycling_road_sgb.png │ ├── lv_7_cycling_road_unused.png │ ├── lv_8_power_plant.png │ ├── lv_8_power_plant_sgb.png │ ├── lv_9_futago_island.png │ ├── lv_9_futago_island_sgb.png │ ├── town_map.attrmap │ ├── town_map.tilemap │ ├── town_map_transition.attrmap │ └── town_map_transition.tilemap ├── unknown │ ├── unknown_6b_7f34.attrmap │ ├── unknown_6b_7f34.tilemap │ ├── unknown_6c_4000.png │ ├── unknown_6c_7000.png │ ├── unknown_7a_6020.tilemap │ └── unknown_7a_6420.attrmap └── unused │ ├── mario_wario.png │ ├── marios_picross.png │ ├── marios_picross_final.png │ ├── picross_2.png │ ├── warios_picross.png │ └── warios_picross_final.png ├── include ├── charmap.inc ├── code_macros.inc ├── const_macros.inc ├── gfx_macros.inc ├── hardware.inc ├── level_constants.inc ├── puzzle_constants.inc └── text.inc ├── layout.link ├── mgbdis.sh ├── mgbdis ├── .gitignore ├── LICENSE ├── README.md ├── hardware.inc ├── instruction_set.py ├── mgbdis.py └── png.py ├── shim.sym ├── source ├── bank_00.asm ├── bank_01.asm ├── bank_02.asm ├── bank_05.asm ├── bank_20.asm ├── bank_28.asm ├── bank_3c.asm ├── bank_56.asm ├── bank_57.asm ├── bank_58.asm ├── bank_5c.asm ├── bank_5e.asm ├── bank_5f.asm ├── bank_63.asm ├── bank_64.asm ├── bank_65.asm ├── bank_66.asm ├── bank_67.asm ├── bank_68.asm ├── bank_69.asm ├── bank_6a.asm ├── bank_6b.asm ├── bank_6c.asm ├── bank_6d.asm ├── bank_6e.asm ├── bank_6f.asm ├── bank_70.asm ├── bank_71.asm ├── bank_72.asm ├── bank_73.asm ├── bank_74.asm ├── bank_75.asm ├── bank_76.asm ├── bank_77.asm ├── bank_78.asm ├── bank_79.asm ├── bank_7a.asm ├── bank_7c.asm ├── bank_7e.asm └── bank_7f.asm └── tools ├── coverage.py ├── dump_data.py ├── dump_decompress.py ├── dump_string.py ├── makeshim.py ├── parsemap.py ├── png.py ├── scan_includes.c ├── tools.mk ├── xor_compress.c ├── xor_compress.py └── xor_compress.rs /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text eol=lf 3 | 4 | # Explicitly declare text files you want to always be normalized and converted 5 | # to native line endings on checkout. 6 | *.asm text 7 | *.txt text 8 | *.md text 9 | *.py text 10 | *.c text 11 | *.h text 12 | *.sh text 13 | 14 | # Denote all files that are truly binary and should not be modified. 15 | *.png binary diff=hex 16 | *.xor binary diff=hex 17 | *.tilemap binary diff=hex 18 | *.attrmap binary diff=hex 19 | *.tilemap_attrmap binary diff=hex 20 | 21 | # these are generated but just in case 22 | *.bin binary diff=hex 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /DMGAKVJ0.1 2 | /disassembly 3 | /build 4 | *.sav 5 | *.gbc 6 | *.map 7 | *.sym 8 | !shim.sym 9 | __pycache__ 10 | *.pyc 11 | *.exe 12 | *.pdb 13 | /coverage.png 14 | /picross.png 15 | tools/scan_includes 16 | tools/xor_compress 17 | tools/xor-compress 18 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | name := picross 2 | baserom := DMGAKVJ0.1 3 | 4 | dir_build := build 5 | 6 | RGBDS ?= 7 | RGBASM ?= $(RGBDS)rgbasm 8 | RGBFIX ?= $(RGBDS)rgbfix 9 | RGBGFX ?= $(RGBDS)rgbgfx 10 | RGBLINK ?= $(RGBDS)rgblink 11 | 12 | RGBASMFLAGS := -p 0xff -L -h -E 13 | RGBLINKFLAGS := -p 0xff -d 14 | RGBFIXFLAGS := -p 0xff -c -m 0x1b -r 0x03 -k "01" -i "AKVJ" -t "POKEPICROSS" 15 | 16 | SCAN_INCLUDES := tools/scan_includes 17 | MAKE_SHIM := tools/makeshim.py 18 | 19 | rwildcard = $(foreach d, $(wildcard $1*), $(filter $(subst *, %, $2), $d) $(call rwildcard, $d/, $2)) 20 | 21 | objects := $(patsubst %.asm, $(dir_build)/%.o, \ 22 | $(call rwildcard, source data, *.asm)) 23 | objects += $(dir_build)/shim.o 24 | 25 | .SECONDEXPANSION: 26 | 27 | .PHONY: all 28 | all: $(name).gbc 29 | cmp $(name).gbc $(baserom) 30 | 31 | include data/data.mk 32 | include gfx/gfx.mk 33 | include tools/tools.mk 34 | .PRECIOUS: $(gfx) $(data) $(tools) 35 | 36 | .PHONY: tools 37 | tools: $(tools) 38 | 39 | .PHONY: clean 40 | clean: 41 | rm -rf $(name).gbc $(name).sym $(name).map $(tools) $(dir_build) 42 | 43 | .PHONY: tidy 44 | tidy: 45 | rm -rf $(name).gbc $(name).sym $(name).map $(tools) $(dir_build)/shim.asm 46 | find $(dir_build) \( -name "*.o" \) -delete 47 | 48 | $(name).gbc: layout.link $(objects) | $(baserom) 49 | $(RGBLINK) $(RGBLINKFLAGS) -O $(baserom) -l $< -n $(@:.gbc=.sym) -m $(@:.gbc=.map) -o $@ $(filter-out $<, $^) 50 | $(RGBFIX) $(RGBFIXFLAGS) -v $@ 51 | 52 | $(dir_build)/shim.asm: shim.sym | $$(dir $$@) 53 | $(MAKE_SHIM) $< > $@ 54 | 55 | $(dir_build)/%.o: $(dir_build)/%.asm | $$(dir $$@) 56 | $(RGBASM) $(RGBASMFLAGS) -i $(dir_build)/ -i include/ -o $@ $< 57 | $(dir_build)/%.o: %.asm | $$(dir $$@) 58 | $(RGBASM) $(RGBASMFLAGS) -i $(dir_build)/ -i include/ -o $@ $< 59 | 60 | $(dir_build)/%.d: %.asm | $$(dir $$@) $(SCAN_INCLUDES) 61 | @$(SCAN_INCLUDES) -b $(dir_build)/ -i $(dir_build)/ -i include/ -o $@ -t $(@:.d=.o) $< 62 | 63 | .PRECIOUS: %/ 64 | %/: 65 | @mkdir -p $@ 66 | 67 | ifeq (,$(filter clean tools,$(MAKECMDGOALS))) 68 | -include $(patsubst %.o, %.d, $(objects)) 69 | endif 70 | -------------------------------------------------------------------------------- /data/data.mk: -------------------------------------------------------------------------------- 1 | data := 2 | 3 | # Not used right now, kept around for possible future use. 4 | -------------------------------------------------------------------------------- /data/messages.asm: -------------------------------------------------------------------------------- 1 | INCLUDE "text.inc" 2 | 3 | SECTION "messages", ROMX[$5c68], BANK[$02] 4 | 5 | message_02_5c68:: 6 | text "おめでとう やさしいピクロスは" 7 | line "これでしゅうりょうよ" 8 | done 9 | 10 | message_02_5c9e:: 11 | text "つぎは ポケモンピクロスに" 12 | line "チャレンジしてね" 13 | done 14 | 15 | message_02_5ccc:: 16 | text "サファリピクロスは たのしかった?" 17 | done 18 | 19 | message_02_5cf0:: 20 | text "まだ ポケモンピクロスのほうには" 21 | line "といてないもんだいが あるみたい" 22 | done 23 | 24 | message_02_5d34:: 25 | text "がんばってチャレンジしてね!" 26 | done 27 | 28 | message_02_5d52:: 29 | text "おめでとう" 30 | line "あなたは ついにポケモンマスター" 31 | done 32 | 33 | message_02_5d80:: 34 | text "...じゃなかった" 35 | line "ポケモンピクロスマスターね!" 36 | done 37 | 38 | message_02_5db2:: 39 | text "いままであそんでくれて" 40 | line "ほんとうに ありがとう" 41 | done 42 | 43 | message_02_5de2:: 44 | text "おめでとう" 45 | line "あなたは ついにポケモンマスター" 46 | done 47 | 48 | message_02_5e10:: 49 | text "...じゃなかった" 50 | line "ポケモンピクロスマスターね!" 51 | done 52 | 53 | message_02_5e42:: 54 | text "いままであそんでくれて" 55 | line "ほんとうに ありがとう" 56 | done 57 | 58 | message_02_5e72:: 59 | text "サファリピクロスもクリアしてね!" 60 | done 61 | 62 | message_02_5e94:: 63 | text "ついにサファリを せいは したのね!" 64 | done 65 | 66 | message_02_5eba:: 67 | text "おめでとう!" 68 | line "たびのおもいでにでもひたって" 69 | done 70 | 71 | message_02_5ee6:: 72 | text "ひとやすみしてね!" 73 | done 74 | 75 | message_02_5efa:: 76 | text "すごいわね あなた!" 77 | line "ついに 151たい かんせいしたのね" 78 | done 79 | 80 | message_02_5f36:: 81 | text "おつかれさま!" 82 | line "たびのおもいでにでもひたって" 83 | done 84 | 85 | message_02_5f64:: 86 | text "ひとやすみしてね!" 87 | done 88 | 89 | message_02_5f78:: 90 | text "おめでとうございます" 91 | line "よく ここまできましたね!" 92 | done 93 | 94 | message_02_5faa:: 95 | text "おいわいとして" 96 | done 97 | 98 | message_02_5fba:: 99 | text "サファリピクロスへ" 100 | line "ごしょうたいします" 101 | done 102 | 103 | message_02_5fe2:: 104 | text "サファリピクロスを あそぶときは" 105 | done 106 | 107 | message_02_6004:: 108 | text "GAME SELECTがめんで" 109 | line "みぎを おしましょう" 110 | done 111 | 112 | message_02_603a:: 113 | text "サファリピクロスは" 114 | line "ちょっとルールが ちがうので" 115 | done 116 | 117 | message_02_606c:: 118 | text "サファリのあそびかたを" 119 | line "かならずよみましょう" 120 | done 121 | 122 | message_02_609a:: 123 | text "それでは" 124 | line "たびのおもいでにでもひたって" 125 | done 126 | 127 | message_02_60c2:: 128 | text "ひとやすみしてください" 129 | done 130 | 131 | message_02_60da:: 132 | text "でんちが しょうもうしています" 133 | done 134 | 135 | message_02_60fa:: 136 | text "こうかんしてください" 137 | done 138 | 139 | message_02_6110:: 140 | text "ケーブルが せつぞくされていないか" 141 | done 142 | 143 | message_02_6134:: 144 | text "でんげんがはいっていません" 145 | done 146 | 147 | message_02_6150:: 148 | text "かみが つまっています" 149 | done 150 | 151 | message_02_6168:: 152 | text "とりのぞいてください" 153 | done 154 | 155 | message_02_617e:: 156 | text "しようおんどが はんいがいです" 157 | done 158 | 159 | message_02_619e:: 160 | text "はんいないに いどうしてください" 161 | done 162 | 163 | message_02_61c0:: 164 | text "ついにきましたね" 165 | line "まっていました!" 166 | line "それでは" 167 | line "このわたし...マサキが" 168 | done 169 | 170 | message_02_6208:: 171 | text "サファリピクロスについて" 172 | line "せつめい いたします" 173 | line "よくきいてください" 174 | done 175 | 176 | message_02_624c:: 177 | text "サファリピクロスでは" 178 | line "すこし ルールが" 179 | line "ちがいます" 180 | done 181 | 182 | message_02_6280:: 183 | text "せいげんじかんないに" 184 | line "ポケモンの もんだいを" 185 | line "かんせいさせるのは..." 186 | done 187 | 188 | message_02_62c8:: 189 | text "ポケモンピクロスと" 190 | line "おなじですが" 191 | done 192 | 193 | message_02_62ea:: 194 | text "4つのもんだいを こたえて" 195 | line "ひとつのこたえになる" 196 | line "もんだいは..." 197 | done 198 | 199 | message_02_632e:: 200 | text "1つのもんだいが" 201 | line "かんせいしても ただしく" 202 | line "かんせいしたかどうか" 203 | line "おしえてくれません" 204 | done 205 | 206 | message_02_6384:: 207 | text "4つのもんだいが すべて" 208 | line "ただしくできたときに" 209 | line "もんだいをといたことに" 210 | line "なります" 211 | done 212 | 213 | message_02_63d6:: 214 | text "ただしく といたと" 215 | line "おもっていても" 216 | done 217 | 218 | message_02_63fa:: 219 | text "かんちがいしていることが" 220 | line "あるので きをつけて" 221 | line "もんだいを" 222 | line "といていきましょう" 223 | done 224 | 225 | message_02_644a:: 226 | text "それから..." 227 | done 228 | 229 | message_02_645a:: 230 | text "もんだいを といている" 231 | line "さいちゅうに" 232 | line "STARTボタンを おすと" 233 | line "メニューが ひらきますが" 234 | done 235 | 236 | message_02_64b6:: 237 | text "サファリピクロスでは" 238 | line "ポケモンピクロスの" 239 | line "『HINT』がないかわりに" 240 | line "『?START』があります" 241 | done 242 | 243 | message_02_6518:: 244 | text "『?START』をつかうと" 245 | line "ためしにマスを" 246 | line "けずることができます" 247 | done 248 | 249 | message_02_655a:: 250 | text "これをつかうと" 251 | line "まちがったばしょを" 252 | line "けずっても じかんが" 253 | line "へらなくなるので" 254 | done 255 | 256 | message_02_65a6:: 257 | text "いろいろな" 258 | line "マスのけずりかたを" 259 | line "ためしてみることが" 260 | line "できます" 261 | done 262 | 263 | message_02_65e4:: 264 | text "どこのマスを" 265 | line "けずったらいいか" 266 | line "わかりにくい" 267 | done 268 | 269 | message_02_6612:: 270 | text "むずかしい もんだいを" 271 | line "とくときに つかうのが" 272 | line "いいとおもいます" 273 | done 274 | 275 | message_02_6654:: 276 | text "けずりおわったら" 277 | line "メニューをだして" 278 | line "『?END』を" 279 | line "えらびましょう" 280 | done 281 | 282 | message_02_6698:: 283 | text "けずったマスが" 284 | line "あっているとおもったら" 285 | line "『OK』をえらびましょう" 286 | done 287 | 288 | message_02_66da:: 289 | text "ためしに けずったマスが" 290 | line "ふつうに けずったときの" 291 | line "ように けずられて" 292 | line "いきます" 293 | done 294 | 295 | message_02_672c:: 296 | text "このとき まちがっていると" 297 | line "まちがったマスの" 298 | line "かずだけ じかんがへって" 299 | line "しまうので" 300 | done 301 | 302 | message_02_6780:: 303 | text "GAMEOVERになるかも" 304 | line "しれないから" 305 | line "ちゅういしましょう" 306 | done 307 | 308 | message_02_67be:: 309 | text "ためしに けずったばしょが" 310 | line "ちがっていることに" 311 | line "きがついたら..." 312 | done 313 | 314 | message_02_6802:: 315 | text "『CANCEL』を" 316 | line "えらびましょう" 317 | done 318 | 319 | message_02_6826:: 320 | text "ためしにけずったところが" 321 | line "もとのじょうたいに" 322 | line "もどります" 323 | done 324 | 325 | message_02_6860:: 326 | text "それでは" 327 | line "がんばってください!" 328 | done 329 | 330 | tutorial_message_00:: 331 | text "それじゃ さっそく" 332 | line "『ポケモンピクロス』の" 333 | line "あそびかたを おしえてやろう" 334 | done 335 | 336 | tutorial_message_01:: 337 | text "うえにある すうじ と" 338 | done 339 | 340 | tutorial_message_02:: 341 | line "ひだりにある すうじ を" 342 | done 343 | 344 | tutorial_message_03:: 345 | text " ヒント" 346 | line "にして フィールドにあるマスを" 347 | line "けずっていくんじゃ" 348 | done 349 | 350 | message_02_693c:: 351 | done 352 | 353 | tutorial_message_04:: 354 | text "ただしくけずることが できたら" 355 | line "" 356 | done 357 | 358 | tutorial_message_05:: 359 | text "ポケモンの ちょうこくが" 360 | line "かんせいするんじゃ!!!" 361 | line "(“モンスターボ-ル”)" 362 | done 363 | 364 | tutorial_message_06:: 365 | text "では 『ポケモンピクロス』の" 366 | line "ルールを せつめいするぞ" 367 | done 368 | 369 | tutorial_message_07:: 370 | text "うえにある すうじの れつ は" 371 | done 372 | 373 | tutorial_message_08:: 374 | line "フィールドを たてに けずる" 375 | line "かずを あらわしておるんじゃ" 376 | done 377 | 378 | tutorial_message_09:: 379 | text "たとえば この『5』は " 380 | done 381 | 382 | tutorial_message_10:: 383 | line "たてに れんぞくして 5マス" 384 | line "けずることを あらわして" 385 | line "おるんじゃ" 386 | done 387 | 388 | tutorial_message_11:: 389 | text "ひだりにある すうじのれつ は" 390 | done 391 | 392 | tutorial_message_12:: 393 | line "フィールドを よこに けずる" 394 | line "かずを あらわしておる" 395 | done 396 | 397 | tutorial_message_13:: 398 | text "たとえば この『3』と『1』は" 399 | done 400 | 401 | tutorial_message_14:: 402 | line "ひだりから3マスけずり さらに " 403 | line "はなれた ところを1マスけずる" 404 | line "ことを あらわして おるぞ!" 405 | done 406 | 407 | tutorial_message_15:: 408 | text "しかし もんだいには" 409 | line "せいげんじかんが あるので" 410 | line "それまでに とけなければ" 411 | done 412 | 413 | tutorial_message_16:: 414 | line "ポケモンはにげてしまう" 415 | done 416 | 417 | tutorial_message_17:: 418 | text "じゃが あせってまちがったマスを" 419 | line "けずってしまうと" 420 | done 421 | 422 | tutorial_message_18:: 423 | line "のこりじかんが へってしまうから" 424 | line "いそいでばかりでもいかんぞ" 425 | done 426 | 427 | tutorial_message_19:: 428 | text "けずってはいけないマスが" 429 | line "わかったら『×』のしるしを" 430 | line "つけておくと わかりやすくて" 431 | line "べんりじゃ!" 432 | done 433 | 434 | tutorial_message_20:: 435 | text "『ヒントをつかう?』で はい" 436 | line "を せんたくすると ヒントの" 437 | line "ルーレットが まわるから" 438 | done 439 | 440 | tutorial_message_21:: 441 | text "タイミングよく Aボタンを" 442 | line "おすんじゃ!" 443 | line "さいしょは うえのカーソル" 444 | done 445 | 446 | message_02_6d56:: 447 | line "さいしょは うえのカーソル" 448 | done 449 | 450 | tutorial_message_22:: 451 | line "つぎに ひだりのカーソル" 452 | done 453 | 454 | tutorial_message_23:: 455 | text "すると とまったところの" 456 | line "たてとよこのマスの" 457 | line "こたえが すべてわかるのじゃ!" 458 | done 459 | 460 | tutorial_message_24:: 461 | text "はしでルーレットをとめると" 462 | line "そのもんだいは" 463 | line "ときやすくなるぞ!" 464 | done 465 | 466 | tutorial_message_25:: 467 | text "あと もんだいを" 468 | line "といているときに" 469 | done 470 | 471 | tutorial_message_26:: 472 | line "SELECTボタンをおすと" 473 | done 474 | 475 | tutorial_message_27:: 476 | text "SELECTボタンを おしている" 477 | line "あいだだけ このように" 478 | line "どんなもんだいを といているか" 479 | line "わかりやすくなるぞ!" 480 | done 481 | 482 | tutorial_message_28:: 483 | text "ためしてみるといい" 484 | done 485 | 486 | tutorial_message_29:: 487 | text "おっと! いかん いかん" 488 | line "『はやとき』を せつめいするの" 489 | line "をわすれておった!" 490 | done 491 | 492 | tutorial_message_30:: 493 | text "『はやとき』とは" 494 | line "もんだいに きめられている" 495 | line "はやときの じかんないに" 496 | line "もんだいを とくことじゃ!" 497 | done 498 | 499 | tutorial_message_31:: 500 | text "まだ 『はやとき』が できるか" 501 | line "どうかは のこりタイムをみれば" 502 | line "わかるぞ!" 503 | done 504 | 505 | tutorial_message_32:: 506 | text "『はやとき』の じかんない" 507 | line "であれば このようにしろく" 508 | line "ひょうじされるが" 509 | done 510 | 511 | tutorial_message_33:: 512 | text "『はやとき』の じかんが" 513 | line "すぎてしまった ばあいは" 514 | line "このように くろく" 515 | line "ひょうじされるのじゃ!" 516 | done 517 | 518 | tutorial_message_34:: 519 | text "なお 『はやとき』の じかんは" 520 | line "はやときタイムとして" 521 | done 522 | 523 | tutorial_message_35:: 524 | text "とくもんだいを えらんだあとに" 525 | line "がめんの ちゅうおうに" 526 | line "ひょうじされるぞ!" 527 | done 528 | 529 | tutorial_message_36:: 530 | text "むりして もんだいを はやくとく" 531 | line "ひつようはないが" 532 | done 533 | 534 | tutorial_message_37:: 535 | text "すべてのポケモンの ちょうこくを" 536 | line "かんせい させるためには" 537 | line "あるていど もんだいを はやく" 538 | line "とくことも ひつようなのじゃ!" 539 | done 540 | 541 | tutorial_message_38:: 542 | text "では がんばるのじゃ!" 543 | done 544 | 545 | message_02_71d6:: 546 | text "ん?!" 547 | line "なんだろう!!!?" 548 | done 549 | 550 | message_02_71f2:: 551 | text "ん? フシギダネだ!" 552 | done 553 | 554 | message_02_7208:: 555 | text "やせいのフシギダネが なんで" 556 | line "ボクのあとをついてくるんだ?" 557 | done 558 | 559 | message_02_7244:: 560 | text "おまえひょっとして" 561 | line "ボクといっしょにいきたいの?" 562 | done 563 | 564 | message_02_7276:: 565 | text "ダネー!" 566 | done 567 | 568 | message_02_7280:: 569 | text "そうか じゃあ" 570 | line "いっしょにいこう フシギダネ!" 571 | done 572 | 573 | message_02_72b0:: 574 | text "よーし!" 575 | done 576 | 577 | message_02_72ba:: 578 | text "フシギダネ..." 579 | line "ゲットだぜ!" 580 | done 581 | 582 | message_02_72da:: 583 | text "なかまにしたポケモンは" 584 | line "もんだいを といているときに" 585 | done 586 | 587 | message_02_7310:: 588 | text "STARTボタンを おして" 589 | line "メニューをだすんだ" 590 | done 591 | 592 | message_02_7340:: 593 | text "そこで『BGM』を えらんで" 594 | line "ポケモンの エネルギーマークを" 595 | done 596 | 597 | message_02_737e:: 598 | text "えらべば ポケモンを" 599 | line "かえられるよ!" 600 | done 601 | 602 | message_02_73a4:: 603 | text "え!?こんどは ヒトカゲかい?" 604 | line "おまえもいっしょにいきたいの?" 605 | done 606 | 607 | message_02_73e4:: 608 | text "カゲ カゲー!" 609 | done 610 | 611 | message_02_73f4:: 612 | text "わかったよ ヒトカゲ" 613 | done 614 | 615 | message_02_740a:: 616 | text "いけ! モンスターボール!" 617 | done 618 | 619 | message_02_7426:: 620 | text "やったね!" 621 | line "ヒトカゲもゲットだぜ!" 622 | done 623 | 624 | message_02_744a:: 625 | text "あれは ゼニガメじゃないか?" 626 | line "ゼニガメもボクといきたいの?" 627 | done 628 | 629 | message_02_7486:: 630 | text "ゼニゼニ!" 631 | done 632 | 633 | message_02_7492:: 634 | text "よし いっしょにいこう!" 635 | done 636 | 637 | message_02_74ac:: 638 | text "ゼニガメゲットだぜ!" 639 | done 640 | 641 | message_02_74c2:: 642 | text "あっ? ピッピじゃないか!" 643 | line "おまえもついてきてくれるのか?" 644 | done 645 | 646 | message_02_74fe:: 647 | text "ピッピ!!" 648 | done 649 | 650 | message_02_750a:: 651 | text "わかった!" 652 | line "だいじにするからね!" 653 | done 654 | 655 | message_02_752c:: 656 | text "ピッピ ゲットだぜ!" 657 | done 658 | 659 | message_02_7542:: 660 | text "あっ! あれはプリン!" 661 | done 662 | 663 | message_02_755a:: 664 | text "プリィー!" 665 | done 666 | 667 | message_02_7566:: 668 | text "ハハハ そうか" 669 | line "おまえもボクといきたいんだね" 670 | done 671 | 672 | message_02_7594:: 673 | text "プリィー! プリィー!" 674 | done 675 | 676 | message_02_75ac:: 677 | text "よーし ボクといっしょに" 678 | line "ポケモンピクロスマスターを" 679 | done 680 | 681 | message_02_75e2:: 682 | text "めざそうね!!" 683 | done 684 | 685 | message_02_75f2:: 686 | text "プリンもゲットだぜ!" 687 | done 688 | 689 | message_02_7608:: 690 | text "よーし!!" 691 | line "ポケモンピクロスマスターめざして" 692 | done 693 | 694 | message_02_7636:: 695 | text "いっしょにがんばろうな" 696 | line "ピカチュウ!" 697 | done 698 | 699 | message_02_765c:: 700 | text "ピッカー!!" 701 | done 702 | 703 | message_02_766a:: 704 | text "あなた ひょっとして" 705 | line "ポケモンピクロスはじめて?" 706 | done 707 | 708 | message_02_769c:: 709 | text "じゃあ わたしが" 710 | line "いいこと おしえてあげるね" 711 | done 712 | 713 | message_02_76ca:: 714 | text "ふつうにもんだいをといたときは" 715 | done 716 | 717 | message_02_76ea:: 718 | line "このマークになるけど" 719 | done 720 | 721 | message_02_7702:: 722 | text "はやときじかんないにといたときは" 723 | done 724 | 725 | message_02_7724:: 726 | line "このマークになるの" 727 | done 728 | 729 | message_02_773a:: 730 | text "そして 8もん はやときすると" 731 | done 732 | 733 | message_02_775a:: 734 | line "かくしもんだいが" 735 | done 736 | 737 | message_02_776e:: 738 | text " あらわれるの!" 739 | done 740 | 741 | message_02_7780:: 742 | text "ポケモンピクロスマスターを" 743 | line "めざしているなら" 744 | done 745 | 746 | message_02_77ae:: 747 | text "かくしもんだいも" 748 | line "ちゃんととかないとね" 749 | done 750 | 751 | message_02_77d6:: 752 | text "でも むりして" 753 | line "すべてのもんだいをとかなくても" 754 | done 755 | 756 | message_02_7806:: 757 | text "ふつうに8もんとけば" 758 | line "つぎのMAPにすすめるから" 759 | done 760 | 761 | message_02_7838:: 762 | text "とりあえずは さいごのMAPまで" 763 | line "すすんでから あとで ゆっくりと" 764 | done 765 | 766 | message_02_787c:: 767 | text "すべてのもんだいを" 768 | line "かんせいさせる ほうがいいかもね" 769 | done 770 | 771 | message_02_78b2:: 772 | text "じゃあ がんばってね!" 773 | done 774 | -------------------------------------------------------------------------------- /data/text_chars.asm: -------------------------------------------------------------------------------- 1 | SECTION "data/text_chars", ROM0[$286f] 2 | text_chars_widths:: 3 | db 7 ; あ 4 | db 7 ; い 5 | db 7 ; う 6 | db 7 ; え 7 | db 7 ; お 8 | db 7 ; か 9 | db 7 ; き 10 | db 4 ; く 11 | db 7 ; け 12 | db 7 ; こ 13 | db 6 ; さ 14 | db 6 ; し 15 | db 7 ; す 16 | db 7 ; せ 17 | db 7 ; そ 18 | db 7 ; た 19 | db 7 ; ち 20 | db 7 ; つ 21 | db 7 ; て 22 | db 7 ; と 23 | db 7 ; な 24 | db 7 ; に 25 | db 7 ; ぬ 26 | db 7 ; ね 27 | db 7 ; の 28 | db 7 ; は 29 | db 7 ; ひ 30 | db 7 ; ふ 31 | db 8 ; へ 32 | db 7 ; ほ 33 | db 6 ; ま 34 | db 7 ; み 35 | db 7 ; む 36 | db 7 ; め 37 | db 7 ; も 38 | db 7 ; や 39 | db 7 ; ゆ 40 | db 6 ; よ 41 | db 6 ; ら 42 | db 6 ; り 43 | db 6 ; る 44 | db 7 ; れ 45 | db 6 ; ろ 46 | db 7 ; わ 47 | db 6 ; を 48 | db 7 ; ん 49 | db 5 ; っ 50 | db 5 ; ゃ 51 | db 5 ; ゅ 52 | db 4 ; ょ 53 | db 9 ; が 54 | db 8 ; ぎ 55 | db 7 ; ぐ 56 | db 8 ; げ 57 | db 8 ; ご 58 | db 9 ; ざ 59 | db 7 ; じ 60 | db 9 ; ず 61 | db 8 ; ぜ 62 | db 8 ; ぞ 63 | db 8 ; だ 64 | db 8 ; ぢ 65 | db 8 ; づ 66 | db 8 ; で 67 | db 8 ; ど 68 | db 9 ; ば 69 | db 9 ; び 70 | db 9 ; ぶ 71 | db 8 ; べ 72 | db 9 ; ぼ 73 | db 9 ; ぱ 74 | db 9 ; ぴ 75 | db 9 ; ぷ 76 | db 8 ; ぺ 77 | db 10 ; ぽ 78 | db 5 ; ぁ 79 | db 5 ; ぃ 80 | db 4 ; ぅ 81 | db 4 ; ぇ 82 | db 5 ; ぉ 83 | db 7 ; ア 84 | db 7 ; イ 85 | db 7 ; ウ 86 | db 7 ; エ 87 | db 7 ; オ 88 | db 7 ; カ 89 | db 7 ; キ 90 | db 7 ; ク 91 | db 7 ; ケ 92 | db 7 ; コ 93 | db 7 ; サ 94 | db 7 ; シ 95 | db 7 ; ス 96 | db 7 ; セ 97 | db 7 ; ソ 98 | db 7 ; タ 99 | db 7 ; チ 100 | db 7 ; ツ 101 | db 7 ; テ 102 | db 5 ; ト 103 | db 7 ; ナ 104 | db 7 ; ニ 105 | db 6 ; ヌ 106 | db 7 ; ネ 107 | db 6 ; ノ 108 | db 7 ; ハ 109 | db 7 ; ヒ 110 | db 7 ; フ 111 | db 8 ; ヘ 112 | db 7 ; ホ 113 | db 7 ; マ 114 | db 6 ; ミ 115 | db 7 ; ム 116 | db 7 ; メ 117 | db 7 ; モ 118 | db 7 ; ヤ 119 | db 7 ; ユ 120 | db 7 ; ヨ 121 | db 7 ; ラ 122 | db 6 ; リ 123 | db 7 ; ル 124 | db 6 ; レ 125 | db 7 ; ロ 126 | db 7 ; ワ 127 | db 7 ; ヲ 128 | db 7 ; ン 129 | db 5 ; ッ 130 | db 5 ; ャ 131 | db 5 ; ュ 132 | db 4 ; ョ 133 | db 9 ; ガ 134 | db 8 ; ギ 135 | db 9 ; グ 136 | db 9 ; ゲ 137 | db 9 ; ゴ 138 | db 8 ; ザ 139 | db 8 ; ジ 140 | db 9 ; ズ 141 | db 9 ; ゼ 142 | db 9 ; ゾ 143 | db 9 ; ダ 144 | db 8 ; ヂ 145 | db 8 ; ヅ 146 | db 9 ; デ 147 | db 6 ; ド 148 | db 8 ; バ 149 | db 8 ; ビ 150 | db 9 ; ブ 151 | db 8 ; ベ 152 | db 8 ; ボ 153 | db 9 ; パ 154 | db 7 ; ピ 155 | db 8 ; プ 156 | db 8 ; ペ 157 | db 8 ; ポ 158 | db 5 ; ァ 159 | db 4 ; ィ 160 | db 5 ; ゥ 161 | db 5 ; ェ 162 | db 5 ; ォ 163 | db 6 ; 0 164 | db 4 ; 1 165 | db 6 ; 2 166 | db 6 ; 3 167 | db 6 ; 4 168 | db 6 ; 5 169 | db 6 ; 6 170 | db 6 ; 7 171 | db 6 ; 8 172 | db 6 ; 9 173 | db 5 ; - 174 | db 7 ; A 175 | db 6 ; B 176 | db 7 ; C 177 | db 6 ; D 178 | db 6 ; E 179 | db 6 ; F 180 | db 7 ; G 181 | db 6 ; H 182 | db 3 ; I 183 | db 7 ; J 184 | db 6 ; K 185 | db 6 ; L 186 | db 7 ; M 187 | db 7 ; N 188 | db 7 ; O 189 | db 6 ; P 190 | db 7 ; Q 191 | db 6 ; R 192 | db 6 ; S 193 | db 7 ; T 194 | db 7 ; U 195 | db 7 ; V 196 | db 7 ; W 197 | db 7 ; X 198 | db 7 ; Y 199 | db 6 ; Z 200 | db 6 ; a 201 | db 5 ; b 202 | db 5 ; c 203 | db 5 ; d 204 | db 5 ; e 205 | db 6 ; f 206 | db 6 ; g 207 | db 5 ; h 208 | db 1 ; i 209 | db 5 ; j 210 | db 5 ; k 211 | db 2 ; l 212 | db 7 ; m 213 | db 5 ; n 214 | db 5 ; o 215 | db 5 ; p 216 | db 5 ; q 217 | db 5 ; r 218 | db 5 ; s 219 | db 5 ; t 220 | db 5 ; u 221 | db 5 ; v 222 | db 7 ; w 223 | db 6 ; x 224 | db 6 ; y 225 | db 5 ; z 226 | db 0 227 | db 4 ; 、 228 | db 4 ; 。 229 | db 5 ; 『 230 | db 5 ; 』 231 | db 8 ; × 232 | db 5 ; “ 233 | db 5 ; ” 234 | db 4 ; ! 235 | db 5 ; ? 236 | db 5 ; : 237 | db 2 ; ; 238 | db 2 ; , 239 | db 2 ; . 240 | db 4 ; · 241 | db 3 ; ( 242 | db 3 ; ) 243 | db 7 ; ~ 244 | db 8 ; ♂ 245 | db 5 ; ♀ 246 | db 0 247 | db 0 248 | db 0 249 | db 0 250 | db 0 251 | db 0 252 | db 0 253 | db 0 254 | db 0 255 | db 0 256 | db 0 257 | db 0 258 | db 0 259 | 260 | macro def_tile 261 | ; The image is 2bpp, 8x8 tiles, but the characters themselves are 16x10... 262 | def _x = \1 263 | def _y = \2 264 | def _pos = $20 * (_x + 8 * _y) ; Max char width = 2 tiles, width = 8 chars 265 | def _pos = _pos + 4 * _y ; Characters are 2 pixels taller than a tile 266 | def _pos = _pos + $f0 * (_y / 4) ; Every 4 rows skip a whole tile 267 | dw _pos 268 | endm 269 | 270 | text_chars_offsets:: 271 | for y, 32 ; height of image in characters 272 | for x, 8 ; width of image in characters 273 | def_tile x, y 274 | endr 275 | endr 276 | -------------------------------------------------------------------------------- /doc/bgm_portraits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/doc/bgm_portraits.png -------------------------------------------------------------------------------- /doc/complete_save.txt: -------------------------------------------------------------------------------- 1 | D6E6-D721: Stage clear flags, set all to FF 2 | DB19: Mew appear flag, set to 01 3 | DB1A: Mew Pokédex flag, set to 01 4 | 5 | Hold Up+Left+Select on boot to clear all save data. 6 | -------------------------------------------------------------------------------- /doc/credits_bgs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/doc/credits_bgs.png -------------------------------------------------------------------------------- /doc/demo_item_pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/doc/demo_item_pic.png -------------------------------------------------------------------------------- /doc/demo_pikachu_pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/doc/demo_pikachu_pic.png -------------------------------------------------------------------------------- /doc/item_pics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/doc/item_pics.png -------------------------------------------------------------------------------- /doc/level_bgs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/doc/level_bgs.png -------------------------------------------------------------------------------- /doc/pokedex_pics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/doc/pokedex_pics.png -------------------------------------------------------------------------------- /doc/safari_zone_album_pics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/doc/safari_zone_album_pics.png -------------------------------------------------------------------------------- /doc/screens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/doc/screens.png -------------------------------------------------------------------------------- /doc/sgb_border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/doc/sgb_border.png -------------------------------------------------------------------------------- /gfx/bgm/bulbasaur_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/bulbasaur_1.png -------------------------------------------------------------------------------- /gfx/bgm/bulbasaur_1_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/bulbasaur_1_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/bulbasaur_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/bulbasaur_2.png -------------------------------------------------------------------------------- /gfx/bgm/bulbasaur_2_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/bulbasaur_2_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/bulbasaur_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/bulbasaur_3.png -------------------------------------------------------------------------------- /gfx/bgm/bulbasaur_3_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/bulbasaur_3_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/bulbasaur_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/bulbasaur_4.png -------------------------------------------------------------------------------- /gfx/bgm/bulbasaur_4_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/bulbasaur_4_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/bulbasaur_blink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/bulbasaur_blink.png -------------------------------------------------------------------------------- /gfx/bgm/charmander_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/charmander_1.png -------------------------------------------------------------------------------- /gfx/bgm/charmander_1_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/charmander_1_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/charmander_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/charmander_2.png -------------------------------------------------------------------------------- /gfx/bgm/charmander_2_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/charmander_2_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/charmander_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/charmander_3.png -------------------------------------------------------------------------------- /gfx/bgm/charmander_3_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/charmander_3_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/charmander_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/charmander_4.png -------------------------------------------------------------------------------- /gfx/bgm/charmander_4_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/charmander_4_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/charmander_blink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/charmander_blink.png -------------------------------------------------------------------------------- /gfx/bgm/clefairy_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/clefairy_1.png -------------------------------------------------------------------------------- /gfx/bgm/clefairy_1_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/clefairy_1_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/clefairy_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/clefairy_2.png -------------------------------------------------------------------------------- /gfx/bgm/clefairy_2_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/clefairy_2_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/clefairy_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/clefairy_3.png -------------------------------------------------------------------------------- /gfx/bgm/clefairy_3_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/clefairy_3_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/clefairy_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/clefairy_4.png -------------------------------------------------------------------------------- /gfx/bgm/clefairy_4_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/clefairy_4_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/clefairy_blink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/clefairy_blink.png -------------------------------------------------------------------------------- /gfx/bgm/jigglypuff_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/jigglypuff_1.png -------------------------------------------------------------------------------- /gfx/bgm/jigglypuff_1_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/jigglypuff_1_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/jigglypuff_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/jigglypuff_2.png -------------------------------------------------------------------------------- /gfx/bgm/jigglypuff_2_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/jigglypuff_2_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/jigglypuff_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/jigglypuff_3.png -------------------------------------------------------------------------------- /gfx/bgm/jigglypuff_3_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/jigglypuff_3_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/jigglypuff_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/jigglypuff_4.png -------------------------------------------------------------------------------- /gfx/bgm/jigglypuff_4_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/jigglypuff_4_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/jigglypuff_blink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/jigglypuff_blink.png -------------------------------------------------------------------------------- /gfx/bgm/no_blink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/no_blink.png -------------------------------------------------------------------------------- /gfx/bgm/pikachu_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/pikachu_1.png -------------------------------------------------------------------------------- /gfx/bgm/pikachu_1_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/pikachu_1_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/pikachu_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/pikachu_2.png -------------------------------------------------------------------------------- /gfx/bgm/pikachu_2_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/pikachu_2_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/pikachu_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/pikachu_3.png -------------------------------------------------------------------------------- /gfx/bgm/pikachu_3_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/pikachu_3_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/pikachu_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/pikachu_4.png -------------------------------------------------------------------------------- /gfx/bgm/pikachu_4_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/pikachu_4_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/pikachu_blink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/pikachu_blink.png -------------------------------------------------------------------------------- /gfx/bgm/squirtle_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/squirtle_1.png -------------------------------------------------------------------------------- /gfx/bgm/squirtle_1_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/squirtle_1_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/squirtle_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/squirtle_2.png -------------------------------------------------------------------------------- /gfx/bgm/squirtle_2_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/squirtle_2_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/squirtle_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/squirtle_3.png -------------------------------------------------------------------------------- /gfx/bgm/squirtle_3_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/squirtle_3_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/squirtle_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/squirtle_4.png -------------------------------------------------------------------------------- /gfx/bgm/squirtle_4_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/squirtle_4_sgb.png -------------------------------------------------------------------------------- /gfx/bgm/squirtle_blink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/bgm/squirtle_blink.png -------------------------------------------------------------------------------- /gfx/copyright/copyright.pal: -------------------------------------------------------------------------------- 1 | RGB 31,31,31, 09,09,31, 31,31,31, 00,00,00 2 | RGB 31,31,31, 31,31,31, 31,31,31, 31,31,31 3 | RGB 31,31,31, 31,31,31, 31,31,31, 31,31,31 4 | RGB 31,31,31, 31,31,31, 31,31,31, 31,31,31 5 | RGB 31,31,31, 31,31,31, 31,31,31, 31,31,31 6 | RGB 31,31,31, 31,31,31, 31,31,31, 31,31,31 7 | RGB 31,31,31, 31,31,31, 31,31,31, 31,31,31 8 | RGB 31,31,31, 31,31,31, 31,31,31, 31,31,31 9 | -------------------------------------------------------------------------------- /gfx/copyright/copyright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/copyright/copyright.png -------------------------------------------------------------------------------- /gfx/copyright/copyright.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/copyright/copyright.tilemap -------------------------------------------------------------------------------- /gfx/data_select/data_select.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/data_select/data_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/data_select/data_select.png -------------------------------------------------------------------------------- /gfx/data_select/data_select.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/data_select/data_select.tilemap -------------------------------------------------------------------------------- /gfx/demo/puzzle_demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/demo/puzzle_demo.png -------------------------------------------------------------------------------- /gfx/easy_picross/easy_picross.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/easy_picross/easy_picross.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/easy_picross/easy_picross.tilemap -------------------------------------------------------------------------------- /gfx/easy_picross/lv_0_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/easy_picross/lv_0_home.png -------------------------------------------------------------------------------- /gfx/easy_picross/lv_0_home_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/easy_picross/lv_0_home_sgb.png -------------------------------------------------------------------------------- /gfx/easy_picross/lv_0_home_unused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/easy_picross/lv_0_home_unused.png -------------------------------------------------------------------------------- /gfx/fonts/alphabets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/fonts/alphabets.png -------------------------------------------------------------------------------- /gfx/fonts/font_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/fonts/font_1.png -------------------------------------------------------------------------------- /gfx/fonts/font_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/fonts/font_2.png -------------------------------------------------------------------------------- /gfx/fonts/font_striped_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/fonts/font_striped_dark.png -------------------------------------------------------------------------------- /gfx/fonts/font_striped_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/fonts/font_striped_light.png -------------------------------------------------------------------------------- /gfx/fonts/text_chars_bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/fonts/text_chars_bw.png -------------------------------------------------------------------------------- /gfx/fonts/text_chars_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/fonts/text_chars_dark.png -------------------------------------------------------------------------------- /gfx/fonts/text_chars_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/fonts/text_chars_light.png -------------------------------------------------------------------------------- /gfx/fonts/textbox_border_bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/fonts/textbox_border_bw.png -------------------------------------------------------------------------------- /gfx/fonts/textbox_border_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/fonts/textbox_border_dark.png -------------------------------------------------------------------------------- /gfx/game_select/game_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/game_select/game_select.png -------------------------------------------------------------------------------- /gfx/game_select/pokemon_picross.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/game_select/pokemon_picross.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/game_select/pokemon_picross.tilemap -------------------------------------------------------------------------------- /gfx/game_select/pokemon_picross_bg.pal: -------------------------------------------------------------------------------- 1 | RGB 31,29,00, 27,00,00, 13,00,00, 00,00,00 2 | RGB 31,29,00, 06,22,13, 00,15,06, 00,00,00 3 | RGB 31,31,31, 11,11,11, 27,00,00, 00,00,00 4 | RGB 31,31,31, 11,11,11, 00,15,06, 00,00,00 5 | RGB 31,31,31, 27,00,00, 09,09,09, 00,00,00 6 | RGB 31,31,31, 06,22,13, 09,09,09, 00,00,00 7 | RGB 31,31,31, 22,22,22, 09,09,09, 00,00,00 8 | RGB 31,31,31, 06,22,13, 00,15,06, 00,00,00 9 | -------------------------------------------------------------------------------- /gfx/game_select/safari_picross.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/game_select/safari_picross.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/game_select/safari_picross.tilemap -------------------------------------------------------------------------------- /gfx/gfx.mk: -------------------------------------------------------------------------------- 1 | # These intermediate build products need specifying here to be PRECIOUS 2 | gfx := \ 3 | $(dir_build)/gfx/copyright/copyright.2bpp \ 4 | $(dir_build)/gfx/game_select/game_select.2bpp \ 5 | $(dir_build)/gfx/title/title_1.2bpp \ 6 | $(dir_build)/gfx/title/title_2.2bpp 7 | 8 | RGBGFXFLAGS := 9 | $(dir_build)/%.2bpp: %.png | $$(dir $$@) 10 | $(RGBGFX) $(RGBGFXFLAGS) -o $@ $< 11 | 12 | SUPERFAMICONVFLAGS := 13 | $(dir_build)/%.4bpp: %.png | $$(dir $$@) 14 | superfamiconv tiles -i $< -d $@ -R $(SUPERFAMICONVFLAGS) 15 | 16 | $(dir_build)/gfx/sprites/%.2bpp: RGBGFXFLAGS = -h 17 | 18 | # data_select.2bpp.xor decompresses to 2bpp-encoded data_select.png with an extra byte $33 (ASCII "3") appended 19 | $(dir_build)/gfx/data_select/data_select.2bpp: gfx/data_select/data_select.png | $$(dir $$@) 20 | $(RGBGFX) $(RGBGFXFLAGS) -o $@ $< 21 | printf 3 >> $@ 22 | 23 | 24 | XOR_COMPRESS := tools/xor_compress 25 | 26 | $(dir_build)/%.xor: $(dir_build)/% | $$(dir $$@) $(XOR_COMPRESS) 27 | $(XOR_COMPRESS) $< $@ 28 | $(dir_build)/%.xor: % | $$(dir $$@) $(XOR_COMPRESS) 29 | $(XOR_COMPRESS) $< $@ 30 | 31 | $(dir_build)/%.tilemap_attrmap.xor: %.tilemap %.attrmap | $$(dir $$@) $(XOR_COMPRESS) 32 | $(XOR_COMPRESS) $^ $@ 33 | 34 | $(dir_build)/gfx/save/save_sgb.xor: $(dir_build)/gfx/sprites/joy_jenny.2bpp $(dir_build)/gfx/save/save_sgb.2bpp | $$(dir $$@) $(XOR_COMPRESS) 35 | $(XOR_COMPRESS) $^ $@ 36 | -------------------------------------------------------------------------------- /gfx/how_to_play/how_to_play.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/how_to_play/how_to_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/how_to_play/how_to_play.png -------------------------------------------------------------------------------- /gfx/how_to_play/how_to_play.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/how_to_play/how_to_play.tilemap -------------------------------------------------------------------------------- /gfx/how_to_play/how_to_play_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/how_to_play/how_to_play_sgb.png -------------------------------------------------------------------------------- /gfx/how_to_play/oak_mouth_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/how_to_play/oak_mouth_sgb.png -------------------------------------------------------------------------------- /gfx/how_to_play/safari.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/how_to_play/safari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/how_to_play/safari.png -------------------------------------------------------------------------------- /gfx/how_to_play/safari.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/how_to_play/safari.tilemap -------------------------------------------------------------------------------- /gfx/itemdex/itemdex.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/itemdex/itemdex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/itemdex/itemdex.png -------------------------------------------------------------------------------- /gfx/itemdex/itemdex.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/itemdex/itemdex.tilemap -------------------------------------------------------------------------------- /gfx/menus/cancel_ok_no_yes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/menus/cancel_ok_no_yes.png -------------------------------------------------------------------------------- /gfx/pokedex/pokedex_list.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/pokedex/pokedex_list.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/pokedex/pokedex_list.tilemap -------------------------------------------------------------------------------- /gfx/pokedex/pokedex_pic.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/pokedex/pokedex_pic.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/pokedex/pokedex_pic.tilemap -------------------------------------------------------------------------------- /gfx/pokedex/pokedex_scroll.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/pokedex/pokedex_scroll.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/pokedex/pokedex_scroll.tilemap -------------------------------------------------------------------------------- /gfx/safari_map/lv_1_plain_zone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_map/lv_1_plain_zone.png -------------------------------------------------------------------------------- /gfx/safari_map/lv_1_plain_zone_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_map/lv_1_plain_zone_sgb.png -------------------------------------------------------------------------------- /gfx/safari_map/lv_1_plain_zone_unused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_map/lv_1_plain_zone_unused.png -------------------------------------------------------------------------------- /gfx/safari_map/lv_2_lake_zone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_map/lv_2_lake_zone.png -------------------------------------------------------------------------------- /gfx/safari_map/lv_2_lake_zone_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_map/lv_2_lake_zone_sgb.png -------------------------------------------------------------------------------- /gfx/safari_map/lv_3_mountain_zone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_map/lv_3_mountain_zone.png -------------------------------------------------------------------------------- /gfx/safari_map/lv_3_mountain_zone_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_map/lv_3_mountain_zone_sgb.png -------------------------------------------------------------------------------- /gfx/safari_map/lv_4_jungle_zone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_map/lv_4_jungle_zone.png -------------------------------------------------------------------------------- /gfx/safari_map/lv_4_jungle_zone_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_map/lv_4_jungle_zone_sgb.png -------------------------------------------------------------------------------- /gfx/safari_map/lv_4_jungle_zone_unused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_map/lv_4_jungle_zone_unused.png -------------------------------------------------------------------------------- /gfx/safari_map/safari_map.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/safari_map/safari_map.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_map/safari_map.tilemap -------------------------------------------------------------------------------- /gfx/safari_zone_album/album_list.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/safari_zone_album/album_list.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_zone_album/album_list.tilemap -------------------------------------------------------------------------------- /gfx/safari_zone_album/album_pic.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/safari_zone_album/album_pic.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_zone_album/album_pic.tilemap -------------------------------------------------------------------------------- /gfx/safari_zone_album/album_scroll.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/safari_zone_album/album_scroll.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_zone_album/album_scroll.tilemap -------------------------------------------------------------------------------- /gfx/safari_zone_album/picture_frames.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_zone_album/picture_frames.png -------------------------------------------------------------------------------- /gfx/safari_zone_album/picture_frames_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/safari_zone_album/picture_frames_light.png -------------------------------------------------------------------------------- /gfx/save/save_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/save/save_sgb.png -------------------------------------------------------------------------------- /gfx/sgb_border/sgb_border.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sgb_border/sgb_border.bin -------------------------------------------------------------------------------- /gfx/sgb_border/sgb_border_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sgb_border/sgb_border_1.png -------------------------------------------------------------------------------- /gfx/sgb_border/sgb_border_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sgb_border/sgb_border_2.png -------------------------------------------------------------------------------- /gfx/sprites/bill_walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sprites/bill_walk.png -------------------------------------------------------------------------------- /gfx/sprites/bulbasaur_walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sprites/bulbasaur_walk.png -------------------------------------------------------------------------------- /gfx/sprites/charmander_walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sprites/charmander_walk.png -------------------------------------------------------------------------------- /gfx/sprites/clefairy_walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sprites/clefairy_walk.png -------------------------------------------------------------------------------- /gfx/sprites/jigglypuff_walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sprites/jigglypuff_walk.png -------------------------------------------------------------------------------- /gfx/sprites/joy_jenny.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sprites/joy_jenny.png -------------------------------------------------------------------------------- /gfx/sprites/mew_silhouette_walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sprites/mew_silhouette_walk.png -------------------------------------------------------------------------------- /gfx/sprites/mew_walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sprites/mew_walk.png -------------------------------------------------------------------------------- /gfx/sprites/misty_walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sprites/misty_walk.png -------------------------------------------------------------------------------- /gfx/sprites/pikachu_walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sprites/pikachu_walk.png -------------------------------------------------------------------------------- /gfx/sprites/psyduck_walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sprites/psyduck_walk.png -------------------------------------------------------------------------------- /gfx/sprites/squirtle_walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/sprites/squirtle_walk.png -------------------------------------------------------------------------------- /gfx/title/title.attrmap: -------------------------------------------------------------------------------- 1 |         -------------------------------------------------------------------------------- /gfx/title/title.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/title/title.tilemap -------------------------------------------------------------------------------- /gfx/title/title_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/title/title_1.png -------------------------------------------------------------------------------- /gfx/title/title_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/title/title_2.png -------------------------------------------------------------------------------- /gfx/title/title_bg.pal: -------------------------------------------------------------------------------- 1 | RGB 31,31,00, 23,20,00, 31,00,00, 00,00,00 2 | RGB 31,31,00, 31,18,00, 27,13,00, 00,00,00 3 | RGB 31,31,00, 31,31,31, 09,04,00, 00,00,00 4 | RGB 31,31,31, 08,08,23, 03,03,18, 00,00,00 5 | RGB 31,31,31, 13,13,28, 03,03,18, 00,00,00 6 | RGB 31,31,31, 31,18,00, 27,13,00, 00,00,00 7 | RGB 31,31,00, 23,20,00, 31,18,00, 00,00,00 8 | RGB 31,31,00, 28,09,06, 18,03,00, 00,00,00 9 | -------------------------------------------------------------------------------- /gfx/title/title_ob.pal: -------------------------------------------------------------------------------- 1 | RGB 31,31,31, 31,31,00, 31,00,00, 00,00,00 2 | RGB 31,31,31, 31,18,00, 27,13,00, 31,31,31 3 | RGB 31,31,31, 08,08,23, 03,03,18, 31,31,31 4 | RGB 31,31,31, 31,18,00, 27,13,00, 03,03,18 5 | RGB 31,31,31, 08,08,23, 03,03,18, 31,18,00 6 | RGB 31,31,31, 31,31,31, 31,31,31, 31,31,31 7 | RGB 31,31,31, 31,31,31, 31,31,31, 00,00,00 8 | RGB 31,31,31, 31,31,31, 31,31,31, 31,31,31 9 | -------------------------------------------------------------------------------- /gfx/town_map/lv_10_hanada_cave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_10_hanada_cave.png -------------------------------------------------------------------------------- /gfx/town_map/lv_10_hanada_cave_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_10_hanada_cave_sgb.png -------------------------------------------------------------------------------- /gfx/town_map/lv_10_hanada_cave_unused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_10_hanada_cave_unused.png -------------------------------------------------------------------------------- /gfx/town_map/lv_1_tokiwa_forest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_1_tokiwa_forest.png -------------------------------------------------------------------------------- /gfx/town_map/lv_1_tokiwa_forest_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_1_tokiwa_forest_sgb.png -------------------------------------------------------------------------------- /gfx/town_map/lv_1_tokiwa_forest_unused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_1_tokiwa_forest_unused.png -------------------------------------------------------------------------------- /gfx/town_map/lv_2_mt_otsukimi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_2_mt_otsukimi.png -------------------------------------------------------------------------------- /gfx/town_map/lv_2_mt_otsukimi_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_2_mt_otsukimi_sgb.png -------------------------------------------------------------------------------- /gfx/town_map/lv_3_sea_cottage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_3_sea_cottage.png -------------------------------------------------------------------------------- /gfx/town_map/lv_3_sea_cottage_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_3_sea_cottage_sgb.png -------------------------------------------------------------------------------- /gfx/town_map/lv_3_sea_cottage_unused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_3_sea_cottage_unused.png -------------------------------------------------------------------------------- /gfx/town_map/lv_4_s_s_anne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_4_s_s_anne.png -------------------------------------------------------------------------------- /gfx/town_map/lv_4_s_s_anne_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_4_s_s_anne_sgb.png -------------------------------------------------------------------------------- /gfx/town_map/lv_5_pokemon_tower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_5_pokemon_tower.png -------------------------------------------------------------------------------- /gfx/town_map/lv_5_pokemon_tower_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_5_pokemon_tower_sgb.png -------------------------------------------------------------------------------- /gfx/town_map/lv_6_silph_company.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_6_silph_company.png -------------------------------------------------------------------------------- /gfx/town_map/lv_6_silph_company_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_6_silph_company_sgb.png -------------------------------------------------------------------------------- /gfx/town_map/lv_6_silph_company_unused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_6_silph_company_unused.png -------------------------------------------------------------------------------- /gfx/town_map/lv_7_cycling_road.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_7_cycling_road.png -------------------------------------------------------------------------------- /gfx/town_map/lv_7_cycling_road_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_7_cycling_road_sgb.png -------------------------------------------------------------------------------- /gfx/town_map/lv_7_cycling_road_unused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_7_cycling_road_unused.png -------------------------------------------------------------------------------- /gfx/town_map/lv_8_power_plant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_8_power_plant.png -------------------------------------------------------------------------------- /gfx/town_map/lv_8_power_plant_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_8_power_plant_sgb.png -------------------------------------------------------------------------------- /gfx/town_map/lv_9_futago_island.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_9_futago_island.png -------------------------------------------------------------------------------- /gfx/town_map/lv_9_futago_island_sgb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/lv_9_futago_island_sgb.png -------------------------------------------------------------------------------- /gfx/town_map/town_map.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/town_map/town_map.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/town_map.tilemap -------------------------------------------------------------------------------- /gfx/town_map/town_map_transition.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/town_map/town_map_transition.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/town_map/town_map_transition.tilemap -------------------------------------------------------------------------------- /gfx/unknown/unknown_6b_7f34.attrmap: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /gfx/unknown/unknown_6b_7f34.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/unknown/unknown_6b_7f34.tilemap -------------------------------------------------------------------------------- /gfx/unknown/unknown_6c_4000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/unknown/unknown_6c_4000.png -------------------------------------------------------------------------------- /gfx/unknown/unknown_6c_7000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/unknown/unknown_6c_7000.png -------------------------------------------------------------------------------- /gfx/unknown/unknown_7a_6020.tilemap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/unknown/unknown_7a_6020.tilemap -------------------------------------------------------------------------------- /gfx/unknown/unknown_7a_6420.attrmap: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /gfx/unused/mario_wario.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/unused/mario_wario.png -------------------------------------------------------------------------------- /gfx/unused/marios_picross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/unused/marios_picross.png -------------------------------------------------------------------------------- /gfx/unused/marios_picross_final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/unused/marios_picross_final.png -------------------------------------------------------------------------------- /gfx/unused/picross_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/unused/picross_2.png -------------------------------------------------------------------------------- /gfx/unused/warios_picross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/unused/warios_picross.png -------------------------------------------------------------------------------- /gfx/unused/warios_picross_final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/gfx/unused/warios_picross_final.png -------------------------------------------------------------------------------- /include/charmap.inc: -------------------------------------------------------------------------------- 1 | charmap "あ", 0 2 | charmap "い", 1 3 | charmap "う", 2 4 | charmap "え", 3 5 | charmap "お", 4 6 | charmap "か", 5 7 | charmap "き", 6 8 | charmap "く", 7 9 | charmap "け", 8 10 | charmap "こ", 9 11 | charmap "さ", 10 12 | charmap "し", 11 13 | charmap "す", 12 14 | charmap "せ", 13 15 | charmap "そ", 14 16 | charmap "た", 15 17 | charmap "ち", 16 18 | charmap "つ", 17 19 | charmap "て", 18 20 | charmap "と", 19 21 | charmap "な", 20 22 | charmap "に", 21 23 | charmap "ぬ", 22 24 | charmap "ね", 23 25 | charmap "の", 24 26 | charmap "は", 25 27 | charmap "ひ", 26 28 | charmap "ふ", 27 29 | charmap "へ", 28 30 | charmap "ほ", 29 31 | charmap "ま", 30 32 | charmap "み", 31 33 | charmap "む", 32 34 | charmap "め", 33 35 | charmap "も", 34 36 | charmap "や", 35 37 | charmap "ゆ", 36 38 | charmap "よ", 37 39 | charmap "ら", 38 40 | charmap "り", 39 41 | charmap "る", 40 42 | charmap "れ", 41 43 | charmap "ろ", 42 44 | charmap "わ", 43 45 | charmap "を", 44 46 | charmap "ん", 45 47 | charmap "っ", 46 48 | charmap "ゃ", 47 49 | charmap "ゅ", 48 50 | charmap "ょ", 49 51 | charmap "が", 50 52 | charmap "ぎ", 51 53 | charmap "ぐ", 52 54 | charmap "げ", 53 55 | charmap "ご", 54 56 | charmap "ざ", 55 57 | charmap "じ", 56 58 | charmap "ず", 57 59 | charmap "ぜ", 58 60 | charmap "ぞ", 59 61 | charmap "だ", 60 62 | charmap "ぢ", 61 63 | charmap "づ", 62 64 | charmap "で", 63 65 | charmap "ど", 64 66 | charmap "ば", 65 67 | charmap "び", 66 68 | charmap "ぶ", 67 69 | charmap "べ", 68 70 | charmap "ぼ", 69 71 | charmap "ぱ", 70 72 | charmap "ぴ", 71 73 | charmap "ぷ", 72 74 | charmap "ぺ", 73 75 | charmap "ぽ", 74 76 | charmap "ぁ", 75 77 | charmap "ぃ", 76 78 | charmap "ぅ", 77 79 | charmap "ぇ", 78 80 | charmap "ぉ", 79 81 | charmap "ア", 80 82 | charmap "イ", 81 83 | charmap "ウ", 82 84 | charmap "エ", 83 85 | charmap "オ", 84 86 | charmap "カ", 85 87 | charmap "キ", 86 88 | charmap "ク", 87 89 | charmap "ケ", 88 90 | charmap "コ", 89 91 | charmap "サ", 90 92 | charmap "シ", 91 93 | charmap "ス", 92 94 | charmap "セ", 93 95 | charmap "ソ", 94 96 | charmap "タ", 95 97 | charmap "チ", 96 98 | charmap "ツ", 97 99 | charmap "テ", 98 100 | charmap "ト", 99 101 | charmap "ナ", 100 102 | charmap "ニ", 101 103 | charmap "ヌ", 102 104 | charmap "ネ", 103 105 | charmap "ノ", 104 106 | charmap "ハ", 105 107 | charmap "ヒ", 106 108 | charmap "フ", 107 109 | charmap "ヘ", 108 110 | charmap "ホ", 109 111 | charmap "マ", 110 112 | charmap "ミ", 111 113 | charmap "ム", 112 114 | charmap "メ", 113 115 | charmap "モ", 114 116 | charmap "ヤ", 115 117 | charmap "ユ", 116 118 | charmap "ヨ", 117 119 | charmap "ラ", 118 120 | charmap "リ", 119 121 | charmap "ル", 120 122 | charmap "レ", 121 123 | charmap "ロ", 122 124 | charmap "ワ", 123 125 | charmap "ヲ", 124 126 | charmap "ン", 125 127 | charmap "ッ", 126 128 | charmap "ャ", 127 129 | charmap "ュ", 128 130 | charmap "ョ", 129 131 | charmap "ガ", 130 132 | charmap "ギ", 131 133 | charmap "グ", 132 134 | charmap "ゲ", 133 135 | charmap "ゴ", 134 136 | charmap "ザ", 135 137 | charmap "ジ", 136 138 | charmap "ズ", 137 139 | charmap "ゼ", 138 140 | charmap "ゾ", 139 141 | charmap "ダ", 140 142 | charmap "ヂ", 141 143 | charmap "ヅ", 142 144 | charmap "デ", 143 145 | charmap "ド", 144 146 | charmap "バ", 145 147 | charmap "ビ", 146 148 | charmap "ブ", 147 149 | charmap "ベ", 148 150 | charmap "ボ", 149 151 | charmap "パ", 150 152 | charmap "ピ", 151 153 | charmap "プ", 152 154 | charmap "ペ", 153 155 | charmap "ポ", 154 156 | charmap "ァ", 155 157 | charmap "ィ", 156 158 | charmap "ゥ", 157 159 | charmap "ェ", 158 160 | charmap "ォ", 159 161 | charmap "0", 160 162 | charmap "1", 161 163 | charmap "2", 162 164 | charmap "3", 163 165 | charmap "4", 164 166 | charmap "5", 165 167 | charmap "6", 166 168 | charmap "7", 167 169 | charmap "8", 168 170 | charmap "9", 169 171 | charmap "ー", 170 172 | charmap "A", 171 173 | charmap "B", 172 174 | charmap "C", 173 175 | charmap "D", 174 176 | charmap "E", 175 177 | charmap "F", 176 178 | charmap "G", 177 179 | charmap "H", 178 180 | charmap "I", 179 181 | charmap "J", 180 182 | charmap "K", 181 183 | charmap "L", 182 184 | charmap "M", 183 185 | charmap "N", 184 186 | charmap "O", 185 187 | charmap "P", 186 188 | charmap "Q", 187 189 | charmap "R", 188 190 | charmap "S", 189 191 | charmap "T", 190 192 | charmap "U", 191 193 | charmap "V", 192 194 | charmap "W", 193 195 | charmap "X", 194 196 | charmap "Y", 195 197 | charmap "Z", 196 198 | charmap "a", 197 199 | charmap "b", 198 200 | charmap "c", 199 201 | charmap "d", 200 202 | charmap "e", 201 203 | charmap "f", 202 204 | charmap "g", 203 205 | charmap "h", 204 206 | charmap "i", 205 207 | charmap "j", 206 208 | charmap "k", 207 209 | charmap "l", 208 210 | charmap "m", 209 211 | charmap "n", 210 212 | charmap "o", 211 213 | charmap "p", 212 214 | charmap "q", 213 215 | charmap "r", 214 216 | charmap "s", 215 217 | charmap "t", 216 218 | charmap "u", 217 219 | charmap "v", 218 220 | charmap "w", 219 221 | charmap "x", 220 222 | charmap "y", 221 223 | charmap "z", 222 224 | charmap " ", 223 225 | charmap "、", 224 226 | charmap "。", 225 227 | charmap "『", 226 228 | charmap "』", 227 229 | charmap "❌", 228 230 | charmap "“", 229 231 | charmap "”", 230 232 | charmap "!", 231 233 | charmap "?", 232 234 | charmap ":", 233 235 | charmap ";", 234 236 | charmap ",", 235 237 | charmap ".", 236 238 | charmap "・", 237 239 | charmap "(", 238 240 | charmap ")", 239 241 | charmap "~", 240 242 | charmap "♂", 241 243 | charmap "♀", 242 244 | 245 | ; ASCII alternatives to fullwidth characters 246 | charmap "0", 160 247 | charmap "1", 161 248 | charmap "2", 162 249 | charmap "3", 163 250 | charmap "4", 164 251 | charmap "5", 165 252 | charmap "6", 166 253 | charmap "7", 167 254 | charmap "8", 168 255 | charmap "9", 169 256 | charmap "-", 170 257 | charmap "A", 171 258 | charmap "B", 172 259 | charmap "C", 173 260 | charmap "D", 174 261 | charmap "E", 175 262 | charmap "F", 176 263 | charmap "G", 177 264 | charmap "H", 178 265 | charmap "I", 179 266 | charmap "J", 180 267 | charmap "K", 181 268 | charmap "L", 182 269 | charmap "M", 183 270 | charmap "N", 184 271 | charmap "O", 185 272 | charmap "P", 186 273 | charmap "Q", 187 274 | charmap "R", 188 275 | charmap "S", 189 276 | charmap "T", 190 277 | charmap "U", 191 278 | charmap "V", 192 279 | charmap "W", 193 280 | charmap "X", 194 281 | charmap "Y", 195 282 | charmap "Z", 196 283 | charmap "a", 197 284 | charmap "b", 198 285 | charmap "c", 199 286 | charmap "d", 200 287 | charmap "e", 201 288 | charmap "f", 202 289 | charmap "g", 203 290 | charmap "h", 204 291 | charmap "i", 205 292 | charmap "j", 206 293 | charmap "k", 207 294 | charmap "l", 208 295 | charmap "m", 209 296 | charmap "n", 210 297 | charmap "o", 211 298 | charmap "p", 212 299 | charmap "q", 213 300 | charmap "r", 214 301 | charmap "s", 215 302 | charmap "t", 216 303 | charmap "u", 217 304 | charmap "v", 218 305 | charmap "w", 219 306 | charmap "x", 220 307 | charmap "y", 221 308 | charmap "z", 222 309 | charmap " ", 223 310 | charmap "×", 228 311 | charmap "!", 231 312 | charmap "?", 232 313 | charmap ":", 233 314 | charmap ";", 234 315 | charmap ",", 235 316 | charmap ".", 236 317 | charmap ".", 236 318 | charmap "·", 237 319 | charmap "(", 238 320 | charmap ")", 239 321 | charmap "~", 240 322 | 323 | DEF TX_LF EQU -2 ; Line feed 324 | DEF TX_END EQU -1 ; End of message 325 | 326 | pushc 327 | newcharmap ascii 328 | popc 329 | -------------------------------------------------------------------------------- /include/code_macros.inc: -------------------------------------------------------------------------------- 1 | macro lb 2 | ld \1, ((\2) & $ff) << 8 | ((\3) & $ff) 3 | endm 4 | 5 | macro ln 6 | ld \1, ((\2) & $f) << 4 | ((\3) & $f) 7 | endm 8 | 9 | macro ld16 10 | ld a, LOW(\2) 11 | ld [\1 + 0], a 12 | ld a, HIGH(\2) 13 | ld [\1 + 1], a 14 | endm 15 | 16 | 17 | macro farcall 18 | push af 19 | ld16 w_farcall_target, \1 20 | ld a, BANK(\1) 21 | ld [w_bank_temp], a 22 | pop af 23 | call _farcall 24 | endm 25 | 26 | macro farjp 27 | push af 28 | ld16 w_farcall_target, \1 29 | ld a, BANK(\1) 30 | ld [w_bank_temp], a 31 | pop af 32 | jp _farjp 33 | endm 34 | 35 | 36 | macro push_bank_rom 37 | ld a, [w_bank_rom] 38 | push af 39 | ld a, \1 40 | ld [w_bank_rom], a 41 | ld [rROMB0], a 42 | endm 43 | 44 | macro pop_bank_rom 45 | pop af 46 | ld [w_bank_rom], a 47 | ld [rROMB0], a 48 | endm 49 | -------------------------------------------------------------------------------- /include/const_macros.inc: -------------------------------------------------------------------------------- 1 | macro const_def 2 | if _NARG >= 1 3 | def const_value = \1 4 | else 5 | def const_value = 0 6 | endc 7 | if _NARG >= 2 8 | def const_inc = \2 9 | else 10 | def const_inc = 1 11 | endc 12 | endm 13 | 14 | macro const 15 | DEF \1 EQU const_value 16 | def const_value = const_value + const_inc 17 | endm 18 | 19 | macro shift_const 20 | DEF \1 EQU (1 << const_value) 21 | def const_value = const_value + const_inc 22 | endm 23 | 24 | macro const_skip 25 | if _NARG >= 1 26 | def const_value = const_value + const_inc * (\1) 27 | else 28 | def const_value = const_value + const_inc 29 | endc 30 | endm 31 | 32 | macro const_next 33 | if (const_value > 0 && \1 < const_value) || (const_value < 0 && \1 > const_value) 34 | fail "const_next cannot go backwards from {const_value} to \1" 35 | else 36 | def const_value = \1 37 | endc 38 | endm 39 | 40 | macro const_dw 41 | const \1 42 | dw \2 43 | endm 44 | -------------------------------------------------------------------------------- /include/gfx_macros.inc: -------------------------------------------------------------------------------- 1 | macro RGB 2 | rept _NARG / 3 3 | dw palred (\1) + palgreen (\2) + palblue (\3) 4 | shift 3 5 | endr 6 | endm 7 | 8 | DEF palred EQUS "(1 << 0) *" 9 | DEF palgreen EQUS "(1 << 5) *" 10 | DEF palblue EQUS "(1 << 10) *" 11 | 12 | DEF palettes EQUS "* PALETTE_SIZE" 13 | DEF palette EQUS "+ PALETTE_SIZE *" 14 | DEF color EQUS "+ PAL_COLOR_SIZE *" 15 | 16 | DEF tiles EQUS "* $10" 17 | -------------------------------------------------------------------------------- /include/level_constants.inc: -------------------------------------------------------------------------------- 1 | ; Easy Picross levels 2 | const_def 3 | const LEVEL_HOME 4 | 5 | ; Town Map levels 6 | const_def 7 | const LEVEL_TOKIWA_FOREST 8 | const LEVEL_MT_OTSUKIMI 9 | const LEVEL_SEA_COTTAGE 10 | const LEVEL_S_S_ANNE 11 | const LEVEL_POKEMON_TOWER 12 | const LEVEL_SILPH_COMPANY 13 | const LEVEL_CYCLING_ROAD 14 | const LEVEL_POWER_PLANT 15 | const LEVEL_FUTAGO_ISLAND 16 | const LEVEL_HANADA_CAVE 17 | const LEVEL_MEW 18 | 19 | ; Safari Zone levels 20 | const_def 21 | const LEVEL_PLAIN_ZONE 22 | const LEVEL_LAKE_ZONE 23 | const LEVEL_MOUNTAIN_ZONE 24 | const LEVEL_JUNGLE_ZONE 25 | -------------------------------------------------------------------------------- /include/puzzle_constants.inc: -------------------------------------------------------------------------------- 1 | const_def 2 | const PUZZLE_POKEDEX 3 | const PUZZLE_TOWN_MAP 4 | const PUZZLE_SLOT_MACHINE 5 | const PUZZLE_RARE_CANDY 6 | const PUZZLE_PC 7 | const PUZZLE_REPEL 8 | const PUZZLE_SILPH_SCOPE 9 | const PUZZLE_POKE_DOLL 10 | const PUZZLE_GOLD_TEETH 11 | const PUZZLE_JIGGLYPUFFS_MICROPHONE 12 | const PUZZLE_SUPER_ROD 13 | const PUZZLE_POKE_FLUTE 14 | const PUZZLE_BALLOONS 15 | const PUZZLE_BICYCLE 16 | const PUZZLE_HAT 17 | DEF TOWN_MAP_PUZZLES EQU const_value 18 | const PUZZLE_DIGLETT 19 | const PUZZLE_GASTLY 20 | const PUZZLE_OMANYTE 21 | const PUZZLE_MUK 22 | const PUZZLE_KABUTO 23 | const PUZZLE_RATTATA 24 | const PUZZLE_JIGGLYPUFF 25 | const PUZZLE_MANKEY 26 | const PUZZLE_SLOWPOKE 27 | const PUZZLE_POLIWAG 28 | const PUZZLE_PARASECT 29 | const PUZZLE_VENONAT 30 | const PUZZLE_POLIWHIRL 31 | const PUZZLE_DRAGONAIR 32 | const PUZZLE_CHARIZARD 33 | const PUZZLE_CHANSEY 34 | const PUZZLE_PORYGON 35 | const PUZZLE_GENGAR 36 | const PUZZLE_DITTO 37 | const PUZZLE_BELLSPROUT 38 | const PUZZLE_HAUNTER 39 | const PUZZLE_KOFFING 40 | const PUZZLE_PINSIR 41 | const PUZZLE_HORSEA 42 | const PUZZLE_NIDORAN_F 43 | const PUZZLE_DRATINI 44 | const PUZZLE_WEEPINBELL 45 | const PUZZLE_STARYU 46 | const PUZZLE_DUGTRIO 47 | const PUZZLE_VENUSAUR 48 | const PUZZLE_DROWZEE 49 | const PUZZLE_SEADRA 50 | const PUZZLE_NIDORAN_M 51 | const PUZZLE_WIGGLYTUFF 52 | const PUZZLE_MAGMAR 53 | const PUZZLE_IVYSAUR 54 | const PUZZLE_KAKUNA 55 | const PUZZLE_CLEFAIRY 56 | const PUZZLE_SPEAROW 57 | const PUZZLE_STARMIE 58 | const PUZZLE_ZUBAT 59 | const PUZZLE_VOLTORB 60 | const PUZZLE_CLOYSTER 61 | const PUZZLE_EXEGGUTOR 62 | const PUZZLE_MAGIKARP 63 | const PUZZLE_SEEL 64 | const PUZZLE_SHELLDER 65 | const PUZZLE_MEOWTH 66 | const PUZZLE_FEAROW 67 | const PUZZLE_WEEDLE 68 | const PUZZLE_MAGNEMITE 69 | const PUZZLE_SCYTHER 70 | const PUZZLE_VULPIX 71 | const PUZZLE_METAPOD 72 | const PUZZLE_VENOMOTH 73 | const PUZZLE_ELECTABUZZ 74 | const PUZZLE_TANGELA 75 | const PUZZLE_GOLDEEN 76 | const PUZZLE_NIDOQUEEN 77 | const PUZZLE_GYARADOS 78 | const PUZZLE_PERSIAN 79 | const PUZZLE_DODRIO 80 | const PUZZLE_JOLTEON 81 | const PUZZLE_GOLDUCK 82 | const PUZZLE_MR_MIME 83 | const PUZZLE_BUTTERFREE 84 | const PUZZLE_GRAVELER 85 | const PUZZLE_RATICATE 86 | const PUZZLE_ALAKAZAM 87 | const PUZZLE_KANGASKHAN 88 | const PUZZLE_GLOOM 89 | const PUZZLE_PONYTA 90 | const PUZZLE_NIDORINO 91 | const PUZZLE_NIDOKING 92 | const PUZZLE_BLASTOISE 93 | const PUZZLE_PRIMEAPE 94 | const PUZZLE_MACHOKE 95 | const PUZZLE_RAPIDASH 96 | const PUZZLE_GRIMER 97 | const PUZZLE_ONIX 98 | const PUZZLE_MACHAMP 99 | const PUZZLE_VILEPLUME 100 | const PUZZLE_PARAS 101 | const PUZZLE_LAPRAS 102 | const PUZZLE_BULBASAUR 103 | const PUZZLE_MACHOP 104 | const PUZZLE_MAGNETON 105 | const PUZZLE_SEAKING 106 | const PUZZLE_SQUIRTLE 107 | const PUZZLE_DRAGONITE 108 | const PUZZLE_OMASTAR 109 | const PUZZLE_GROWLITHE 110 | const PUZZLE_VAPOREON 111 | const PUZZLE_FARFETCHD 112 | const PUZZLE_BEEDRILL 113 | const PUZZLE_GOLEM 114 | const PUZZLE_FLAREON 115 | const PUZZLE_CHARMANDER 116 | const PUZZLE_KRABBY 117 | const PUZZLE_CUBONE 118 | const PUZZLE_ARBOK 119 | const PUZZLE_RHYHORN 120 | const PUZZLE_NINETALES 121 | const PUZZLE_ABRA 122 | const PUZZLE_MEWTWO 123 | const PUZZLE_RHYDON 124 | const PUZZLE_RAICHU 125 | const PUZZLE_TAUROS 126 | const PUZZLE_HITMONLEE 127 | const PUZZLE_CLEFABLE 128 | const PUZZLE_LICKITUNG 129 | const PUZZLE_EEVEE 130 | const PUZZLE_PIKACHU 131 | const PUZZLE_CATERPIE 132 | const PUZZLE_NIDORINA 133 | const PUZZLE_MAROWAK 134 | const PUZZLE_ARCANINE 135 | const PUZZLE_KADABRA 136 | const PUZZLE_VICTREEBEL 137 | const PUZZLE_MOLTRES 138 | const PUZZLE_DODUO 139 | const PUZZLE_JYNX 140 | const PUZZLE_GOLBAT 141 | const PUZZLE_SANDSLASH 142 | const PUZZLE_TENTACRUEL 143 | const PUZZLE_PIDGEOT 144 | const PUZZLE_DEWGONG 145 | const PUZZLE_KINGLER 146 | const PUZZLE_SNORLAX 147 | const PUZZLE_EXEGGCUTE 148 | const PUZZLE_WEEZING 149 | const PUZZLE_ELECTRODE 150 | const PUZZLE_AERODACTYL 151 | const PUZZLE_WARTORTLE 152 | const PUZZLE_ARTICUNO 153 | const PUZZLE_HITMONCHAN 154 | const PUZZLE_SLOWBRO 155 | const PUZZLE_PIDGEOTTO 156 | const PUZZLE_HYPNO 157 | const PUZZLE_KAPUTOPS 158 | const PUZZLE_SANDSHREW 159 | const PUZZLE_EKANS 160 | const PUZZLE_POLIWRATH 161 | const PUZZLE_CHARMELEON 162 | const PUZZLE_PSYDUCK 163 | const PUZZLE_ODDISH 164 | const PUZZLE_TENTACOOL 165 | const PUZZLE_PIDGEY 166 | const PUZZLE_GEODUDE 167 | const PUZZLE_ZAPDOS 168 | const PUZZLE_MEW 169 | const PUZZLE_TOGEPI 170 | DEF SAFARI_ZONE_PUZZLES EQU const_value 171 | const PUZZLE_SAFARI_HAUNTER 172 | const PUZZLE_MEW_AND_MEWTWO 173 | const PUZZLE_STARING_CONTEST 174 | const PUZZLE_LAPRAS_AND_PIKACHU 175 | const PUZZLE_SURFING_PIKACHU 176 | const PUZZLE_STARMIE_AND_STARYU 177 | const PUZZLE_SEEL_SHOW 178 | const PUZZLE_BALANCING_PIKACHU 179 | const PUZZLE_BLOCKS_AND_PORYGON 180 | const PUZZLE_CARP_STREAMER 181 | const PUZZLE_CRAB_AND_RICEBALL 182 | const PUZZLE_SAFARI_MAGNEMITE 183 | const PUZZLE_TRANSFORMING_DITTO 184 | const PUZZLE_FIREFIGHTER_SQUIRTLE 185 | const PUZZLE_PIDGEOT_PARENT 186 | const PUZZLE_JUGGLING_MR_MIME 187 | const PUZZLE_CHARMANDER_AND_SQUIRTLE 188 | const PUZZLE_HERACROSS_AND_METAPOD 189 | const PUZZLE_NAPPING 190 | const PUZZLE_REGULAR_PSYDUCK 191 | const PUZZLE_HAPPY_MOMENT 192 | const PUZZLE_EATING_TOGETHER 193 | const PUZZLE_CLEFAIRY_AND_CLEFABLE 194 | const PUZZLE_DRAWING_PIKACHU 195 | const PUZZLE_RAINFALL 196 | const PUZZLE_ARM_WRESTLING 197 | const PUZZLE_HORSEA_AND_SHELLDER 198 | const PUZZLE_DOUBLE_SLAP 199 | const PUZZLE_SINGING_JIGGLYPUFF 200 | const PUZZLE_MEMORIAL_PHOTO 201 | const PUZZLE_MATCH 202 | const PUZZLE_SEA_BATHING 203 | const PUZZLE_SAFARI_BUTTERFREE 204 | const PUZZLE_THUNDER_SHOCK 205 | const PUZZLE_EATING_CONTEST 206 | const PUZZLE_PLAYING_IN_SNOW 207 | const PUZZLE_FOSSIL_POKEMON 208 | const PUZZLE_WHACK_A_MOLE 209 | const PUZZLE_LEGENDARY_POKEMON 210 | const PUZZLE_EXEGGCUTE_AND_TOGEPI 211 | const PUZZLE_CUBONE_AND_BUTTERFREE 212 | const PUZZLE_RACE 213 | const PUZZLE_SLOWBRO_AND_PSYDUCK 214 | const PUZZLE_SLOWPOKE_AND_SLOWBRO 215 | const PUZZLE_MONKEY_AND_CRAB 216 | const PUZZLE_THREE_POKEMON 217 | const PUZZLE_SAFARI_GLOOM 218 | const PUZZLE_TEAM_ROCKET 219 | const PUZZLE_PIKACHU_AND_TOGEPI 220 | const PUZZLE_HIDDEN_VILLAGE 221 | const PUZZLE_SNOWMAN 222 | const PUZZLE_PIKACHU_FOREST 223 | const PUZZLE_POKEBALL 224 | const PUZZLE_SAFARI_PIKACHU 225 | const PUZZLE_OLD_AMBER 226 | const PUZZLE_MISSINGNO_DE 227 | const PUZZLE_MISSINGNO_DF 228 | const PUZZLE_MISSINGNO_E0 229 | const PUZZLE_MISSINGNO_E1 230 | const PUZZLE_MISSINGNO_E2 231 | const PUZZLE_MISSINGNO_E3 232 | const PUZZLE_MISSINGNO_E4 233 | const PUZZLE_MISSINGNO_E5 234 | const PUZZLE_MISSINGNO_E6 235 | const PUZZLE_MISSINGNO_E7 236 | const PUZZLE_MISSINGNO_E8 237 | const PUZZLE_MISSINGNO_E9 238 | const PUZZLE_MISSINGNO_EA 239 | const PUZZLE_MISSINGNO_EB 240 | const PUZZLE_MISSINGNO_EC 241 | const PUZZLE_MISSINGNO_ED 242 | const PUZZLE_MISSINGNO_EE 243 | const PUZZLE_MISSINGNO_EF 244 | -------------------------------------------------------------------------------- /include/text.inc: -------------------------------------------------------------------------------- 1 | INCLUDE "charmap.inc" 2 | 3 | text EQUS "dw" 4 | line EQUS "dw TX_LF," 5 | done EQUS "dw TX_END" 6 | -------------------------------------------------------------------------------- /layout.link: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mid-kid/pokepicross/1eff60b0578854598b1fc3a315d9ed63e0f4eb60/layout.link -------------------------------------------------------------------------------- /mgbdis.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ./mgbdis/mgbdis.py --overwrite \ 4 | --disable-auto-ldh \ 5 | --ld_c ldh_c \ 6 | --print-hex \ 7 | "$@" picross.gbc 8 | -------------------------------------------------------------------------------- /mgbdis/.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | disassembly/ 3 | test/ 4 | tmp/ -------------------------------------------------------------------------------- /mgbdis/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Matt Currie 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /mgbdis/README.md: -------------------------------------------------------------------------------- 1 | # mgbdis 2 | 3 | A Game Boy ROM disassembler. 4 | 5 | 6 | ## Features 7 | 8 | - Generates assembly code compatible with RGBDS (v0.3.8+ recommended, see [Notes](#notes)) 9 | - Supports ROMs with multiple banks 10 | - Supports .sym files to define labels, code, data, text and image blocks 11 | - Outputs a makefile to rebuild the ROM 12 | - Uses defines from hardware.inc v2.7 for hardware registers ([source](https://github.com/tobiasvl/hardware.inc)) 13 | - Slow on large ROMs 14 | 15 | 16 | ## Usage 17 | 18 | Disassemble a ROM: 19 | 20 | ./mgbdis.py some-game.gb 21 | 22 | Default output is to the ```disassembly``` directory. You can verify the result of the disassembly by running ```make``` and then checking the ```game.gb``` (or ```game.gbc```) file created: 23 | 24 | cd disassembly && make 25 | 26 | There are also a number of options available to control the formatting and instruction style of the generated assembly code. You can view these by running: 27 | 28 | ./mgbdis.py -h 29 | 30 | ## Symbol Files 31 | 32 | Symbol files allow you to indicate where code, data, test and image data blocks are in the ROM. 33 | 34 | The instructions of the Game Boy CPU (SM83) have different lengths, and data can be interleaved with code in the ROM, so it is not possible to always accurately identify where an instruction starts and stops. Defining code blocks in a symbol file can help to avoid problems with mgbdis trying to disassemble in the middle of an instruction. 35 | 36 | If you do not have a symbol file, you can try generating one with my Game Boy emulator - [Beaten Dying Moon](https://mattcurrie.com/bdm-demo/). It can generate a symbol file with code block definitions based on the the addresses of the instructions that have actually been executed while you have been playing the game, avoiding instruction alignment issues. 37 | 38 | To use a symbol file with mgbdis, it should exist in the same directory as the ROM and have the same name, except change the extension to be ```.sym```. 39 | 40 | All values (except for image widths) should be in hexadecimal. Entries start with a bank number followed by the address in memory. 41 | 42 | Block types can be defined by using the ```.code```, ```.data```, ```.text```, and ```.image``` magic labels, followed by the length of the block in bytes. 43 | 44 | ### Code 45 | 46 | Adding a label for some code: 47 | 48 | ``` 49 | 03:47f2 Read_Joypad_State 50 | ``` 51 | 52 | ### Data 53 | 54 | Adding a label for 512 bytes of data: 55 | 56 | ``` 57 | 0d:4800 Level_Data 58 | 0d:4800 .data:200 59 | ``` 60 | 61 | ### Text 62 | 63 | Adding a label for 16 bytes of text: 64 | 65 | ``` 66 | 00:3d00 Character_Name 67 | 00:3d00 .text:10 68 | ``` 69 | 70 | ### Image 71 | 72 | The ```.image``` magic label allows you to define blocks of 1 or 2 bits per pixel tile data in the ROM. Images are output as PNG files in the ```/gfx``` directory of the disassembly, and are converted back to 1bpp or 2bpp tile data by the makefile using rgbgfx. If a label is specified at the address of the image block then it will be used for the name of the PNG file. 73 | 74 | The block length in bytes should be a multiple of 16, as each tile requires 16 bytes of image data. 75 | 76 | The image width in pixels can be specified as a decimal number prefixed with ```w```. The width value should be a multiple of 8, and the combination of block length and image width must result in a rectangluar image without any empty tiles. The default image width is ```128``` pixels, or if the block length indicates an odd number of tiles, then an image with a single row of tiles will be generated. 77 | 78 | The palette is a byte sized value which selects the shades of grey to use when generating the image. It uses the same format as the BGP register at ```0xFF47```. The value can be specified in hexidecimal prefixed with ```p```. The default palette is ```E4```. 79 | 80 | The default is to treat it as 2 bits per pixel tile data. A ```1bpp``` option can be supplied to treat the data as 1 bit per pixel tile data. 81 | 82 | Adding a label for 1280 bytes of tile data, with a width of 128 pixels and palette 0xE4: 83 | 84 | ``` 85 | 02:791a Title_Screen_Tile_Data 86 | 02:791a .image:500:w128,pe4 87 | ``` 88 | 89 | Resulting image: 90 | 91 | ![Imgur](https://i.imgur.com/2duQ7Py.png) 92 | 93 | 94 | Example for 1bpp tile data: 95 | 96 | ``` 97 | 05:4000 Font 98 | 05:4000 .image:200:w128,1bpp 99 | ``` 100 | 101 | Resulting image: 102 | 103 | ![Imgur](https://i.imgur.com/iX5FCXL.png) 104 | 105 | ## Notes 106 | 107 | - For constant expressions, RGBDS will by default optimise instructions like ```LD [$FF40],a``` to ```LDH [$FF00+40],a```, so these are encoded as data bytes using a macro to ensure exact reproduction of the original ROM (thanks to ISSOtm). RGBDS >= v0.3.7 has an option to disable this optimisation. Use ```--disable-auto-ldh``` with mgbdis to disable the macro. 108 | - RGBDS automatically adds ```NOP``` instructions after ```STOP``` and ```HALT```, so the disassembler will output these as data bytes if the instruction is not followed by a ```NOP``` in the original ROM. Use ```--disable-halt-nops``` with mgbdis to instruct RGBDS to disable inserting automatic ```NOP``` instructions after ```HALT``` instructions. 109 | - RGBDS v0.3.6 has an off by one error for some ```JR``` instructions, causing the assembled ROM to not match the original. 110 | - RGBDS v0.3.7 ```rgbfix``` generates an invalid global checksum in the ROM header, causing the assembled ROM to not match the original. 111 | -------------------------------------------------------------------------------- /mgbdis/instruction_set.py: -------------------------------------------------------------------------------- 1 | instructions = { 2 | 3 | 0x00: 'nop', 4 | 0x01: 'ld bc,d16', 5 | 0x02: 'ld [bc],a', 6 | 0x03: 'inc bc', 7 | 0x04: 'inc b', 8 | 0x05: 'dec b', 9 | 0x06: 'ld b,d8', 10 | 0x07: 'rlca', 11 | 0x08: 'ld [a16],sp', 12 | 0x09: 'add hl,bc', 13 | 0x0a: 'ld a,[bc]', 14 | 0x0b: 'dec bc', 15 | 0x0c: 'inc c', 16 | 0x0d: 'dec c', 17 | 0x0e: 'ld c,d8', 18 | 0x0f: 'rrca', 19 | 20 | 0x10: 'stop', 21 | 0x11: 'ld de,d16', 22 | 0x12: 'ld [de],a', 23 | 0x13: 'inc de', 24 | 0x14: 'inc d', 25 | 0x15: 'dec d', 26 | 0x16: 'ld d,d8', 27 | 0x17: 'rla', 28 | 0x18: 'jr pc+r8', 29 | 0x19: 'add hl,de', 30 | 0x1a: 'ld a,[de]', 31 | 0x1b: 'dec de', 32 | 0x1c: 'inc e', 33 | 0x1d: 'dec e', 34 | 0x1e: 'ld e,d8', 35 | 0x1f: 'rra', 36 | 37 | 0x20: 'jr nz,pc+r8', 38 | 0x21: 'ld hl,d16', 39 | 0x22: 'ld [hl+],a', 40 | 0x23: 'inc hl', 41 | 0x24: 'inc h', 42 | 0x25: 'dec h', 43 | 0x26: 'ld h,d8', 44 | 0x27: 'daa', 45 | 0x28: 'jr z,pc+r8', 46 | 0x29: 'add hl,hl', 47 | 0x2a: 'ld a,[hl+]', 48 | 0x2b: 'dec hl', 49 | 0x2c: 'inc l', 50 | 0x2d: 'dec l', 51 | 0x2e: 'ld l,d8', 52 | 0x2f: 'cpl', 53 | 54 | 0x30: 'jr nc,pc+r8', 55 | 0x31: 'ld sp,d16', 56 | 0x32: 'ld [hl-],a', 57 | 0x33: 'inc sp', 58 | 0x34: 'inc [hl]', 59 | 0x35: 'dec [hl]', 60 | 0x36: 'ld [hl],d8', 61 | 0x37: 'scf', 62 | 0x38: 'jr c,pc+r8', 63 | 0x39: 'add hl,sp', 64 | 0x3a: 'ld a,[hl-]', 65 | 0x3b: 'dec sp', 66 | 0x3c: 'inc a', 67 | 0x3d: 'dec a', 68 | 0x3e: 'ld a,d8', 69 | 0x3f: 'ccf', 70 | 71 | 0x40: 'ld b,b', 72 | 0x41: 'ld b,c', 73 | 0x42: 'ld b,d', 74 | 0x43: 'ld b,e', 75 | 0x44: 'ld b,h', 76 | 0x45: 'ld b,l', 77 | 0x46: 'ld b,[hl]', 78 | 0x47: 'ld b,a', 79 | 0x48: 'ld c,b', 80 | 0x49: 'ld c,c', 81 | 0x4a: 'ld c,d', 82 | 0x4b: 'ld c,e', 83 | 0x4c: 'ld c,h', 84 | 0x4d: 'ld c,l', 85 | 0x4e: 'ld c,[hl]', 86 | 0x4f: 'ld c,a', 87 | 88 | 0x50: 'ld d,b', 89 | 0x51: 'ld d,c', 90 | 0x52: 'ld d,d', 91 | 0x53: 'ld d,e', 92 | 0x54: 'ld d,h', 93 | 0x55: 'ld d,l', 94 | 0x56: 'ld d,[hl]', 95 | 0x57: 'ld d,a', 96 | 0x58: 'ld e,b', 97 | 0x59: 'ld e,c', 98 | 0x5a: 'ld e,d', 99 | 0x5b: 'ld e,e', 100 | 0x5c: 'ld e,h', 101 | 0x5d: 'ld e,l', 102 | 0x5e: 'ld e,[hl]', 103 | 0x5f: 'ld e,a', 104 | 105 | 0x60: 'ld h,b', 106 | 0x61: 'ld h,c', 107 | 0x62: 'ld h,d', 108 | 0x63: 'ld h,e', 109 | 0x64: 'ld h,h', 110 | 0x65: 'ld h,l', 111 | 0x66: 'ld h,[hl]', 112 | 0x67: 'ld h,a', 113 | 0x68: 'ld l,b', 114 | 0x69: 'ld l,c', 115 | 0x6a: 'ld l,d', 116 | 0x6b: 'ld l,e', 117 | 0x6c: 'ld l,h', 118 | 0x6d: 'ld l,l', 119 | 0x6e: 'ld l,[hl]', 120 | 0x6f: 'ld l,a', 121 | 122 | 0x70: 'ld [hl],b', 123 | 0x71: 'ld [hl],c', 124 | 0x72: 'ld [hl],d', 125 | 0x73: 'ld [hl],e', 126 | 0x74: 'ld [hl],h', 127 | 0x75: 'ld [hl],l', 128 | 0x76: 'halt', 129 | 0x77: 'ld [hl],a', 130 | 0x78: 'ld a,b', 131 | 0x79: 'ld a,c', 132 | 0x7a: 'ld a,d', 133 | 0x7b: 'ld a,e', 134 | 0x7c: 'ld a,h', 135 | 0x7d: 'ld a,l', 136 | 0x7e: 'ld a,[hl]', 137 | 0x7f: 'ld a,a', 138 | 139 | 0x80: 'add b', 140 | 0x81: 'add c', 141 | 0x82: 'add d', 142 | 0x83: 'add e', 143 | 0x84: 'add h', 144 | 0x85: 'add l', 145 | 0x86: 'add [hl]', 146 | 0x87: 'add a', 147 | 0x88: 'adc b', 148 | 0x89: 'adc c', 149 | 0x8a: 'adc d', 150 | 0x8b: 'adc e', 151 | 0x8c: 'adc h', 152 | 0x8d: 'adc l', 153 | 0x8e: 'adc [hl]', 154 | 0x8f: 'adc a', 155 | 156 | 0x90: 'sub b', 157 | 0x91: 'sub c', 158 | 0x92: 'sub d', 159 | 0x93: 'sub e', 160 | 0x94: 'sub h', 161 | 0x95: 'sub l', 162 | 0x96: 'sub [hl]', 163 | 0x97: 'sub a', 164 | 0x98: 'sbc b', 165 | 0x99: 'sbc c', 166 | 0x9a: 'sbc d', 167 | 0x9b: 'sbc e', 168 | 0x9c: 'sbc h', 169 | 0x9d: 'sbc l', 170 | 0x9e: 'sbc [hl]', 171 | 0x9f: 'sbc a', 172 | 173 | 0xa0: 'and b', 174 | 0xa1: 'and c', 175 | 0xa2: 'and d', 176 | 0xa3: 'and e', 177 | 0xa4: 'and h', 178 | 0xa5: 'and l', 179 | 0xa6: 'and [hl]', 180 | 0xa7: 'and a', 181 | 0xa8: 'xor b', 182 | 0xa9: 'xor c', 183 | 0xaa: 'xor d', 184 | 0xab: 'xor e', 185 | 0xac: 'xor h', 186 | 0xad: 'xor l', 187 | 0xae: 'xor [hl]', 188 | 0xaf: 'xor a', 189 | 190 | 0xb0: 'or b', 191 | 0xb1: 'or c', 192 | 0xb2: 'or d', 193 | 0xb3: 'or e', 194 | 0xb4: 'or h', 195 | 0xb5: 'or l', 196 | 0xb6: 'or [hl]', 197 | 0xb7: 'or a', 198 | 0xb8: 'cp b', 199 | 0xb9: 'cp c', 200 | 0xba: 'cp d', 201 | 0xbb: 'cp e', 202 | 0xbc: 'cp h', 203 | 0xbd: 'cp l', 204 | 0xbe: 'cp [hl]', 205 | 0xbf: 'cp a', 206 | 207 | 0xc0: 'ret nz', 208 | 0xc1: 'pop bc', 209 | 0xc2: 'jp nz,a16', 210 | 0xc3: 'jp a16', 211 | 0xc4: 'call nz,a16', 212 | 0xc5: 'push bc', 213 | 0xc6: 'add d8', 214 | 0xc7: 'rst $00', 215 | 0xc8: 'ret z', 216 | 0xc9: 'ret', 217 | 0xca: 'jp z,a16', 218 | 0xcb: 'CBPREFIX', 219 | 0xcc: 'call z,a16', 220 | 0xcd: 'call a16', 221 | 0xce: 'adc d8', 222 | 0xcf: 'rst $08', 223 | 224 | 0xd0: 'ret nc', 225 | 0xd1: 'pop de', 226 | 0xd2: 'jp nc,a16', 227 | 0xd3: 'db $d3', 228 | 0xd4: 'call nc,a16', 229 | 0xd5: 'push de', 230 | 0xd6: 'sub d8', 231 | 0xd7: 'rst $10', 232 | 0xd8: 'ret c', 233 | 0xd9: 'reti', 234 | 0xda: 'jp c,a16', 235 | 0xdb: 'db $db', 236 | 0xdc: 'call c,a16', 237 | 0xdd: 'db $dd', 238 | 0xde: 'sbc d8', 239 | 0xdf: 'rst $18', 240 | 241 | 0xe0: 'ldh [a8],a', 242 | 0xe1: 'pop hl', 243 | 0xe2: 'ld [c],a', 244 | 0xe3: 'db $e3', 245 | 0xe4: 'db $e4', 246 | 0xe5: 'push hl', 247 | 0xe6: 'and d8', 248 | 0xe7: 'rst $20', 249 | 0xe8: 'add sp,r8', 250 | 0xe9: 'jp hl', 251 | 0xea: 'ld [a16],a', 252 | 0xeb: 'db $eb', 253 | 0xec: 'db $ec', 254 | 0xed: 'db $ed', 255 | 0xee: 'xor d8', 256 | 0xef: 'rst $28', 257 | 258 | 0xf0: 'ldh a,[a8]', 259 | 0xf1: 'pop af', 260 | 0xf2: 'ld a,[c]', 261 | 0xf3: 'di', 262 | 0xf4: 'db $f4', 263 | 0xf5: 'push af', 264 | 0xf6: 'or d8', 265 | 0xf7: 'rst $30', 266 | 0xf8: 'ld hl,sp+r8', 267 | 0xf9: 'ld sp,hl', 268 | 0xfa: 'ld a,[a16]', 269 | 0xfb: 'ei', 270 | 0xfc: 'db $fc', 271 | 0xfd: 'db $fd', 272 | 0xfe: 'cp d8', 273 | 0xff: 'rst $38', 274 | 275 | } 276 | 277 | cb_instructions = { 278 | 279 | 0x00: 'rlc b', 280 | 0x01: 'rlc c', 281 | 0x02: 'rlc d', 282 | 0x03: 'rlc e', 283 | 0x04: 'rlc h', 284 | 0x05: 'rlc l', 285 | 0x06: 'rlc [hl]', 286 | 0x07: 'rlc a', 287 | 0x08: 'rrc b', 288 | 0x09: 'rrc c', 289 | 0x0a: 'rrc d', 290 | 0x0b: 'rrc e', 291 | 0x0c: 'rrc h', 292 | 0x0d: 'rrc l', 293 | 0x0e: 'rrc [hl]', 294 | 0x0f: 'rrc a', 295 | 296 | 0x10: 'rl b', 297 | 0x11: 'rl c', 298 | 0x12: 'rl d', 299 | 0x13: 'rl e', 300 | 0x14: 'rl h', 301 | 0x15: 'rl l', 302 | 0x16: 'rl [hl]', 303 | 0x17: 'rl a', 304 | 0x18: 'rr b', 305 | 0x19: 'rr c', 306 | 0x1a: 'rr d', 307 | 0x1b: 'rr e', 308 | 0x1c: 'rr h', 309 | 0x1d: 'rr l', 310 | 0x1e: 'rr [hl]', 311 | 0x1f: 'rr a', 312 | 313 | 0x20: 'sla b', 314 | 0x21: 'sla c', 315 | 0x22: 'sla d', 316 | 0x23: 'sla e', 317 | 0x24: 'sla h', 318 | 0x25: 'sla l', 319 | 0x26: 'sla [hl]', 320 | 0x27: 'sla a', 321 | 0x28: 'sra b', 322 | 0x29: 'sra c', 323 | 0x2a: 'sra d', 324 | 0x2b: 'sra e', 325 | 0x2c: 'sra h', 326 | 0x2d: 'sra l', 327 | 0x2e: 'sra [hl]', 328 | 0x2f: 'sra a', 329 | 330 | 0x30: 'swap b', 331 | 0x31: 'swap c', 332 | 0x32: 'swap d', 333 | 0x33: 'swap e', 334 | 0x34: 'swap h', 335 | 0x35: 'swap l', 336 | 0x36: 'swap [hl]', 337 | 0x37: 'swap a', 338 | 0x38: 'srl b', 339 | 0x39: 'srl c', 340 | 0x3a: 'srl d', 341 | 0x3b: 'srl e', 342 | 0x3c: 'srl h', 343 | 0x3d: 'srl l', 344 | 0x3e: 'srl [hl]', 345 | 0x3f: 'srl a', 346 | 347 | 0x40: 'bit 0,b', 348 | 0x41: 'bit 0,c', 349 | 0x42: 'bit 0,d', 350 | 0x43: 'bit 0,e', 351 | 0x44: 'bit 0,h', 352 | 0x45: 'bit 0,l', 353 | 0x46: 'bit 0,[hl]', 354 | 0x47: 'bit 0,a', 355 | 0x48: 'bit 1,b', 356 | 0x49: 'bit 1,c', 357 | 0x4a: 'bit 1,d', 358 | 0x4b: 'bit 1,e', 359 | 0x4c: 'bit 1,h', 360 | 0x4d: 'bit 1,l', 361 | 0x4e: 'bit 1,[hl]', 362 | 0x4f: 'bit 1,a', 363 | 364 | 0x50: 'bit 2,b', 365 | 0x51: 'bit 2,c', 366 | 0x52: 'bit 2,d', 367 | 0x53: 'bit 2,e', 368 | 0x54: 'bit 2,h', 369 | 0x55: 'bit 2,l', 370 | 0x56: 'bit 2,[hl]', 371 | 0x57: 'bit 2,a', 372 | 0x58: 'bit 3,b', 373 | 0x59: 'bit 3,c', 374 | 0x5a: 'bit 3,d', 375 | 0x5b: 'bit 3,e', 376 | 0x5c: 'bit 3,h', 377 | 0x5d: 'bit 3,l', 378 | 0x5e: 'bit 3,[hl]', 379 | 0x5f: 'bit 3,a', 380 | 381 | 0x60: 'bit 4,b', 382 | 0x61: 'bit 4,c', 383 | 0x62: 'bit 4,d', 384 | 0x63: 'bit 4,e', 385 | 0x64: 'bit 4,h', 386 | 0x65: 'bit 4,l', 387 | 0x66: 'bit 4,[hl]', 388 | 0x67: 'bit 4,a', 389 | 0x68: 'bit 5,b', 390 | 0x69: 'bit 5,c', 391 | 0x6a: 'bit 5,d', 392 | 0x6b: 'bit 5,e', 393 | 0x6c: 'bit 5,h', 394 | 0x6d: 'bit 5,l', 395 | 0x6e: 'bit 5,[hl]', 396 | 0x6f: 'bit 5,a', 397 | 398 | 0x70: 'bit 6,b', 399 | 0x71: 'bit 6,c', 400 | 0x72: 'bit 6,d', 401 | 0x73: 'bit 6,e', 402 | 0x74: 'bit 6,h', 403 | 0x75: 'bit 6,l', 404 | 0x76: 'bit 6,[hl]', 405 | 0x77: 'bit 6,a', 406 | 0x78: 'bit 7,b', 407 | 0x79: 'bit 7,c', 408 | 0x7a: 'bit 7,d', 409 | 0x7b: 'bit 7,e', 410 | 0x7c: 'bit 7,h', 411 | 0x7d: 'bit 7,l', 412 | 0x7e: 'bit 7,[hl]', 413 | 0x7f: 'bit 7,a', 414 | 415 | 0x80: 'res 0,b', 416 | 0x81: 'res 0,c', 417 | 0x82: 'res 0,d', 418 | 0x83: 'res 0,e', 419 | 0x84: 'res 0,h', 420 | 0x85: 'res 0,l', 421 | 0x86: 'res 0,[hl]', 422 | 0x87: 'res 0,a', 423 | 0x88: 'res 1,b', 424 | 0x89: 'res 1,c', 425 | 0x8a: 'res 1,d', 426 | 0x8b: 'res 1,e', 427 | 0x8c: 'res 1,h', 428 | 0x8d: 'res 1,l', 429 | 0x8e: 'res 1,[hl]', 430 | 0x8f: 'res 1,a', 431 | 432 | 0x90: 'res 2,b', 433 | 0x91: 'res 2,c', 434 | 0x92: 'res 2,d', 435 | 0x93: 'res 2,e', 436 | 0x94: 'res 2,h', 437 | 0x95: 'res 2,l', 438 | 0x96: 'res 2,[hl]', 439 | 0x97: 'res 2,a', 440 | 0x98: 'res 3,b', 441 | 0x99: 'res 3,c', 442 | 0x9a: 'res 3,d', 443 | 0x9b: 'res 3,e', 444 | 0x9c: 'res 3,h', 445 | 0x9d: 'res 3,l', 446 | 0x9e: 'res 3,[hl]', 447 | 0x9f: 'res 3,a', 448 | 449 | 0xa0: 'res 4,b', 450 | 0xa1: 'res 4,c', 451 | 0xa2: 'res 4,d', 452 | 0xa3: 'res 4,e', 453 | 0xa4: 'res 4,h', 454 | 0xa5: 'res 4,l', 455 | 0xa6: 'res 4,[hl]', 456 | 0xa7: 'res 4,a', 457 | 0xa8: 'res 5,b', 458 | 0xa9: 'res 5,c', 459 | 0xaa: 'res 5,d', 460 | 0xab: 'res 5,e', 461 | 0xac: 'res 5,h', 462 | 0xad: 'res 5,l', 463 | 0xae: 'res 5,[hl]', 464 | 0xaf: 'res 5,a', 465 | 466 | 0xb0: 'res 6,b', 467 | 0xb1: 'res 6,c', 468 | 0xb2: 'res 6,d', 469 | 0xb3: 'res 6,e', 470 | 0xb4: 'res 6,h', 471 | 0xb5: 'res 6,l', 472 | 0xb6: 'res 6,[hl]', 473 | 0xb7: 'res 6,a', 474 | 0xb8: 'res 7,b', 475 | 0xb9: 'res 7,c', 476 | 0xba: 'res 7,d', 477 | 0xbb: 'res 7,e', 478 | 0xbc: 'res 7,h', 479 | 0xbd: 'res 7,l', 480 | 0xbe: 'res 7,[hl]', 481 | 0xbf: 'res 7,a', 482 | 483 | 484 | 0xc0: 'set 0,b', 485 | 0xc1: 'set 0,c', 486 | 0xc2: 'set 0,d', 487 | 0xc3: 'set 0,e', 488 | 0xc4: 'set 0,h', 489 | 0xc5: 'set 0,l', 490 | 0xc6: 'set 0,[hl]', 491 | 0xc7: 'set 0,a', 492 | 0xc8: 'set 1,b', 493 | 0xc9: 'set 1,c', 494 | 0xca: 'set 1,d', 495 | 0xcb: 'set 1,e', 496 | 0xcc: 'set 1,h', 497 | 0xcd: 'set 1,l', 498 | 0xce: 'set 1,[hl]', 499 | 0xcf: 'set 1,a', 500 | 501 | 0xd0: 'set 2,b', 502 | 0xd1: 'set 2,c', 503 | 0xd2: 'set 2,d', 504 | 0xd3: 'set 2,e', 505 | 0xd4: 'set 2,h', 506 | 0xd5: 'set 2,l', 507 | 0xd6: 'set 2,[hl]', 508 | 0xd7: 'set 2,a', 509 | 0xd8: 'set 3,b', 510 | 0xd9: 'set 3,c', 511 | 0xda: 'set 3,d', 512 | 0xdb: 'set 3,e', 513 | 0xdc: 'set 3,h', 514 | 0xdd: 'set 3,l', 515 | 0xde: 'set 3,[hl]', 516 | 0xdf: 'set 3,a', 517 | 518 | 0xe0: 'set 4,b', 519 | 0xe1: 'set 4,c', 520 | 0xe2: 'set 4,d', 521 | 0xe3: 'set 4,e', 522 | 0xe4: 'set 4,h', 523 | 0xe5: 'set 4,l', 524 | 0xe6: 'set 4,[hl]', 525 | 0xe7: 'set 4,a', 526 | 0xe8: 'set 5,b', 527 | 0xe9: 'set 5,c', 528 | 0xea: 'set 5,d', 529 | 0xeb: 'set 5,e', 530 | 0xec: 'set 5,h', 531 | 0xed: 'set 5,l', 532 | 0xee: 'set 5,[hl]', 533 | 0xef: 'set 5,a', 534 | 535 | 0xf0: 'set 6,b', 536 | 0xf1: 'set 6,c', 537 | 0xf2: 'set 6,d', 538 | 0xf3: 'set 6,e', 539 | 0xf4: 'set 6,h', 540 | 0xf5: 'set 6,l', 541 | 0xf6: 'set 6,[hl]', 542 | 0xf7: 'set 6,a', 543 | 0xf8: 'set 7,b', 544 | 0xf9: 'set 7,c', 545 | 0xfa: 'set 7,d', 546 | 0xfb: 'set 7,e', 547 | 0xfc: 'set 7,h', 548 | 0xfd: 'set 7,l', 549 | 0xfe: 'set 7,[hl]', 550 | 0xff: 'set 7,a' 551 | } 552 | 553 | instruction_variants = { 554 | 'hli': { 555 | 'hl+': { 556 | 0x22: 'ld [hl+],a', 557 | 0x2a: 'ld a,[hl+]', 558 | 0x32: 'ld [hl-],a', 559 | 0x3a: 'ld a,[hl-]' 560 | }, 561 | 'hli': { 562 | 0x22: 'ld [hli],a', 563 | 0x2a: 'ld a,[hli]', 564 | 0x32: 'ld [hld],a', 565 | 0x3a: 'ld a,[hld]' 566 | }, 567 | 'ldi': { 568 | 0x22: 'ldi [hl],a', 569 | 0x2a: 'ldi a,[hl]', 570 | 0x32: 'ldd [hl],a', 571 | 0x3a: 'ldd a,[hl]' 572 | } 573 | }, 574 | 'ldh_a8': { 575 | 'ldh_a8': { 576 | 0xe0: 'ldh [a8],a', 577 | 0xf0: 'ldh a,[a8]' 578 | }, 579 | 'ldh_ffa8': { 580 | 0xe0: 'ldh [$ffa8],a', 581 | 0xf0: 'ldh a,[$ffa8]' 582 | }, 583 | 'ld_ff00_a8': { 584 | 0xe0: 'ld [$ff00+a8],a', 585 | 0xf0: 'ld a,[$ff00+a8]' 586 | } 587 | }, 588 | 'ld_c': { 589 | 'ld_c': { 590 | 0xe2: 'ld [c],a', 591 | 0xf2: 'ld a,[c]' 592 | }, 593 | 'ldh_c': { 594 | 0xe2: 'ldh [c],a', 595 | 0xf2: 'ldh a,[c]' 596 | }, 597 | 'ld_ff00_c': { 598 | 0xe2: 'ld [$ff00+c],a', 599 | 0xf2: 'ld a,[$ff00+c]' 600 | } 601 | } 602 | } 603 | -------------------------------------------------------------------------------- /shim.sym: -------------------------------------------------------------------------------- 1 | 00:13f0 lcd_function_1 2 | 00:142e lcd_function_2 3 | 00:144b lcd_function_3 4 | 00:1466 lcd_function_4 5 | 00:1481 lcd_function_5 6 | 00:1496 lcd_function_6 7 | 00:1545 lcd_function_7 8 | 00:1719 lcd_function_8 9 | 00:173c lcd_function_9 10 | 00:162f lcd_function_a 11 | 00:1776 lcd_function_b 12 | 13 | 00:0ecf function_00_0ecf 14 | 00:0f20 function_00_0f20 15 | 00:103c function_00_103c 16 | 00:1094 function_00_1094 17 | 00:10fb function_00_10fb 18 | 00:114e function_00_114e 19 | 00:11f1 function_00_11f1 20 | 00:17fb function_00_17fb 21 | 00:1caa function_00_1caa 22 | 00:1cfa function_00_1cfa 23 | 00:1d59 function_00_1d59 24 | 00:1de7 function_00_1de7 25 | 00:208c function_00_208c 26 | 00:2312 function_00_2312 27 | 00:26c1 function_00_26c1 28 | 29 | 02:4147 function_02_4147 30 | 02:4f6d function_02_4f6d 31 | 02:5560 function_02_5560 32 | 02:56c0 function_02_56c0 33 | 02:5790 function_02_5790 34 | 02:57b9 wait_press_a_blink 35 | 02:58fe function_02_58fe 36 | 02:5a82 function_02_5a82 37 | 02:5b67 function_02_5b67 38 | 02:5b77 function_02_5b77 39 | 02:5b98 function_02_5b98 40 | 41 | 03:48cc data_00_48cc 42 | 43 | 04:43ec function_04_43ec 44 | 45 | 05:5f2f function_05_5f2f 46 | 05:7089 function_05_7089 47 | 48 | 06:4964 function_06_4964 49 | 50 | 08:42b8 function_08_42b8 51 | 52 | 09:5a50 function_09_5a50 53 | 54 | 19:4000 function_19_4000 55 | 19:40f0 function_19_40f0 56 | 19:4180 function_19_4180 57 | 58 | 22:47e2 function_22_47e2 59 | 22:61e8 function_22_61e8 60 | 61 | 27:4bf4 function_27_4bf4 62 | 63 | 29:4461 function_29_4461 64 | 29:4ef5 function_29_4ef5 65 | 29:5579 function_29_5579 66 | 29:5de4 function_29_5de4 67 | 29:5e90 function_29_5e90 68 | 29:7421 function_29_7421 69 | 70 | 3c:4377 function_3c_4377 71 | 72 | 7b:41e0 gfx_blank_char 73 | 74 | 00:a03e s_a03e 75 | 00:a040 s_a040 76 | 00:a041 s_a041 77 | 00:a042 s_a042 78 | 00:a043 s_a043 79 | 00:a04a s_a04a 80 | 00:a04b s_a04b 81 | 00:a054 s_a054 82 | 00:a055 s_a055 83 | 00:a056 s_a056 84 | 00:a057 s_a057 85 | 00:a058 s_a058 86 | 00:a059 s_a059 87 | 00:a05b s_a05b 88 | 00:a06c s_a06c 89 | 00:a06d s_a06d 90 | 00:a071 s_a071 91 | 00:a072 s_a072 92 | 00:a073 s_a073 93 | 00:a07d s_a07d 94 | 95 | 00:c315 w_bank_rom ; db 96 | 00:c317 w_farcall_target ; dw 97 | 00:c317 w_farcall_target_low 98 | 00:c318 w_farcall_target_high 99 | 00:c319 w_c319 ; dw 100 | 00:c31b w_c31b ; db 101 | 00:c31c w_c31c ; dw 102 | 00:c31e w_bank_temp ; db 103 | 104 | 00:c100 w_c100 105 | 00:c300 w_c300 106 | 00:c301 w_c301 107 | 00:c302 w_c302 108 | 00:c314 w_c314 109 | 00:c316 w_c316 110 | 00:c320 w_c320 111 | 00:c321 w_c321 112 | 00:c322 w_c322 113 | 00:c325 w_c325 114 | 00:c326 w_c326 115 | 00:c327 w_c327 116 | 00:c329 w_c329 117 | 00:c32a w_c32a 118 | 00:c32c w_c32c 119 | 00:c32d w_c32d 120 | 00:c330 w_c330 121 | 00:c333 w_c333 122 | 123 | 00:c336 w_LCDC 124 | 00:c337 w_BGP 125 | 00:c338 w_OBP0 126 | 00:c339 w_OBP1 127 | 00:c33a w_SCX 128 | 00:c33b w_SCY 129 | 00:c33c w_WX 130 | 00:c33d w_WY 131 | 00:c33e w_LYC 132 | 00:c33f w_STAT 133 | 134 | 00:c340 w_c340 135 | 00:c341 w_vblank_ran ; db 136 | 00:c342 w_c342 137 | 00:c343 w_c343 138 | 00:c344 w_c344 139 | 00:c345 w_c345 140 | 00:c357 w_c357 141 | 00:c358 w_c358 142 | 00:c359 w_c359 143 | 00:c35a w_c35a 144 | 00:c35b w_vwf_char_start_x ; db 145 | 00:c35c w_vwf_char_start_y ; db 146 | 00:c35d w_vwf_char_end_x ; db 147 | 00:c35e w_vwf_char_end_y ; db 148 | 00:c35f w_vwf_char_addr ; dw 149 | 00:c361 w_vwf_char_bank ; db 150 | 00:c362 w_c362 151 | 00:c363 w_c363 152 | 00:c364 w_c364 153 | 00:c365 w_c365 154 | 00:c366 w_c366 155 | 00:c367 w_c367 156 | 00:c368 w_c368 157 | 00:c369 w_c369 158 | 00:c36a w_c36a 159 | 00:c36b w_c36b 160 | 00:c36c w_c36c 161 | 00:c36d w_vwf_char_buffer ; ds ?? 162 | 00:cd6d w_cd6d 163 | 00:cd6e w_cd6e 164 | 00:cd73 w_cd73 165 | 00:cdb0 w_cdb0 166 | 00:cdaf w_cdaf 167 | 00:cdac w_cdac 168 | 00:cdad w_cdad 169 | 00:cdb1 w_cdb1 ; dw 170 | 00:cdb3 w_cdb3 171 | 00:cdcc w_cdcc 172 | 00:cdce w_cdce 173 | 00:cdd0 w_cdd0 174 | 00:cdd1 w_cdd1 175 | 00:cdd2 w_cdd2_jumptable_index ; db 176 | 00:cdd6 w_cdd6 177 | 00:cdd7 w_cdd7 178 | 00:cdea w_text_pos_x ; db 179 | 00:cdec w_text_pos_y ; db 180 | 00:cdf8 w_textbox_delay_timer ; db 181 | 00:cdfc w_cdfc 182 | 00:cdfd w_cdfd ; ds ?? 183 | 00:cde0 w_cde0 184 | 00:ce00 w_ce00 185 | 186 | 00:ff80 h_oam_dma 187 | 00:fffe h_stack_bottom 188 | 189 | 01:d521 w_d521 190 | 01:d52e w_d52e 191 | 01:d535 w_d535 192 | 01:d536 w_d536 193 | 01:d537 w_d537 194 | 01:d538 w_d538 ; dw 195 | 01:d548 w_textbox_cur_string ; dw 196 | 01:d546 w_textbox_cur_x ; db 197 | 01:d547 w_textbox_cur_y ; db 198 | 01:d54a w_d54a 199 | 01:d54b w_d54b 200 | 01:d54c w_d54c ; dw 201 | 01:d550 w_d550 202 | 01:d55e w_textbox_x ; db 203 | 01:d55f w_textbox_y ; db 204 | 01:d560 w_textbox_width ; db 205 | 01:d561 w_textbox_height ; db 206 | 207 | 01:d568 w_d568 208 | 01:d60f w_d60f 209 | 01:d61b w_d61b 210 | 01:d625 w_puzzle_index ; dw 211 | 01:d628 w_d628 ; ds 3 212 | 01:d62d w_d62d 213 | 01:d630 w_d630 214 | 01:d641 w_tutorial_scene ; db 215 | 01:d642 w_d642 216 | 01:d647 w_d647 217 | 01:d6b5 w_d6b5 218 | 01:d6c8 w_d6c8 219 | 01:d6c9 w_d6c9 220 | 01:d6ca w_d6ca 221 | 01:d6d4 w_town_map_level ; db 222 | 01:d6e2 w_town_map_x ; db 223 | 01:d6e3 w_town_map_y ; db 224 | 01:db27 w_easy_picross_level ; db 225 | 01:db35 w_easy_picross_x ; db 226 | 01:db36 w_easy_picross_y ; db 227 | 01:db7a w_safari_map_level ; db 228 | 01:db88 w_safari_map_x ; db 229 | 01:db89 w_safari_map_y ; db 230 | 01:dbe4 w_dbe4 ; db 231 | 01:dbe6 w_dbe6 232 | 01:dbe8 w_dbe8 233 | 01:dbea w_dbea 234 | 01:dbec w_dbec 235 | 01:dbee w_dbee ; dw 236 | 01:dbf0 w_dbf0 ; db/dw 237 | 01:df3f w_df3f ; ds 3 238 | 01:df47 w_df47 239 | 01:df62 w_df62 240 | 241 | 01:dfff w_stack_bottom 242 | -------------------------------------------------------------------------------- /source/bank_01.asm: -------------------------------------------------------------------------------- 1 | INCLUDE "code_macros.inc" 2 | INCLUDE "const_macros.inc" 3 | INCLUDE "gfx_macros.inc" 4 | INCLUDE "level_constants.inc" 5 | INCLUDE "puzzle_constants.inc" 6 | 7 | SECTION "text_2_char_draw", ROMX[$5e3c], BANK[$01] 8 | 9 | puzzle_name_textbox_clear: 10 | xor a 11 | ld [w_dbe4], a 12 | 13 | .loop 14 | ld16 w_vwf_char_addr, gfx_blank_char 15 | ld a, BANK(gfx_blank_char) 16 | ld [w_vwf_char_bank], a 17 | ld a, [w_dbe4] 18 | add a 19 | add a 20 | add a 21 | add 40 22 | ld [w_vwf_char_start_x], a 23 | add 7 24 | ld [w_vwf_char_end_x], a 25 | ld a, 15 26 | ld [w_vwf_char_start_y], a 27 | ld a, 26 28 | ld [w_vwf_char_end_y], a 29 | call vwf_char_draw 30 | 31 | ld a, [w_dbe4] 32 | inc a 33 | ld [w_dbe4], a 34 | cp 11 35 | jp nz, .loop 36 | ret 37 | 38 | SECTION "calc_town_map_puzzle_index", ROMX[$61FA], BANK[$01] 39 | calc_town_map_puzzle_index:: 40 | ld a, [w_town_map_level] 41 | cp LEVEL_MEW 42 | jr nz, .not_mew 43 | ld a, PUZZLE_MEW 44 | jp farcall_ret 45 | 46 | .not_mew 47 | ld a, [w_town_map_y] 48 | ld c, a 49 | add a 50 | add a 51 | add c 52 | ld c, a 53 | ld a, [w_town_map_x] 54 | add c 55 | ld c, a 56 | ld a, [w_town_map_level] 57 | add a 58 | add a 59 | add a 60 | add a 61 | add c 62 | ld c, a 63 | ld a, [w_town_map_level] 64 | xor $ff 65 | inc a 66 | add c 67 | add TOWN_MAP_PUZZLES 68 | jp farcall_ret 69 | 70 | SECTION "function_01_6306", ROMX[$6306], BANK[$01] 71 | function_01_6306:: 72 | ld c, 16 73 | .loop 74 | push bc 75 | push hl 76 | push de 77 | push af 78 | ld bc, 8 tiles 79 | call vram_copy 80 | farcall function_05_7089 81 | pop af 82 | pop de 83 | pop hl 84 | push hl 85 | ld hl, 8 tiles 86 | add hl, de 87 | ld e, l 88 | ld d, h 89 | pop hl 90 | ld bc, 8 tiles 91 | add hl, bc 92 | pop bc 93 | dec c 94 | jp nz, .loop 95 | ret 96 | -------------------------------------------------------------------------------- /source/bank_02.asm: -------------------------------------------------------------------------------- 1 | INCLUDE "charmap.inc" 2 | INCLUDE "code_macros.inc" 3 | 4 | SECTION "text_char", ROMX[$4bf7], BANK[$02] 5 | far_textbox_print_char:: 6 | farcall textbox_print_char 7 | jp farcall_ret 8 | 9 | ; Returns: 10 | ; flags - z if reached end of string 11 | textbox_print_char:: 12 | ld a, [w_c342] 13 | bit 0, a 14 | jp nz, farcall_ret 15 | 16 | ld a, [w_textbox_cur_string + 0] 17 | ld l, a 18 | ld a, [w_textbox_cur_string + 1] 19 | ld h, a 20 | ld a, [w_textbox_cur_x] 21 | ld b, a 22 | ld a, [w_textbox_cur_y] 23 | ld c, a 24 | ld a, [hl+] 25 | ld e, a 26 | ld a, [hl+] 27 | 28 | ; Check if we've reached the end of the string 29 | ld d, a 30 | and e 31 | cp TX_END 32 | jp z, farcall_ret 33 | push hl 34 | 35 | ; Check for line feed 36 | ld a, e 37 | cp LOW(TX_LF) 38 | jr nz, .not_line_feed 39 | ld a, d 40 | cp HIGH(TX_LF) 41 | jr z, .line_feed 42 | .not_line_feed 43 | 44 | ; Draw ピ one pixel higher 45 | ld a, e 46 | cp "ピ" 47 | jr nz, .not_pi 48 | ld a, d 49 | and a 50 | jr nz, .not_pi 51 | dec c 52 | .not_pi 53 | 54 | ; Draw character 55 | farcall textbox_draw_char 56 | 57 | ; Leave two pixels space between each character 58 | ld hl, w_textbox_cur_x 59 | add 2 60 | add [hl] 61 | ld [hl], a 62 | jr .done 63 | 64 | .line_feed 65 | ; Advance to the next line 66 | ld a, [w_textbox_x] 67 | ld [w_textbox_cur_x], a 68 | ld a, [w_textbox_cur_y] 69 | add 11 70 | ld [w_textbox_cur_y], a 71 | 72 | .done 73 | ; Back up string pointer 74 | pop hl 75 | ld16 w_textbox_cur_string, hl 76 | 77 | ; Check if the next character is a terminator 78 | ld a, [hl+] 79 | and [hl] 80 | cp TX_END 81 | jp farcall_ret 82 | 83 | ; Returns: 84 | ; a - character width 85 | ; Parameters: 86 | ; de - character to print 87 | ; b - x position 88 | ; c - y position 89 | textbox_draw_char:: 90 | push de 91 | 92 | ; Get char address 93 | sla e 94 | rl d 95 | ld hl, text_chars_offsets 96 | add hl, de 97 | ld e, [hl] 98 | inc hl 99 | ld d, [hl] 100 | ld hl, gfx_text_chars_dark 101 | add hl, de 102 | ld16 w_vwf_char_addr, hl 103 | ld a, BANK(gfx_text_chars_dark) 104 | ld [w_vwf_char_bank], a 105 | 106 | ld a, b 107 | ld [w_vwf_char_start_x], a 108 | 109 | ; Get character width 110 | pop de 111 | ld hl, text_chars_widths 112 | add hl, de 113 | ld a, [hl] 114 | and a 115 | jp z, farcall_ret 116 | 117 | ; Check we aren't drawing outside the textbox 118 | push af 119 | add b 120 | ld hl, w_textbox_width 121 | cp [hl] 122 | jr c, .inside_width 123 | pop af 124 | jp farcall_ret 125 | .inside_width 126 | ld [w_vwf_char_end_x], a 127 | 128 | ld a, c 129 | ld [w_vwf_char_start_y], a 130 | add 9 131 | ld hl, w_textbox_height 132 | cp [hl] 133 | jr c, .inside_height 134 | pop af 135 | jp farcall_ret 136 | .inside_height 137 | ld [w_vwf_char_end_y], a 138 | 139 | call vwf_char_draw 140 | pop af 141 | jp farcall_ret 142 | 143 | SECTION "textbox_delay", ROMX[$5b7a], BANK[$02] 144 | textbox_delay:: 145 | ld a, [w_c343] 146 | bit 4, a 147 | jr nz, .no_blink 148 | ld a, [w_textbox_cur_x] 149 | sub 3 150 | ld b, a 151 | ld a, [w_textbox_cur_y] 152 | inc a 153 | ld c, a 154 | ld a, $e9 155 | call function_00_208c 156 | .no_blink 157 | ld hl, w_textbox_delay_timer 158 | dec [hl] 159 | jp farcall_ret 160 | -------------------------------------------------------------------------------- /source/bank_20.asm: -------------------------------------------------------------------------------- 1 | INCLUDE "code_macros.inc" 2 | INCLUDE "const_macros.inc" 3 | INCLUDE "level_constants.inc" 4 | INCLUDE "puzzle_constants.inc" 5 | 6 | SECTION "calc_safari_map_puzzle_index", ROMX[$46B5], BANK[$20] 7 | calc_safari_map_puzzle_index:: 8 | ld a, [w_safari_map_level] 9 | cp LEVEL_JUNGLE_ZONE 10 | jp z, calc_safari_map_level_4_puzzle_index 11 | ld a, [w_safari_map_y] 12 | ld c, a 13 | add a 14 | add a 15 | add c 16 | ld c, a 17 | ld a, [w_safari_map_x] 18 | add c 19 | ld c, a 20 | ld a, [w_safari_map_level] 21 | add a 22 | add a 23 | add a 24 | add a 25 | add c 26 | ld c, a 27 | ld a, [w_safari_map_level] 28 | xor $ff 29 | inc a 30 | add c 31 | add SAFARI_ZONE_PUZZLES 32 | jp farcall_ret 33 | 34 | SECTION "calc_safari_map_level_4_puzzle_index", ROMX[$5258], BANK[$20] 35 | calc_safari_map_level_4_puzzle_index:: 36 | ld a, [w_safari_map_y] 37 | add a 38 | add a 39 | ld c, a 40 | ld a, [w_safari_map_x] 41 | add c 42 | ld l, a 43 | ld h, 0 44 | ld de, .level_4_puzzles 45 | add hl, de 46 | ld a, [hl] 47 | jp farcall_ret 48 | 49 | .level_4_puzzles: 50 | db PUZZLE_THREE_POKEMON, PUZZLE_SAFARI_GLOOM, 0, 0 51 | db PUZZLE_TEAM_ROCKET, PUZZLE_PIKACHU_AND_TOGEPI, 0, 0 52 | db PUZZLE_HIDDEN_VILLAGE, PUZZLE_SNOWMAN, 0, 0 53 | db 0, 0, 0, 0 54 | -------------------------------------------------------------------------------- /source/bank_28.asm: -------------------------------------------------------------------------------- 1 | INCLUDE "hardware.inc" 2 | INCLUDE "code_macros.inc" 3 | 4 | SECTION "function_28_426a", ROMX[$426a], BANK[$28] 5 | 6 | function_28_426a:: 7 | ld a, $01 8 | ld [w_d6b5], a 9 | ld a, BANK(compressed_gfx_copyright) 10 | ld hl, compressed_gfx_copyright 11 | ld de, _VRAM8800 12 | ld bc, $b6 13 | call decompress 14 | ld a, BANK(compressed_tilemap_copyright) 15 | ld hl, compressed_tilemap_copyright 16 | ld de, _SCRN0 17 | ld bc, $52 18 | call decompress 19 | call function_00_1085 20 | ; TBC 21 | -------------------------------------------------------------------------------- /source/bank_3c.asm: -------------------------------------------------------------------------------- 1 | SECTION "textbox_border_load", ROMX[$4d16], BANK[$3c] 2 | textbox_border_load:: 3 | ld a, BANK(gfx_textbox_border_dark) 4 | ld hl, gfx_textbox_border_dark 5 | ld de, $8900 6 | ld bc, gfx_textbox_border_dark.end - gfx_textbox_border_dark 7 | call vram_copy 8 | jp farcall_ret 9 | 10 | SECTION "calc_easy_picross_puzzle_index", ROMX[$649d], BANK[$3c] 11 | calc_easy_picross_puzzle_index:: 12 | ld a, [w_easy_picross_y] 13 | ld c, a 14 | add a 15 | add a 16 | add c 17 | ld c, a 18 | ld a, [w_easy_picross_x] 19 | add c 20 | jp farcall_ret 21 | -------------------------------------------------------------------------------- /source/bank_56.asm: -------------------------------------------------------------------------------- 1 | SECTION "gfx_how_to_play", ROMX[$4000], BANK[$56] 2 | gfx_how_to_play:: 3 | INCBIN "gfx/how_to_play/how_to_play.2bpp" 4 | .end:: 5 | 6 | SECTION "gfx_how_to_play_sgb", ROMX[$7800], BANK[$56] 7 | gfx_how_to_play_sgb:: 8 | INCBIN "gfx/how_to_play/oak_mouth_sgb.2bpp" 9 | INCBIN "gfx/how_to_play/how_to_play_sgb.2bpp" 10 | .end:: 11 | -------------------------------------------------------------------------------- /source/bank_57.asm: -------------------------------------------------------------------------------- 1 | SECTION "gfx_text_chars_light", ROMX[$4000], BANK[$57] 2 | gfx_text_chars_light:: 3 | INCBIN "gfx/fonts/text_chars_light.2bpp" 4 | .end:: 5 | 6 | SECTION "tilemap_how_to_play", ROMX[$7c00], BANK[$57] 7 | tilemap_how_to_play:: 8 | INCBIN "gfx/how_to_play/how_to_play.tilemap" 9 | .end:: 10 | -------------------------------------------------------------------------------- /source/bank_58.asm: -------------------------------------------------------------------------------- 1 | SECTION "gfx_puzzle_demo", ROMX[$4000], BANK[$58] 2 | gfx_puzzle_demo:: 3 | INCBIN "gfx/demo/puzzle_demo.2bpp" 4 | .end:: 5 | -------------------------------------------------------------------------------- /source/bank_5c.asm: -------------------------------------------------------------------------------- 1 | SECTION "compressed_tilemap_attrmap_pokedex_scroll", ROMX[$7c00], BANK[$5c] 2 | compressed_tilemap_attrmap_pokedex_scroll:: 3 | INCBIN "gfx/pokedex/pokedex_scroll.tilemap_attrmap.xor" 4 | .end:: 5 | -------------------------------------------------------------------------------- /source/bank_5e.asm: -------------------------------------------------------------------------------- 1 | SECTION "compressed_tilemap_attrmap_how_to_play_safari", ROMX[$7c00], BANK[$5e] 2 | compressed_tilemap_attrmap_how_to_play_safari:: 3 | INCBIN "gfx/how_to_play/safari.tilemap_attrmap.xor" 4 | .end:: 5 | -------------------------------------------------------------------------------- /source/bank_5f.asm: -------------------------------------------------------------------------------- 1 | SECTION "unused_gfx_picross_2", ROMX[$4000], BANK[$5f] 2 | unused_gfx_picross_2:: 3 | INCBIN "gfx/unused/mario_wario.2bpp" 4 | .end:: 5 | 6 | SECTION "unused_gfx_picross_2_finals", ROMX[$6c00], BANK[$5f] 7 | unused_gfx_picross_2_finals:: 8 | INCBIN "gfx/unused/marios_picross_final.2bpp" 9 | INCBIN "gfx/unused/warios_picross_final.2bpp" 10 | .end:: 11 | -------------------------------------------------------------------------------- /source/bank_63.asm: -------------------------------------------------------------------------------- 1 | SECTION "gfx_itemdex", ROMX[$4000], BANK[$63] 2 | gfx_itemdex:: 3 | INCBIN "gfx/itemdex/itemdex.2bpp" 4 | .end:: 5 | -------------------------------------------------------------------------------- /source/bank_64.asm: -------------------------------------------------------------------------------- 1 | SECTION "gfx_font_striped_dark", ROMX[$4d00], BANK[$64] 2 | gfx_font_striped_dark:: 3 | INCBIN "gfx/fonts/font_striped_dark.2bpp" 4 | .end:: 5 | 6 | SECTION "gfx_font_striped_light", ROMX[$6500], BANK[$64] 7 | gfx_font_striped_light:: 8 | INCBIN "gfx/fonts/font_striped_light.2bpp" 9 | .end:: 10 | 11 | SECTION "gfx_font_1", ROMX[$7000], BANK[$64] 12 | gfx_font_1:: 13 | INCBIN "gfx/fonts/font_1.2bpp" 14 | .end:: 15 | -------------------------------------------------------------------------------- /source/bank_65.asm: -------------------------------------------------------------------------------- 1 | SECTION "bank65", ROMX[$4000], BANK[$65] 2 | 3 | gfx_album_picture_frames:: 4 | INCBIN "gfx/safari_zone_album/picture_frames.2bpp" 5 | .end:: 6 | 7 | gfx_font_2:: 8 | INCBIN "gfx/fonts/font_2.2bpp" 9 | .end:: 10 | -------------------------------------------------------------------------------- /source/bank_66.asm: -------------------------------------------------------------------------------- 1 | SECTION "bank66", ROMX[$4000], BANK[$66] 2 | 3 | gfx_bgm_pikachu_1:: 4 | INCBIN "gfx/bgm/pikachu_blink.2bpp" 5 | INCBIN "gfx/bgm/pikachu_1.2bpp" 6 | .end:: 7 | 8 | gfx_bgm_pikachu_2:: 9 | INCBIN "gfx/bgm/no_blink.2bpp" 10 | INCBIN "gfx/bgm/pikachu_2.2bpp" 11 | .end:: 12 | 13 | gfx_bgm_pikachu_3:: 14 | INCBIN "gfx/bgm/no_blink.2bpp" 15 | INCBIN "gfx/bgm/pikachu_3.2bpp" 16 | .end:: 17 | 18 | gfx_bgm_pikachu_4:: 19 | INCBIN "gfx/bgm/no_blink.2bpp" 20 | INCBIN "gfx/bgm/pikachu_4.2bpp" 21 | .end:: 22 | 23 | gfx_bgm_bulbasaur_1:: 24 | INCBIN "gfx/bgm/bulbasaur_blink.2bpp" 25 | INCBIN "gfx/bgm/bulbasaur_1.2bpp" 26 | .end:: 27 | 28 | gfx_bgm_bulbasaur_2:: 29 | INCBIN "gfx/bgm/no_blink.2bpp" 30 | INCBIN "gfx/bgm/bulbasaur_2.2bpp" 31 | .end:: 32 | 33 | gfx_bgm_bulbasaur_3:: 34 | INCBIN "gfx/bgm/no_blink.2bpp" 35 | INCBIN "gfx/bgm/bulbasaur_3.2bpp" 36 | .end:: 37 | 38 | gfx_bgm_bulbasaur_4:: 39 | INCBIN "gfx/bgm/no_blink.2bpp" 40 | INCBIN "gfx/bgm/bulbasaur_4.2bpp" 41 | .end:: 42 | 43 | gfx_bgm_charmander_1:: 44 | INCBIN "gfx/bgm/charmander_blink.2bpp" 45 | INCBIN "gfx/bgm/charmander_1.2bpp" 46 | .end:: 47 | 48 | gfx_bgm_charmander_2:: 49 | INCBIN "gfx/bgm/no_blink.2bpp" 50 | INCBIN "gfx/bgm/charmander_2.2bpp" 51 | .end:: 52 | 53 | gfx_bgm_charmander_3:: 54 | INCBIN "gfx/bgm/no_blink.2bpp" 55 | INCBIN "gfx/bgm/charmander_3.2bpp" 56 | .end:: 57 | 58 | gfx_bgm_charmander_4:: 59 | INCBIN "gfx/bgm/no_blink.2bpp" 60 | INCBIN "gfx/bgm/charmander_4.2bpp" 61 | .end:: 62 | 63 | gfx_bgm_squirtle_1:: 64 | INCBIN "gfx/bgm/squirtle_blink.2bpp" 65 | INCBIN "gfx/bgm/squirtle_1.2bpp" 66 | .end:: 67 | 68 | gfx_bgm_squirtle_2:: 69 | INCBIN "gfx/bgm/no_blink.2bpp" 70 | INCBIN "gfx/bgm/squirtle_2.2bpp" 71 | .end:: 72 | 73 | gfx_bgm_squirtle_3:: 74 | INCBIN "gfx/bgm/no_blink.2bpp" 75 | INCBIN "gfx/bgm/squirtle_3.2bpp" 76 | .end:: 77 | 78 | gfx_bgm_squirtle_4:: 79 | INCBIN "gfx/bgm/no_blink.2bpp" 80 | INCBIN "gfx/bgm/squirtle_4.2bpp" 81 | .end:: 82 | 83 | gfx_bgm_clefairy_1:: 84 | INCBIN "gfx/bgm/clefairy_blink.2bpp" 85 | INCBIN "gfx/bgm/clefairy_1.2bpp" 86 | .end:: 87 | 88 | gfx_bgm_clefairy_2:: 89 | INCBIN "gfx/bgm/no_blink.2bpp" 90 | INCBIN "gfx/bgm/clefairy_2.2bpp" 91 | .end:: 92 | 93 | gfx_bgm_clefairy_3:: 94 | INCBIN "gfx/bgm/no_blink.2bpp" 95 | INCBIN "gfx/bgm/clefairy_3.2bpp" 96 | .end:: 97 | 98 | gfx_bgm_clefairy_4:: 99 | INCBIN "gfx/bgm/no_blink.2bpp" 100 | INCBIN "gfx/bgm/clefairy_4.2bpp" 101 | .end:: 102 | 103 | gfx_bgm_jigglypuff_1:: 104 | INCBIN "gfx/bgm/jigglypuff_blink.2bpp" 105 | INCBIN "gfx/bgm/jigglypuff_1.2bpp" 106 | .end:: 107 | 108 | gfx_bgm_jigglypuff_2:: 109 | INCBIN "gfx/bgm/no_blink.2bpp" 110 | INCBIN "gfx/bgm/jigglypuff_2.2bpp" 111 | .end:: 112 | 113 | gfx_bgm_jigglypuff_3:: 114 | INCBIN "gfx/bgm/no_blink.2bpp" 115 | INCBIN "gfx/bgm/jigglypuff_3.2bpp" 116 | .end:: 117 | 118 | gfx_bgm_jigglypuff_4:: 119 | INCBIN "gfx/bgm/no_blink.2bpp" 120 | INCBIN "gfx/bgm/jigglypuff_4.2bpp" 121 | .end:: 122 | 123 | SECTION "compressed_gfx_title_2", ROMX[$7ebf], BANK[$66] 124 | compressed_gfx_title_2:: 125 | INCBIN "gfx/title/title_2.2bpp.xor" 126 | .end:: 127 | -------------------------------------------------------------------------------- /source/bank_67.asm: -------------------------------------------------------------------------------- 1 | SECTION "compressed_gfx_title_1", ROMX[$7000], BANK[$67] 2 | compressed_gfx_title_1:: 3 | INCBIN "gfx/title/title_1.2bpp.xor" 4 | .end:: 5 | -------------------------------------------------------------------------------- /source/bank_68.asm: -------------------------------------------------------------------------------- 1 | SECTION "bank68", ROMX[$4000], BANK[$68] 2 | 3 | gfx_bgm_pikachu_1_sgb:: 4 | INCBIN "gfx/bgm/pikachu_blink.2bpp" 5 | INCBIN "gfx/bgm/pikachu_1_sgb.2bpp" 6 | .end:: 7 | 8 | gfx_bgm_pikachu_2_sgb:: 9 | INCBIN "gfx/bgm/no_blink.2bpp" 10 | INCBIN "gfx/bgm/pikachu_2_sgb.2bpp" 11 | .end:: 12 | 13 | gfx_bgm_pikachu_3_sgb:: 14 | INCBIN "gfx/bgm/no_blink.2bpp" 15 | INCBIN "gfx/bgm/pikachu_3_sgb.2bpp" 16 | .end:: 17 | 18 | gfx_bgm_pikachu_4_sgb:: 19 | INCBIN "gfx/bgm/no_blink.2bpp" 20 | INCBIN "gfx/bgm/pikachu_4_sgb.2bpp" 21 | .end:: 22 | 23 | gfx_bgm_bulbasaur_1_sgb:: 24 | INCBIN "gfx/bgm/bulbasaur_blink.2bpp" 25 | INCBIN "gfx/bgm/bulbasaur_1_sgb.2bpp" 26 | .end:: 27 | 28 | gfx_bgm_bulbasaur_2_sgb:: 29 | INCBIN "gfx/bgm/no_blink.2bpp" 30 | INCBIN "gfx/bgm/bulbasaur_2_sgb.2bpp" 31 | .end:: 32 | 33 | gfx_bgm_bulbasaur_3_sgb:: 34 | INCBIN "gfx/bgm/no_blink.2bpp" 35 | INCBIN "gfx/bgm/bulbasaur_3_sgb.2bpp" 36 | .end:: 37 | 38 | gfx_bgm_bulbasaur_4_sgb:: 39 | INCBIN "gfx/bgm/no_blink.2bpp" 40 | INCBIN "gfx/bgm/bulbasaur_4_sgb.2bpp" 41 | .end:: 42 | 43 | gfx_bgm_charmander_1_sgb:: 44 | INCBIN "gfx/bgm/charmander_blink.2bpp" 45 | INCBIN "gfx/bgm/charmander_1_sgb.2bpp" 46 | .end:: 47 | 48 | gfx_bgm_charmander_2_sgb:: 49 | INCBIN "gfx/bgm/no_blink.2bpp" 50 | INCBIN "gfx/bgm/charmander_2_sgb.2bpp" 51 | .end:: 52 | 53 | gfx_bgm_charmander_3_sgb:: 54 | INCBIN "gfx/bgm/no_blink.2bpp" 55 | INCBIN "gfx/bgm/charmander_3_sgb.2bpp" 56 | .end:: 57 | 58 | gfx_bgm_charmander_4_sgb:: 59 | INCBIN "gfx/bgm/no_blink.2bpp" 60 | INCBIN "gfx/bgm/charmander_4_sgb.2bpp" 61 | .end:: 62 | 63 | gfx_bgm_squirtle_1_sgb:: 64 | INCBIN "gfx/bgm/squirtle_blink.2bpp" 65 | INCBIN "gfx/bgm/squirtle_1_sgb.2bpp" 66 | .end:: 67 | 68 | gfx_bgm_squirtle_2_sgb:: 69 | INCBIN "gfx/bgm/no_blink.2bpp" 70 | INCBIN "gfx/bgm/squirtle_2_sgb.2bpp" 71 | .end:: 72 | 73 | gfx_bgm_squirtle_3_sgb:: 74 | INCBIN "gfx/bgm/no_blink.2bpp" 75 | INCBIN "gfx/bgm/squirtle_3_sgb.2bpp" 76 | .end:: 77 | 78 | gfx_bgm_squirtle_4_sgb:: 79 | INCBIN "gfx/bgm/no_blink.2bpp" 80 | INCBIN "gfx/bgm/squirtle_4_sgb.2bpp" 81 | .end:: 82 | 83 | gfx_bgm_clefairy_1_sgb:: 84 | INCBIN "gfx/bgm/clefairy_blink.2bpp" 85 | INCBIN "gfx/bgm/clefairy_1_sgb.2bpp" 86 | .end:: 87 | 88 | gfx_bgm_clefairy_2_sgb:: 89 | INCBIN "gfx/bgm/no_blink.2bpp" 90 | INCBIN "gfx/bgm/clefairy_2_sgb.2bpp" 91 | .end:: 92 | 93 | gfx_bgm_clefairy_3_sgb:: 94 | INCBIN "gfx/bgm/no_blink.2bpp" 95 | INCBIN "gfx/bgm/clefairy_3_sgb.2bpp" 96 | .end:: 97 | 98 | gfx_bgm_clefairy_4_sgb:: 99 | INCBIN "gfx/bgm/no_blink.2bpp" 100 | INCBIN "gfx/bgm/clefairy_4_sgb.2bpp" 101 | .end:: 102 | 103 | gfx_bgm_jigglypuff_1_sgb:: 104 | INCBIN "gfx/bgm/jigglypuff_blink.2bpp" 105 | INCBIN "gfx/bgm/jigglypuff_1_sgb.2bpp" 106 | .end:: 107 | 108 | gfx_bgm_jigglypuff_2_sgb:: 109 | INCBIN "gfx/bgm/no_blink.2bpp" 110 | INCBIN "gfx/bgm/jigglypuff_2_sgb.2bpp" 111 | .end:: 112 | 113 | gfx_bgm_jigglypuff_3_sgb:: 114 | INCBIN "gfx/bgm/no_blink.2bpp" 115 | INCBIN "gfx/bgm/jigglypuff_3_sgb.2bpp" 116 | .end:: 117 | 118 | gfx_bgm_jigglypuff_4_sgb:: 119 | INCBIN "gfx/bgm/no_blink.2bpp" 120 | INCBIN "gfx/bgm/jigglypuff_4_sgb.2bpp" 121 | .end:: 122 | 123 | SECTION "compressed_tilemap_attrmap_town_map_transition", ROMX[$7000], BANK[$68] 124 | compressed_tilemap_attrmap_town_map_transition:: 125 | INCBIN "gfx/town_map/town_map_transition.tilemap_attrmap.xor" 126 | .end:: 127 | -------------------------------------------------------------------------------- /source/bank_69.asm: -------------------------------------------------------------------------------- 1 | SECTION "gfx_lv_1_tokiwa_forest", ROMX[$4800], BANK[$69] 2 | gfx_lv_1_tokiwa_forest:: 3 | INCBIN "gfx/town_map/lv_1_tokiwa_forest.2bpp" 4 | .end:: 5 | gfx_lv_1_tokiwa_forest_sgb:: 6 | INCBIN "gfx/town_map/lv_1_tokiwa_forest_sgb.2bpp" 7 | .end:: 8 | ; The unused tree trunk tiles are darker. 9 | gfx_lv_1_tokiwa_forest_duplicate:: 10 | INCBIN "gfx/town_map/lv_1_tokiwa_forest_unused.2bpp" 11 | .end:: 12 | 13 | SECTION "gfx_textbox_border_dark", ROMX[$6000], BANK[$69] 14 | gfx_textbox_border_dark:: 15 | INCBIN "gfx/fonts/textbox_border_dark.2bpp" 16 | .end:: 17 | 18 | SECTION "gfx_textbox_border", ROMX[$6800], BANK[$69] 19 | gfx_textbox_border_bw:: 20 | INCBIN "gfx/fonts/textbox_border_bw.2bpp" 21 | .end:: 22 | 23 | SECTION "compressed_gfx_data_select", ROMX[$7000], BANK[$69] 24 | compressed_gfx_data_select:: 25 | INCBIN "gfx/data_select/data_select.2bpp.xor" 26 | .end:: 27 | -------------------------------------------------------------------------------- /source/bank_6a.asm: -------------------------------------------------------------------------------- 1 | SECTION "compressed_tilemap_attrmap_data_select", ROMX[$7c00], BANK[$6a] 2 | compressed_tilemap_attrmap_data_select:: 3 | INCBIN "gfx/data_select/data_select.tilemap_attrmap.xor" 4 | .end:: 5 | -------------------------------------------------------------------------------- /source/bank_6b.asm: -------------------------------------------------------------------------------- 1 | SECTION "compressed_tilemap_attrmap_album_scroll", ROMX[$7c00], BANK[$6b] 2 | compressed_tilemap_attrmap_album_scroll:: 3 | INCBIN "gfx/safari_zone_album/album_scroll.tilemap_attrmap.xor" 4 | .end:: 5 | 6 | SECTION "compressed_tilemap_attrmap_unknown_6b_7f34", ROMX[$7f34], BANK[$6b] 7 | compressed_tilemap_attrmap_unknown_6b_7f34:: 8 | INCBIN "gfx/unknown/unknown_6b_7f34.tilemap_attrmap.xor" 9 | .end:: 10 | -------------------------------------------------------------------------------- /source/bank_6c.asm: -------------------------------------------------------------------------------- 1 | SECTION "gfx_unknown_6c_4000", ROMX[$4000], BANK[$6c] 2 | gfx_unknown_6c_4000:: 3 | INCBIN "gfx/unknown/unknown_6c_4000.2bpp" 4 | .end:: 5 | 6 | SECTION "gfx_unknown_6c_7000", ROMX[$7000], BANK[$6c] 7 | gfx_unknown_6c_7000:: 8 | INCBIN "gfx/unknown/unknown_6c_7000.2bpp" 9 | .end:: 10 | 11 | SECTION "compressed_tilemap_attrmap_pokedex_pic", ROMX[$7c00], BANK[$6c] 12 | compressed_tilemap_attrmap_pokedex_pic:: 13 | INCBIN "gfx/pokedex/pokedex_pic.tilemap_attrmap.xor" 14 | .end:: 15 | 16 | SECTION "compressed_tilemap_copyright", ROMX[$7eec], BANK[$6c] 17 | compressed_tilemap_copyright:: 18 | INCBIN "gfx/copyright/copyright.tilemap.xor" 19 | .end:: 20 | -------------------------------------------------------------------------------- /source/bank_6d.asm: -------------------------------------------------------------------------------- 1 | SECTION "gfx_album_picture_frames_light", ROMX[$4000], BANK[$6d] 2 | gfx_album_picture_frames_light:: 3 | INCBIN "gfx/safari_zone_album/picture_frames_light.2bpp" 4 | .end:: 5 | 6 | SECTION "compressed_gfx_save_sgb", ROMX[$7000], BANK[$6d] 7 | compressed_gfx_save_sgb:: 8 | INCBIN "gfx/save/save_sgb.xor" 9 | .end:: 10 | -------------------------------------------------------------------------------- /source/bank_6e.asm: -------------------------------------------------------------------------------- 1 | SECTION "bank6e", ROMX[$4000], BANK[$6e] 2 | 3 | gfx_text_chars_bw:: 4 | INCBIN "gfx/fonts/text_chars_bw.2bpp" 5 | .end:: 6 | 7 | gfx_pikachu_walk:: 8 | INCBIN "gfx/sprites/pikachu_walk.2bpp" 9 | .end:: 10 | 11 | gfx_bulbasaur_walk:: 12 | INCBIN "gfx/sprites/bulbasaur_walk.2bpp" 13 | .end:: 14 | 15 | gfx_charmander_walk:: 16 | INCBIN "gfx/sprites/charmander_walk.2bpp" 17 | .end:: 18 | 19 | gfx_squirtle_walk:: 20 | INCBIN "gfx/sprites/squirtle_walk.2bpp" 21 | .end:: 22 | 23 | gfx_clefairy_walk:: 24 | INCBIN "gfx/sprites/clefairy_walk.2bpp" 25 | .end:: 26 | 27 | gfx_jigglypuff_walk:: 28 | INCBIN "gfx/sprites/jigglypuff_walk.2bpp" 29 | .end:: 30 | 31 | gfx_misty_walk:: 32 | INCBIN "gfx/sprites/misty_walk.2bpp" 33 | .end:: 34 | 35 | gfx_mew_walk:: 36 | INCBIN "gfx/sprites/mew_walk.2bpp" 37 | .end:: 38 | 39 | gfx_mew_silhouette_walk:: 40 | INCBIN "gfx/sprites/mew_silhouette_walk.2bpp" 41 | .end:: 42 | 43 | gfx_psyduck_walk:: 44 | INCBIN "gfx/sprites/psyduck_walk.2bpp" 45 | .end:: 46 | 47 | gfx_bill_walk:: 48 | INCBIN "gfx/sprites/bill_walk.2bpp" 49 | .end:: 50 | -------------------------------------------------------------------------------- /source/bank_6f.asm: -------------------------------------------------------------------------------- 1 | SECTION "bank6f", ROMX[$4000], BANK[$6f] 2 | 3 | gfx_text_chars_dark:: 4 | INCBIN "gfx/fonts/text_chars_dark.2bpp" 5 | .end:: 6 | 7 | gfx_lv_2_mt_otsukimi:: 8 | INCBIN "gfx/town_map/lv_2_mt_otsukimi.2bpp" 9 | .end:: 10 | gfx_lv_2_mt_otsukimi_sgb:: 11 | INCBIN "gfx/town_map/lv_2_mt_otsukimi_sgb.2bpp" 12 | .end:: 13 | gfx_lv_2_mt_otsukimi_duplicate:: 14 | INCBIN "gfx/town_map/lv_2_mt_otsukimi.2bpp" 15 | .end:: 16 | -------------------------------------------------------------------------------- /source/bank_70.asm: -------------------------------------------------------------------------------- 1 | SECTION "unused_gfx_picross_2_levels", ROMX[$4000], BANK[$70] 2 | unused_gfx_picross_2_levels:: 3 | INCBIN "gfx/unused/picross_2.2bpp" 4 | INCBIN "gfx/unused/marios_picross.2bpp" 5 | INCBIN "gfx/unused/warios_picross.2bpp" 6 | .end:: 7 | 8 | SECTION "gfx_lv_2_lake_zone", ROMX[$64c0], BANK[$70] 9 | gfx_lv_2_lake_zone:: 10 | INCBIN "gfx/safari_map/lv_2_lake_zone.2bpp" 11 | .end:: 12 | gfx_lv_2_lake_zone_sgb:: 13 | INCBIN "gfx/safari_map/lv_2_lake_zone_sgb.2bpp" 14 | .end:: 15 | gfx_lv_2_lake_zone_duplicate:: 16 | INCBIN "gfx/safari_map/lv_2_lake_zone.2bpp" 17 | .end:: 18 | -------------------------------------------------------------------------------- /source/bank_71.asm: -------------------------------------------------------------------------------- 1 | SECTION "gfx_lv_3_mountain_zone", ROMX[$6400], BANK[$71] 2 | gfx_lv_3_mountain_zone:: 3 | INCBIN "gfx/safari_map/lv_3_mountain_zone.2bpp" 4 | .end:: 5 | gfx_lv_3_mountain_zone_sgb:: 6 | INCBIN "gfx/safari_map/lv_3_mountain_zone_sgb.2bpp" 7 | .end:: 8 | gfx_lv_3_mountain_zone_duplicate:: 9 | INCBIN "gfx/safari_map/lv_3_mountain_zone.2bpp" 10 | .end:: 11 | 12 | SECTION "compressed_tilemap_attrmap_itemdex", ROMX[$7c00], BANK[$71] 13 | compressed_tilemap_attrmap_itemdex:: 14 | INCBIN "gfx/itemdex/itemdex.tilemap_attrmap.xor" 15 | .end:: 16 | -------------------------------------------------------------------------------- /source/bank_72.asm: -------------------------------------------------------------------------------- 1 | SECTION "gfx_lv_1_plain_zone", ROMX[$4800], BANK[$72] 2 | gfx_lv_1_plain_zone:: 3 | INCBIN "gfx/safari_map/lv_1_plain_zone.2bpp" 4 | .end:: 5 | ; The Safari Zone level 1 was renamed from Forest Zone to Plain Zone, 6 | ; but only the CGB graphics were updated, leaving the old name in 7 | ; the SGB and duplicate CGB graphics. 8 | gfx_lv_1_plain_zone_sgb:: 9 | INCBIN "gfx/safari_map/lv_1_plain_zone_sgb.2bpp" 10 | .end:: 11 | gfx_lv_1_plain_zone_duplicate:: 12 | INCBIN "gfx/safari_map/lv_1_plain_zone_unused.2bpp" 13 | .end:: 14 | -------------------------------------------------------------------------------- /source/bank_73.asm: -------------------------------------------------------------------------------- 1 | SECTION "gfx_lv_0_home", ROMX[$4800], BANK[$73] 2 | gfx_lv_0_home:: 3 | INCBIN "gfx/easy_picross/lv_0_home.2bpp" 4 | .end:: 5 | gfx_lv_0_home_sgb:: 6 | INCBIN "gfx/easy_picross/lv_0_home_sgb.2bpp" 7 | .end:: 8 | ; The edges of the unused house roof tiles are dark gray 9 | ; like the rest of the roof, not white. 10 | gfx_lv_0_home_duplicate:: 11 | INCBIN "gfx/easy_picross/lv_0_home_unused.2bpp" 12 | .end:: 13 | -------------------------------------------------------------------------------- /source/bank_74.asm: -------------------------------------------------------------------------------- 1 | SECTION "bank74", ROMX[$4000], BANK[$74] 2 | 3 | gfx_lv_4_jungle_zone:: 4 | INCBIN "gfx/safari_map/lv_4_jungle_zone.2bpp" 5 | .end:: 6 | gfx_lv_4_jungle_zone_sgb:: 7 | INCBIN "gfx/safari_map/lv_4_jungle_zone_sgb.2bpp" 8 | .end:: 9 | ; The edges of the unused tree trunk tiles are light and dark gray 10 | ; like the rest of the tree, not white and light gray. 11 | gfx_lv_4_jungle_zone_duplicate:: 12 | INCBIN "gfx/safari_map/lv_4_jungle_zone_unused.2bpp" 13 | .end:: 14 | 15 | gfx_lv_3_sea_cottage:: 16 | INCBIN "gfx/town_map/lv_3_sea_cottage.2bpp" 17 | .end:: 18 | gfx_lv_3_sea_cottage_sgb:: 19 | INCBIN "gfx/town_map/lv_3_sea_cottage_sgb.2bpp" 20 | .end:: 21 | ; The unused "3" in "3/10" is has less of a black border. 22 | gfx_lv_3_sea_cottage_duplicate:: 23 | INCBIN "gfx/town_map/lv_3_sea_cottage_unused.2bpp" 24 | .end:: 25 | 26 | SECTION "tilemap_sgb_border", ROMX[$7010], BANK[$74] 27 | tilemap_sgb_border:: 28 | INCBIN "gfx/sgb_border/sgb_border.bin" 29 | .end:: 30 | 31 | SECTION "compressed_tilemap_attrmap_easy_picross", ROMX[$7ddc], BANK[$74] 32 | compressed_tilemap_attrmap_easy_picross:: 33 | INCBIN "gfx/easy_picross/easy_picross.tilemap_attrmap.xor" 34 | .end:: 35 | -------------------------------------------------------------------------------- /source/bank_75.asm: -------------------------------------------------------------------------------- 1 | SECTION "bank75", ROMX[$4000], BANK[$75] 2 | 3 | gfx_lv_4_s_s_anne:: 4 | INCBIN "gfx/town_map/lv_4_s_s_anne.2bpp" 5 | .end:: 6 | gfx_lv_4_s_s_anne_sgb:: 7 | INCBIN "gfx/town_map/lv_4_s_s_anne_sgb.2bpp" 8 | .end:: 9 | gfx_lv_4_s_s_anne_duplicate:: 10 | INCBIN "gfx/town_map/lv_4_s_s_anne.2bpp" 11 | .end:: 12 | 13 | gfx_lv_5_pokemon_tower:: 14 | INCBIN "gfx/town_map/lv_5_pokemon_tower.2bpp" 15 | .end:: 16 | gfx_lv_5_pokemon_tower_sgb:: 17 | INCBIN "gfx/town_map/lv_5_pokemon_tower_sgb.2bpp" 18 | .end:: 19 | gfx_lv_5_pokemon_tower_duplicate:: 20 | INCBIN "gfx/town_map/lv_5_pokemon_tower.2bpp" 21 | .end:: 22 | 23 | SECTION "compressed_gfx_copyright", ROMX[$7d35], BANK[$75] 24 | compressed_gfx_copyright:: 25 | INCBIN "gfx/copyright/copyright.2bpp.xor" 26 | .end:: 27 | -------------------------------------------------------------------------------- /source/bank_76.asm: -------------------------------------------------------------------------------- 1 | SECTION "bank76", ROMX[$4000], BANK[$76] 2 | 3 | gfx_lv_6_silph_company:: 4 | INCBIN "gfx/town_map/lv_6_silph_company.2bpp" 5 | .end:: 6 | gfx_lv_6_silph_company_sgb:: 7 | INCBIN "gfx/town_map/lv_6_silph_company_sgb.2bpp" 8 | .end:: 9 | ; The unused "6" in "6/10" is taller. 10 | gfx_lv_6_silph_company_duplicate:: 11 | INCBIN "gfx/town_map/lv_6_silph_company_unused.2bpp" 12 | .end:: 13 | 14 | gfx_lv_7_cycling_road:: 15 | INCBIN "gfx/town_map/lv_7_cycling_road.2bpp" 16 | .end:: 17 | gfx_lv_7_cycling_road_sgb:: 18 | INCBIN "gfx/town_map/lv_7_cycling_road_sgb.2bpp" 19 | .end:: 20 | ; The unused "/10" in "7/10" and "LV" are taller. 21 | gfx_lv_7_cycling_road_duplicate:: 22 | INCBIN "gfx/town_map/lv_7_cycling_road_unused.2bpp" 23 | .end:: 24 | 25 | SECTION "compressed_tilemap_attrmap_safari_map", ROMX[$7000], BANK[$76] 26 | compressed_tilemap_attrmap_safari_map:: 27 | INCBIN "gfx/safari_map/safari_map.tilemap_attrmap.xor" 28 | .end:: 29 | 30 | SECTION "compressed_tilemap_attrmap_safari_picross", ROMX[$7c35], BANK[$76] 31 | compressed_tilemap_attrmap_safari_picross:: 32 | INCBIN "gfx/game_select/safari_picross.tilemap_attrmap.xor" 33 | .end:: 34 | -------------------------------------------------------------------------------- /source/bank_77.asm: -------------------------------------------------------------------------------- 1 | SECTION "bank77", ROMX[$4000], BANK[$77] 2 | 3 | gfx_lv_8_power_plant:: 4 | INCBIN "gfx/town_map/lv_8_power_plant.2bpp" 5 | .end:: 6 | gfx_lv_8_power_plant_sgb:: 7 | INCBIN "gfx/town_map/lv_8_power_plant_sgb.2bpp" 8 | .end:: 9 | gfx_lv_8_power_plant_duplicate:: 10 | INCBIN "gfx/town_map/lv_8_power_plant.2bpp" 11 | .end:: 12 | 13 | gfx_lv_9_futago_island:: 14 | INCBIN "gfx/town_map/lv_9_futago_island.2bpp" 15 | .end:: 16 | gfx_lv_9_futago_island_sgb:: 17 | INCBIN "gfx/town_map/lv_9_futago_island_sgb.2bpp" 18 | .end:: 19 | gfx_lv_9_futago_island_duplicate:: 20 | INCBIN "gfx/town_map/lv_9_futago_island.2bpp" 21 | .end:: 22 | -------------------------------------------------------------------------------- /source/bank_78.asm: -------------------------------------------------------------------------------- 1 | SECTION "bank78", ROMX[$4000], BANK[$78] 2 | 3 | gfx_lv_10_hanada_cave:: 4 | INCBIN "gfx/town_map/lv_10_hanada_cave.2bpp" 5 | .end:: 6 | gfx_lv_10_hanada_cave_sgb:: 7 | INCBIN "gfx/town_map/lv_10_hanada_cave_sgb.2bpp" 8 | .end:: 9 | ; The water behind cliff corner tiles is dark gray 10 | ; like the rest of the water, not white. 11 | gfx_lv_10_hanada_cave_duplicate:: 12 | INCBIN "gfx/town_map/lv_10_hanada_cave_unused.2bpp" 13 | .end:: 14 | 15 | gfx_how_to_play_safari:: 16 | INCBIN "gfx/how_to_play/safari.2bpp" 17 | .end:: 18 | -------------------------------------------------------------------------------- /source/bank_79.asm: -------------------------------------------------------------------------------- 1 | SECTION "gfx_cancel_ok_no_yes", ROMX[$4000], BANK[$79] 2 | gfx_cancel_ok_no_yes:: 3 | INCBIN "gfx/menus/cancel_ok_no_yes.2bpp" 4 | .end:: 5 | 6 | SECTION "compressed_tilemap_attrmap_town_map", ROMX[$5800], BANK[$79] 7 | compressed_tilemap_attrmap_town_map:: 8 | INCBIN "gfx/town_map/town_map.tilemap_attrmap.xor" 9 | .end:: 10 | 11 | SECTION "compressed_gfx_game_select", ROMX[$6ba1], BANK[$79] 12 | compressed_gfx_game_select:: 13 | INCBIN "gfx/game_select/game_select.2bpp.xor" 14 | .end:: 15 | -------------------------------------------------------------------------------- /source/bank_7a.asm: -------------------------------------------------------------------------------- 1 | SECTION "gfx_sgb_border_2", ROMX[$4010], BANK[$7a] 2 | gfx_sgb_border_2:: 3 | INCBIN "gfx/sgb_border/sgb_border_2.4bpp" 4 | .end:: 5 | 6 | SECTION "gfx_sgb_border_1", ROMX[$5020], BANK[$7a] 7 | gfx_sgb_border_1:: 8 | INCBIN "gfx/sgb_border/sgb_border_1.4bpp" 9 | .end:: 10 | 11 | SECTION "tilemap_unknown_7a_6020", ROMX[$6020], BANK[$7a] 12 | tilemap_unknown_7a_6020:: 13 | INCBIN "gfx/unknown/unknown_7a_6020.tilemap" 14 | .end:: 15 | attrmap_unknown_7a_6420:: 16 | INCBIN "gfx/unknown/unknown_7a_6420.attrmap" 17 | .end:: 18 | 19 | SECTION "tilemap_title", ROMX[$7020], BANK[$7a] 20 | tilemap_title:: 21 | INCBIN "gfx/title/title.tilemap" 22 | .end:: 23 | attrmap_title:: 24 | INCBIN "gfx/title/title.attrmap" 25 | .end:: 26 | 27 | SECTION "compressed_tilemap_attrmap_pokedex_list", ROMX[$7820], BANK[$7a] 28 | compressed_tilemap_attrmap_pokedex_list:: 29 | INCBIN "gfx/pokedex/pokedex_list.tilemap_attrmap.xor" 30 | .end:: 31 | 32 | SECTION "compressed_tilemap_attrmap_pokemon_picross", ROMX[$7d18], BANK[$7a] 33 | compressed_tilemap_attrmap_pokemon_picross:: 34 | INCBIN "gfx/game_select/pokemon_picross.tilemap_attrmap.xor" 35 | .end:: 36 | -------------------------------------------------------------------------------- /source/bank_7c.asm: -------------------------------------------------------------------------------- 1 | INCLUDE "gfx_macros.inc" 2 | 3 | SECTION "gfx_alphabets", ROMX[$4000], BANK[$7c] 4 | gfx_alphabets:: 5 | INCBIN "gfx/fonts/alphabets.2bpp" 6 | .end:: 7 | 8 | SECTION "attrmap_how_to_play", ROMX[$5c00], BANK[$7c] 9 | attrmap_how_to_play:: 10 | INCBIN "gfx/how_to_play/how_to_play.attrmap" 11 | .end:: 12 | 13 | SECTION "compressed_tilemap_attrmap_album_pic", ROMX[$7000], BANK[$7c] 14 | compressed_tilemap_attrmap_album_pic:: 15 | INCBIN "gfx/safari_zone_album/album_pic.tilemap_attrmap.xor" 16 | .end:: 17 | 18 | SECTION "compressed_tilemap_attrmap_album_list", ROMX[$7482], BANK[$7c] 19 | compressed_tilemap_attrmap_album_list:: 20 | INCBIN "gfx/safari_zone_album/album_list.tilemap_attrmap.xor" 21 | .end:: 22 | 23 | SECTION "pal_pokemon_picross_bg", ROMX[$76cc], BANK[$7c] 24 | pal_pokemon_picross_bg:: 25 | INCLUDE "gfx/game_select/pokemon_picross_bg.pal" 26 | .end:: 27 | 28 | SECTION "pal_title_bg, pal_title_ob", ROMX[$7d4c], BANK[$7c] 29 | pal_title_bg:: 30 | INCLUDE "gfx/title/title_bg.pal" 31 | .end:: 32 | pal_title_ob:: 33 | INCLUDE "gfx/title/title_ob.pal" 34 | .end:: 35 | 36 | SECTION "pal_copyright", ROMX[$7f8c], BANK[$7c] 37 | pal_copyright:: 38 | INCLUDE "gfx/copyright/copyright.pal" 39 | .end:: 40 | -------------------------------------------------------------------------------- /source/bank_7e.asm: -------------------------------------------------------------------------------- 1 | INCLUDE "charmap.inc" 2 | 3 | SECTION "ASCII credits 1", ROMX[$4010], BANK[$7e] 4 | 5 | pushc 6 | setcharmap ascii 7 | db "DSEQLITE", 0 8 | db $01 9 | db "CRTS(C) mcmxcvi by Toshiyuki Ueno", 0 10 | db "toshi-u@tau.bekkoame.or.jp", 0 11 | popc 12 | -------------------------------------------------------------------------------- /source/bank_7f.asm: -------------------------------------------------------------------------------- 1 | INCLUDE "charmap.inc" 2 | 3 | SECTION "ASCII credits 2", ROMX[$4010], BANK[$7f] 4 | 5 | pushc 6 | setcharmap ascii 7 | db "DSEQLITE", 0 8 | db $01 9 | db "CRTS(C) mcmxcvi by Toshiyuki Ueno", 0 10 | db "toshi-u@tau.bekkoame.or.jp", 0 11 | popc 12 | -------------------------------------------------------------------------------- /tools/coverage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | 4 | """ 5 | Usage: python3 coverage.py [picross.map] [coverage.png] 6 | 7 | Generate a PNG visualizing the space used by each bank in the ROM. 8 | """ 9 | 10 | import sys 11 | import png 12 | from colorsys import hls_to_rgb 13 | 14 | from parsemap import MapReader 15 | 16 | def main(): 17 | mapfile = sys.argv[1] if len(sys.argv) >= 2 else 'picross.map' 18 | filename = sys.argv[2] if len(sys.argv) >= 3 else 'coverage.png' 19 | 20 | num_banks = 0x80 21 | bank_mask = 0x3FFF 22 | bank_size = 0x4000 # bytes 23 | 24 | bpp = 8 # bytes per pixel 25 | height = 256 # pixels 26 | assert bank_size % bpp == 0 and (bank_size // bpp) % height == 0 27 | 28 | pixels_per_bank = bank_size // bpp # 2048 pixels 29 | bank_width = pixels_per_bank // height # 8 pixels 30 | width = bank_width * num_banks # 1024 pixels 31 | 32 | r = MapReader() 33 | with open(mapfile, 'r', encoding='utf-8') as f: 34 | l = f.readlines() 35 | r.read_map_data(l) 36 | 37 | hit_data = [] 38 | default_bank_data = {'sections': [], 'used': 0, 'slack': bank_size} 39 | for bank in range(num_banks): 40 | hits = [0] * pixels_per_bank 41 | data = r.bank_data['rom bank'].get(bank, default_bank_data) 42 | for s in data['sections']: 43 | if s['beg'] > s['end']: 44 | continue 45 | if s['beg'] == 0x0000 and s['end'] > 0xFFFF: 46 | # https://github.com/gbdev/rgbds/issues/515 47 | continue 48 | beg = s['beg'] & bank_mask 49 | end = s['end'] & bank_mask 50 | for i in range(beg, end + 1): 51 | hits[i // bpp] += 1 52 | hit_data.append(hits) 53 | 54 | pixels = [[(0xFF, 0xFF, 0xFF)] * width for _ in range(height)] 55 | for bank, hits in enumerate(hit_data): 56 | hue = 0 if not bank else 210 if bank % 2 else 270 57 | for i, h in enumerate(hits): 58 | y = i // bank_width 59 | x = i % bank_width + bank * bank_width 60 | hls = (hue / 360.0, 1.0 - (h / bpp * (100 - 15)) / 100.0, 1.0) 61 | rgb = tuple(int(c * 255) for c in hls_to_rgb(*hls)) 62 | pixels[y][x] = rgb 63 | 64 | png_data = [tuple(c for pixel in row for c in pixel) for row in pixels] 65 | with open(filename, 'wb') as f: 66 | w = png.Writer(width, height) 67 | w.write(f, png_data) 68 | 69 | if __name__ == '__main__': 70 | main() 71 | -------------------------------------------------------------------------------- /tools/dump_data.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from sys import argv 4 | 5 | file = open("DMGAKVJ0.1", "rb").read() 6 | 7 | bank = int(argv[1], 16) 8 | addr = int(argv[2], 16) 9 | len = int(argv[3], 16) 10 | 11 | offset = addr 12 | if bank > 0: 13 | offset += 0x4000 * (bank - 1) 14 | 15 | print(" db ", end="") 16 | for x in range(len): 17 | print("$%02x, " % file[offset + x], end="") 18 | print() 19 | -------------------------------------------------------------------------------- /tools/dump_decompress.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Usage: ./dump_decompress.py 75:7d35 00b6 >decompressed.bin 4 | 5 | from sys import argv, stdout, stderr 6 | 7 | file = open("DMGAKVJ0.1", "rb").read() 8 | 9 | bank_addr = argv[1].split(':') 10 | bank = int(bank_addr[0], 16) 11 | addr = int(bank_addr[1], 16) 12 | length = int(argv[2], 16) 13 | offset = bank * 0x4000 + (addr & 0x3fff) 14 | 15 | output = [] 16 | i = offset 17 | v = 0x00 18 | for _1 in range(length): 19 | byte = file[i] 20 | i += 1 21 | if byte < 0x80: 22 | for _2 in range(byte + 1): 23 | v ^= file[i] 24 | output.append(v) 25 | i += 1 26 | else: 27 | for _2 in range(byte - 0x7e): 28 | v ^= file[i] 29 | output.append(v) 30 | i += 1 31 | 32 | stdout.buffer.write(bytes(output)) # decompressed 33 | #stderr.buffer.write(bytes(file[offset:i])) # compressed 34 | -------------------------------------------------------------------------------- /tools/dump_string.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from sys import argv 4 | 5 | file = open("DMGAKVJ0.1", "rb").read() 6 | 7 | multistring = False 8 | if argv[1] == "-m": 9 | argv.pop(1) 10 | multistring = True 11 | 12 | bank = int(argv[1], 16) 13 | addr = int(argv[2], 16) 14 | count = 1 15 | if len(argv) > 3: 16 | count = int(argv[3], 0) 17 | 18 | offset = addr 19 | if bank > 0: 20 | offset += 0x4000 * (bank - 1) 21 | 22 | charmap = {} 23 | for line in open("include/charmap.inc"): 24 | if line.startswith("charmap "): 25 | split = line.split(";")[0].split(" ", 1)[1].split(",") 26 | if len(split) != 2: 27 | continue 28 | 29 | char = split[0].strip() 30 | value = int(split[1].strip()) 31 | 32 | if not char.startswith("\"") or not char.endswith("\""): 33 | continue 34 | char = char[1:-1] 35 | 36 | if value not in charmap: 37 | charmap[value] = char 38 | 39 | for x in range(count): 40 | bank = offset // 0x4000 41 | addr = offset % 0x4000 42 | if bank > 0: 43 | addr += 0x4000 44 | 45 | print("string_%02x_%04x::" % (bank, addr)) 46 | while True: 47 | if multistring: 48 | if file[offset] == 0: 49 | offset += 1 50 | print(" db 0\n") 51 | break 52 | val = file[offset] | (file[offset + 1] << 8) 53 | print(" dw %d" % val) 54 | offset += 2 55 | 56 | print(" text \"", end="") 57 | while True: 58 | value = file[offset] | (file[offset + 1] << 8) 59 | offset += 2 60 | 61 | if value == 0xffff: 62 | break 63 | elif value == 0xfffe: 64 | print("\"\n line \"") 65 | continue 66 | 67 | if value in charmap: 68 | print(charmap[value], end="") 69 | else: 70 | print("<%02x>" % value, end="") 71 | 72 | print("\"\n done") 73 | if not multistring: 74 | print() 75 | break 76 | -------------------------------------------------------------------------------- /tools/makeshim.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from sys import argv, stderr 4 | 5 | def warn(s): 6 | print("WARNING:", s.rstrip(), file=stderr) 7 | 8 | for i, line in enumerate(open(argv[1])): 9 | content = line.split(";", 1)[0].strip() 10 | 11 | bankaddr_name = content.split(" ", 1) 12 | if len(bankaddr_name) != 2: 13 | continue 14 | name = bankaddr_name[1].strip() 15 | 16 | bank_addr = bankaddr_name[0].split(":") 17 | if len(bank_addr) != 2: 18 | warn("Can't shim line %d: %s" % (i+1, line)) 19 | continue 20 | bank = int(bank_addr[0], 16) 21 | addr = int(bank_addr[1], 16) 22 | 23 | if 0x0000 <= addr < 0x4000 and bank == 0: 24 | section = "ROM0" 25 | bank = None 26 | elif 0x4000 <= addr < 0x8000 and 1 <= bank < 128: 27 | section = "ROMX" 28 | elif 0x8000 <= addr < 0xA000 and 0 <= bank < 2: 29 | section = "VRAM" 30 | elif 0xA000 <= addr < 0xC000 and 0 <= bank < 16: 31 | section = "SRAM" 32 | elif 0xC000 <= addr < 0xD000 and bank == 0: 33 | section = "WRAM0" 34 | bank = None 35 | elif 0xD000 <= addr < 0xE000 and 0 <= bank < 16: 36 | section = "WRAMX" 37 | elif 0xFE00 <= addr < 0xFEA0 and bank == 0: 38 | section = "OAM" 39 | bank = None 40 | elif 0xFF80 <= addr < 0xFFFF and bank == 0: 41 | section = "HRAM" 42 | bank = None 43 | else: 44 | warn("Invalid bank/address on line %d: %s" % (i+1, line)) 45 | continue 46 | 47 | bankdec = ", BANK[$%x]" % bank if bank is not None else "" 48 | print('SECTION "Shim %s", %s[$%x]%s' % (name, section, addr, bankdec)) 49 | print("%s::" % name) 50 | -------------------------------------------------------------------------------- /tools/parsemap.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import re 4 | 5 | class MapReader: 6 | 7 | # {'rom bank': { 0: { 'sections': [ { 'beg': 1234, 8 | # 'end': 5678, 9 | # 'name': 'Section001', 10 | # 'symbols': [ { 'symbol': 'Function1234', 11 | # 'address: 1234, 12 | # }, 13 | # ] 14 | # }, 15 | # ], 16 | # 'used': 1234, 17 | # 'slack': 4567, 18 | # }, 19 | # }, 20 | # 'oam': { 'sections': [ { 'beg': 1234, 21 | # 'end': 5678, 22 | # 'name': 'Section002', 23 | # 'symbols': [ { 'symbol': 'Data1234', 24 | # 'address: 1234, 25 | # }, 26 | # ] 27 | # }, 28 | # ], 29 | # 'used': 1234, 30 | # 'slack': 4567, 31 | # }, 32 | # } 33 | # 34 | bank_data = {} 35 | 36 | bank_types = { 37 | 'hram bank': { 'size': 0x80, 'banked': False, }, 38 | 'oam bank' : { 'size': 0xA0, 'banked': False, }, 39 | 'rom bank' : { 'size': 0x4000, 'banked': True, }, 40 | 'sram bank': { 'size': 0x2000, 'banked': True, }, 41 | 'vram bank': { 'size': 0x1000, 'banked': True, }, 42 | 'wram bank': { 'size': 0x2000, 'banked': True, }, 43 | } 44 | 45 | bank_aliases = { 46 | 'hram': 'hram bank', 47 | 'oam': 'oam bank', 48 | 'rom0 bank': 'rom bank', 49 | 'romx bank': 'rom bank', 50 | 'wram0 bank': 'wram bank', 51 | 'wramx bank': 'wram bank', 52 | } 53 | 54 | # FSM states 55 | INIT, BANK, SECTION = range(3) 56 | 57 | # $506D-$519A ($012E bytes) ["Type Matchups"] 58 | section_header_regex = re.compile('\$([0-9A-Fa-f]{4})-\$([0-9A-Fa-f]{4,}) \(.*\)(?: \["(.*)"\])?') 59 | # $506D = TypeMatchups 60 | section_data_regex = re.compile('\$([0-9A-Fa-f]{4,}) = (.*)') 61 | # $3ED2 bytes 62 | slack_regex = re.compile('\$([0-9A-Fa-f]{4,}) bytes?') 63 | 64 | def __init__(self, *args, **kwargs): 65 | self.__dict__.update(kwargs) 66 | 67 | def _parse_init(self, line): 68 | 69 | line = line.split(':', 1)[0] 70 | parts = line.split(' #', 1) 71 | 72 | bank_type = parts[0].lower() 73 | bank_type = self.bank_aliases.get(bank_type, bank_type) 74 | 75 | if (bank_type in self.bank_types): 76 | self._cur_bank_name = bank_type 77 | self._cur_bank_type = self.bank_types[self._cur_bank_name] 78 | if (self._cur_bank_type['banked'] and len(parts) > 1): 79 | parts[1] = parts[1].split(':', 1)[0] 80 | parts[1] = parts[1].split(' ', 1)[0] 81 | self._cur_bank = int(parts[1], 10) 82 | if self._cur_bank_name not in self.bank_data: 83 | self.bank_data[self._cur_bank_name] = {} 84 | if self._cur_bank_type['banked']: 85 | if self._cur_bank not in self.bank_data[self._cur_bank_name]: 86 | self.bank_data[self._cur_bank_name][self._cur_bank] = {} 87 | self._cur_data = self.bank_data[self._cur_bank_name][self._cur_bank] 88 | else: 89 | self._cur_data = self.bank_data[self._cur_bank_name] 90 | 91 | if ({} == self._cur_data): 92 | self._cur_data['sections'] = [] 93 | self._cur_data['used'] = 0 94 | self._cur_data['slack'] = self._cur_bank_type['size'] 95 | return True 96 | 97 | return False 98 | 99 | def _parse_section_header(self, header): 100 | 101 | section_data = self.section_header_regex.match(header) 102 | if section_data is not None: 103 | beg = int(section_data.group(1), 16) 104 | end = int(section_data.group(2), 16) 105 | name = section_data.group(3) 106 | self._cur_section = {'beg': beg, 'end': end, 'name': name, 'symbols': []} 107 | self._cur_data['sections'].append(self._cur_section) 108 | return True 109 | return False 110 | 111 | def _parse_slack(self, data): 112 | 113 | slack_data = self.slack_regex.match(data) 114 | slack_bytes = int(slack_data.group(1), 16) 115 | self._cur_data['slack'] = slack_bytes 116 | 117 | used_bytes = 0 118 | 119 | for s in self._cur_data['sections']: 120 | used_bytes += s['end'] - s['beg'] + 1 121 | 122 | self._cur_data['used'] = used_bytes 123 | 124 | def read_map_data(self, map): 125 | 126 | if type(map) is str: 127 | map = map.split('\n') 128 | 129 | self._state = MapReader.INIT 130 | self._cur_bank_name = '' 131 | self._cur_bank_type = {} 132 | self._cur_bank = 0 133 | self._cur_data = {} 134 | 135 | for line in map: 136 | 137 | line = line.rstrip() 138 | if (MapReader.INIT == self._state): 139 | 140 | if (self._parse_init(line)): 141 | self._state = MapReader.BANK 142 | 143 | elif (MapReader.BANK == self._state or MapReader.SECTION == self._state): 144 | 145 | if ('' == line): 146 | self._state = MapReader.INIT 147 | else: 148 | 149 | line = line.lstrip() 150 | parts = line.split(': ', 1) 151 | 152 | if (MapReader.SECTION == self._state): 153 | section_data = self.section_data_regex.match(parts[0]) 154 | if section_data is not None: 155 | address = int(section_data.group(1), 16) 156 | name = section_data.group(2) 157 | self._cur_section['symbols'].append({'name': name, 'address': address}) 158 | continue 159 | 160 | if ('SECTION' == parts[0]): 161 | if (self._parse_section_header(parts[1])): 162 | self._state = MapReader.SECTION 163 | elif ('SLACK' == parts[0]): 164 | self._parse_slack(parts[1]) 165 | self._state = MapReader.INIT 166 | elif ('EMPTY' == parts[0]): 167 | self._cur_data = {'sections': [], 'used': 0, 'slack': self._cur_bank_type['size']} 168 | self._state = MapReader.INIT 169 | 170 | else: 171 | pass 172 | 173 | for k, v in self.bank_data.items(): 174 | if (self.bank_types[k]['banked']): 175 | for _, vv in v.items(): 176 | vv['sections'].sort(key=lambda x: x['beg']) 177 | for vvv in vv['sections']: 178 | vvv['symbols'].sort(key=lambda x: x['address']) 179 | else: 180 | v['sections'].sort(key=lambda x: x['beg']) 181 | for vv in v['sections']: 182 | vv['symbols'].sort(key=lambda x: x['address']) 183 | -------------------------------------------------------------------------------- /tools/scan_includes.c: -------------------------------------------------------------------------------- 1 | #define _DEFAULT_SOURCE 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | void usage(void) { 12 | printf("Usage: scan_includes [-h] [-o output] [-s] [-i path] [-b path] filename\n" 13 | "-h, --help\n" 14 | " Print usage and exit\n" 15 | "-o, --output\n" 16 | " Filename to store the output in\n" 17 | "-s, --strict\n" 18 | " Fail if a file cannot be read\n" 19 | "-i, --include\n" 20 | " Add an include path\n" 21 | "-b, --build-prefix\n" 22 | " Set path to generate non-existing files in\n" 23 | "-t, --target\n" 24 | " Generate a makefile fragment for target file\n"); 25 | } 26 | 27 | struct Options { 28 | bool help; 29 | char *output; 30 | bool strict; 31 | char **include_paths; 32 | int include_paths_len; 33 | char *build_prefix; 34 | char *target; 35 | }; 36 | 37 | struct Options Options = {0}; 38 | 39 | void *xmalloc(size_t size) 40 | { 41 | void *ptr = malloc(size); 42 | if (!ptr) { 43 | perror("malloc"); 44 | exit(1); 45 | } 46 | return ptr; 47 | } 48 | 49 | void *xrealloc(void *ptr, size_t size) 50 | { 51 | ptr = realloc(ptr, size); 52 | if (!ptr) { 53 | perror("realloc"); 54 | exit(1); 55 | } 56 | return ptr; 57 | } 58 | 59 | void options_add_file(char *filename) 60 | { 61 | Options.include_paths_len++; 62 | Options.include_paths = xrealloc(Options.include_paths, 63 | sizeof(Options.include_paths[0]) * Options.include_paths_len); 64 | Options.include_paths[Options.include_paths_len - 1] = filename; 65 | } 66 | 67 | void filelist_append(char **string, char *append) 68 | { 69 | size_t orig_len = *string ? strlen(*string) : 0; 70 | size_t len = orig_len + strlen(append) + 2; 71 | if (orig_len == 0) len--; 72 | *string = xrealloc(*string, len); 73 | 74 | if (orig_len != 0) { 75 | (*string)[orig_len + 0] = ' '; 76 | (*string)[orig_len + 1] = '\0'; 77 | } else { 78 | (*string)[orig_len + 0] = '\0'; 79 | } 80 | strcat(*string, append); 81 | } 82 | 83 | char *joinpath(char *dir, char *file) 84 | { 85 | size_t len = strlen(dir) + strlen(file) + 1; 86 | char *path = xmalloc(len); 87 | snprintf(path, len, "%s%s", dir, file); 88 | return path; 89 | } 90 | 91 | char *find_file(char *filename) { 92 | if (access(filename, F_OK) == 0) { 93 | char *fname = strdup(filename); 94 | if (!fname) { 95 | perror("strdup"); 96 | exit(1); 97 | } 98 | return fname; 99 | } 100 | 101 | // Try to find file in any of the include paths 102 | for (int i = 0; i < Options.include_paths_len; i++) { 103 | char *path = joinpath(Options.include_paths[i], filename); 104 | if (access(path, F_OK) == 0) return path; 105 | free(path); 106 | } 107 | 108 | if (Options.strict) { 109 | fprintf(stderr, "Could not open file: '%s'\n", filename); 110 | exit(1); 111 | } 112 | return NULL; 113 | } 114 | 115 | void scan_file(char **includes, char **incbins, char *filename) { 116 | FILE *f = fopen(filename, "r"); 117 | if (!f) return; 118 | 119 | fseek(f, 0, SEEK_END); 120 | long size = ftell(f); 121 | rewind(f); 122 | 123 | char *buffer = xmalloc(size + 1); 124 | char *orig = buffer; 125 | size = fread(buffer, 1, size, f); 126 | buffer[size] = '\0'; 127 | fclose(f); 128 | 129 | for (; buffer && (buffer - orig < size); buffer++) { 130 | bool is_include = false; 131 | bool is_incbin = false; 132 | switch (*buffer) { 133 | case ';': 134 | buffer = strchr(buffer, '\n'); 135 | if (!buffer) { 136 | fprintf(stderr, "%s: no newline at end of file\n", filename); 137 | break; 138 | } 139 | break; 140 | 141 | case '"': 142 | buffer++; 143 | buffer = strchr(buffer, '"'); 144 | if (!buffer) { 145 | fprintf(stderr, "%s: unterminated string\n", filename); 146 | break; 147 | } 148 | buffer++; 149 | break; 150 | 151 | case 'i': 152 | case 'I': 153 | if ((strncmp(buffer, "INCBIN", 6) == 0) || 154 | (strncmp(buffer, "incbin", 6) == 0)) { 155 | is_incbin = true; 156 | } else if ((strncmp(buffer, "INCLUDE", 7) == 0) || 157 | (strncmp(buffer, "include", 7) == 0)) { 158 | is_include = true; 159 | } 160 | if (is_incbin || is_include) { 161 | buffer = strchr(buffer, '"'); 162 | if (!buffer) { 163 | break; 164 | } 165 | buffer++; 166 | 167 | size_t length = strcspn(buffer, "\""); 168 | buffer[length] = '\0'; 169 | char *include = find_file(buffer); 170 | 171 | char *append = buffer; 172 | if (Options.build_prefix) { 173 | append = include; 174 | if (!include) { 175 | append = joinpath(Options.build_prefix, buffer); 176 | } 177 | } 178 | if (is_include) filelist_append(includes, append); 179 | if (is_incbin) filelist_append(incbins, append); 180 | if (Options.build_prefix && !include) free(append); 181 | 182 | if (include && is_include) scan_file(includes, incbins, include); 183 | 184 | if (include) free(include); 185 | buffer += length + 1; 186 | } 187 | break; 188 | 189 | } 190 | if (!buffer) { 191 | break; 192 | } 193 | 194 | } 195 | 196 | free(orig); 197 | } 198 | 199 | int main(int argc, char* argv[]) { 200 | int i = 0; 201 | struct option long_options[] = { 202 | {"help", no_argument, 0, 'h'}, 203 | {"output", required_argument, 0, 'o'}, 204 | {"strict", no_argument, 0, 's'}, 205 | {"include", required_argument, 0, 'i'}, 206 | {"build-prefix", required_argument, 0, 'b'}, 207 | {"target", required_argument, 0, 't'}, 208 | {0} 209 | }; 210 | int opt = -1; 211 | while ((opt = getopt_long(argc, argv, "ho:si:b:t:", long_options, &i)) != -1) { 212 | switch (opt) { 213 | case 'h': 214 | Options.help = true; 215 | break; 216 | case 'o': 217 | Options.output = optarg; 218 | break; 219 | case 's': 220 | Options.strict = true; 221 | break; 222 | case 'i': 223 | options_add_file(optarg); 224 | break; 225 | case 'b': 226 | Options.build_prefix = optarg; 227 | break; 228 | case 't': 229 | Options.target = optarg; 230 | break; 231 | default: 232 | usage(); 233 | exit(1); 234 | break; 235 | } 236 | } 237 | argc -= optind; 238 | argv += optind; 239 | if (Options.help) { 240 | usage(); 241 | return 0; 242 | } 243 | if (argc < 1) { 244 | usage(); 245 | exit(1); 246 | } 247 | 248 | char *includes = NULL; 249 | char *incbins = NULL; 250 | char *filename = find_file(argv[0]); 251 | if (filename) scan_file(&includes, &incbins, filename); 252 | 253 | FILE *f = stdout; 254 | if (Options.output) { 255 | f = fopen(Options.output, "w"); 256 | if (!f) { 257 | perror("fopen"); 258 | exit(1); 259 | } 260 | } 261 | 262 | if (Options.target) { 263 | fprintf(f, "%s:", Options.target); 264 | } 265 | if (includes) fprintf(f, " %s", includes); 266 | if (incbins) fprintf(f, " %s", incbins); 267 | fprintf(f, "\n"); 268 | 269 | if (Options.target && Options.output) { 270 | fprintf(f, "%s:", Options.output); 271 | if (includes) fprintf(f, " %s", includes); 272 | fprintf(f, "\n"); 273 | } 274 | return 0; 275 | } 276 | -------------------------------------------------------------------------------- /tools/tools.mk: -------------------------------------------------------------------------------- 1 | tools := \ 2 | tools/scan_includes \ 3 | tools/xor_compress 4 | 5 | CC := gcc 6 | CFLAGS := -O3 -std=c99 -Wall -Wextra -pedantic 7 | 8 | tools/%: tools/%.c 9 | $(CC) $(CFLAGS) -o $@ $< 10 | 11 | tools/xor-compress: tools/xor_compress.rs 12 | rustc -C opt-level=3 -o $@ $< 13 | -------------------------------------------------------------------------------- /tools/xor_compress.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | char *program_name; 8 | 9 | size_t file_size(FILE *f) { 10 | if (fseek(f, 0, SEEK_END) == -1) return 0; 11 | long f_size = ftell(f); 12 | if (f_size == -1) return 0; 13 | if (fseek(f, 0, SEEK_SET) == -1) return 0; 14 | return (size_t)f_size; 15 | } 16 | 17 | unsigned char *read_files(char *filenames[], int num_files, size_t *buf_size, int *err) { 18 | *buf_size = 0; 19 | unsigned char *buffer = NULL; 20 | 21 | const char *filename = NULL; 22 | for (int i = 0; i < num_files; i++) { 23 | filename = filenames[i]; 24 | 25 | FILE *f = fopen(filename, "rb"); 26 | if (!f) goto failure; 27 | 28 | size_t f_size = file_size(f); 29 | if (errno) goto failure; 30 | if (!f_size) continue; 31 | 32 | *buf_size += f_size; 33 | buffer = realloc(buffer, *buf_size); 34 | if (!buffer) goto failure; 35 | 36 | unsigned char *buf_end = buffer + (*buf_size - f_size); 37 | size_t read_size = fread(buf_end, 1, f_size, f); 38 | fclose(f); 39 | if (read_size != f_size) { 40 | // fread does not set errno 41 | fprintf(stderr, "%s: %s: Read error\n", program_name, filename); 42 | *err = 1; 43 | return buffer; 44 | } 45 | } 46 | 47 | *err = 0; 48 | return buffer; 49 | 50 | failure: 51 | fprintf(stderr, "%s: %s: %s\n", program_name, filename, strerror(errno)); 52 | *err = errno; 53 | return buffer; 54 | } 55 | 56 | int write_compressed(const char *filename, unsigned char *data, size_t n, int *err) { 57 | FILE *f = fopen(filename, "wb"); 58 | if (!f) { 59 | fprintf(stderr, "%s: %s: %s\n", program_name, filename, strerror(errno)); 60 | *err = errno; 61 | return 0; 62 | } 63 | 64 | int runs = 0; 65 | unsigned char v = 0x00; 66 | for (size_t i = 0; i < n; runs++) { 67 | unsigned char byte = data[i++]; 68 | unsigned char size = 0; 69 | if (i == n || data[i] != v) { 70 | // Sequential (< 0x80) 71 | // Run stops at 0x80 bytes or when the value two ahead is equal to v 72 | unsigned char buffer[0x80]; 73 | buffer[size++] = v ^ byte; 74 | for (; i < n; i++) { 75 | v = byte; 76 | if (size > 0x7f || (i + 1 < n && data[i + 1] == v)) break; 77 | byte = data[i]; 78 | buffer[size++] = v ^ byte; 79 | } 80 | fputc(size - 1, f); 81 | fwrite(buffer, 1, size, f); 82 | } else { 83 | // Alternating (>= 0x80) 84 | // Run stops at 0x80 bytes or when the values stop alternating 85 | for (; i < n && size < 0x80 && data[i] == ((size % 2) ? byte : v); size++, i++); 86 | fputc(size + 0x7f, f); 87 | fputc(v ^ byte, f); 88 | if (size % 2 == 0) v = byte; 89 | } 90 | } 91 | 92 | fflush(f); 93 | fclose(f); 94 | *err = 0; 95 | return runs; 96 | } 97 | 98 | int main(int argc, char *argv[]) { 99 | program_name = argc ? argv[0] : "xor_compress"; 100 | 101 | bool verbose = argc > 1 && !strcmp(argv[1], "-v"); 102 | if (verbose) { 103 | argv++; 104 | argc--; 105 | } 106 | 107 | if (argc < 3) { 108 | fprintf(stderr, "Usage: %s [-v] file... files.xor\n", program_name); 109 | exit(1); 110 | } 111 | argv++; 112 | argc -= 2; 113 | 114 | const char *out_filename = argv[argc]; 115 | 116 | int err = 0; 117 | size_t data_size = 0; 118 | unsigned char *data = read_files(argv, argc, &data_size, &err); 119 | if (!err) { 120 | int runs = write_compressed(out_filename, data, data_size, &err); 121 | if (!err && verbose) { 122 | printf("%s: %s: ld bc, $%x\n", program_name, out_filename, runs); 123 | } 124 | } 125 | free(data); 126 | return err; 127 | } 128 | -------------------------------------------------------------------------------- /tools/xor_compress.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import sys 4 | 5 | program_name = sys.argv.pop(0) if sys.argv else "xor_compress.py" 6 | 7 | verbose = sys.argv and sys.argv[0] == '-v' 8 | if verbose: 9 | sys.argv.pop(0) 10 | 11 | if len(sys.argv) < 2: 12 | print('Usage: %s [-v] file... files.xor' % program_name, file=sys.stderr) 13 | exit(1) 14 | 15 | out_filename = sys.argv.pop() 16 | 17 | data = bytearray() 18 | for filename in sys.argv: 19 | with open(filename, 'rb') as f: 20 | data.extend(f.read()) 21 | 22 | n = len(data) 23 | output = bytearray() 24 | v = 0x00 25 | i = 0 26 | runs = 0 27 | 28 | while i < n: 29 | byte = data[i] 30 | i += 1 31 | runs += 1 32 | 33 | if i == n or data[i] != v: 34 | # Sequential (< 0x80) 35 | # Run stops at 0x80 bytes or when the value two ahead is equal to v 36 | buffer = [v ^ byte] 37 | while i < n: 38 | v = byte 39 | if len(buffer) > 0x7f or (i + 1 < n and data[i + 1] == v): 40 | break 41 | byte = data[i] 42 | buffer.append(v ^ byte) 43 | i += 1 44 | output.append(len(buffer) - 1) 45 | output.extend(buffer) 46 | else: 47 | # Alternating (>= 0x80) 48 | # Run stops at 0x80 bytes or when the values stop alternating 49 | size = 0 50 | while i < n and size < 0x80 and data[i] == (byte if size % 2 else v): 51 | size += 1 52 | i += 1 53 | output.append(size + 0x7f) 54 | output.append(v ^ byte) 55 | if not size % 2: 56 | v = byte 57 | 58 | with open(out_filename, 'wb') as f: 59 | f.write(output) 60 | 61 | if verbose: 62 | print('%s: %s: ld bc, $%x' % (program_name, out_filename, runs)) 63 | -------------------------------------------------------------------------------- /tools/xor_compress.rs: -------------------------------------------------------------------------------- 1 | use std::env::args; 2 | use std::process::exit; 3 | use std::fs::{File, write}; 4 | use std::io::{Read, Error}; 5 | 6 | fn compress_files<'a>(in_filenames: &'a [String], out_filename: &'a String) -> Result { 7 | let mut data = Vec::new(); 8 | for filename in in_filenames { 9 | (|| { 10 | Ok(File::open(filename)?.read_to_end(&mut data)?) 11 | })().map_err(|err| (filename, err))?; 12 | } 13 | 14 | let n = data.len(); 15 | 16 | let mut output = Vec::new(); 17 | let mut v = 0x00; 18 | let mut i = 0; 19 | let mut runs = 0; 20 | 21 | while i < n { 22 | let mut byte = data[i]; 23 | i += 1; 24 | runs += 1; 25 | 26 | if i == n || data[i] != v { 27 | // Sequential (< 0x80) 28 | // Run stops at 0x80 bytes or when the value two ahead is equal to v 29 | let mut buffer = vec![v ^ byte]; 30 | while i < n { 31 | v = byte; 32 | if buffer.len() > 0x7f || (i + 1 < n && data[i + 1] == v) { 33 | break; 34 | } 35 | byte = data[i]; 36 | buffer.push(v ^ byte); 37 | i += 1; 38 | } 39 | output.push((buffer.len() - 1) as u8); 40 | output.extend(buffer); 41 | } else { 42 | // Alternating (>= 0x80) 43 | // Run stops at 0x80 bytes or when the values stop alternating 44 | let mut size = 0; 45 | while i < n && size < 0x80 && data[i] == (if size % 2 == 0 { v } else { byte }) { 46 | size += 1; 47 | i += 1; 48 | } 49 | output.push(size + 0x7f); 50 | output.push(v ^ byte); 51 | if size % 2 == 0 { 52 | v = byte; 53 | } 54 | } 55 | } 56 | 57 | match write(out_filename, &output[..]) { 58 | Ok(()) => Ok(runs), 59 | Err(err) => Err((out_filename, err)), 60 | } 61 | } 62 | 63 | fn main() { 64 | let mut argv_iter = args(); 65 | let program_name = argv_iter.next().expect("xor-compress"); 66 | let mut argv: Vec = argv_iter.collect(); 67 | 68 | let verbose = !argv.is_empty() && argv[0] == "-v"; 69 | if verbose { 70 | argv.remove(0); 71 | } 72 | 73 | if argv.len() < 2 { 74 | eprintln!("Usage: {} [-v] file... files.xor", program_name); 75 | exit(1); 76 | } 77 | 78 | let out_filename = argv.pop().unwrap(); 79 | match compress_files(&argv[..], &out_filename) { 80 | Ok(runs) => if verbose { 81 | println!("{}: {}: ld bc, ${:x}", program_name, out_filename, runs); 82 | }, 83 | Err((filename, err)) => { 84 | eprintln!("{}: {}: {}", program_name, filename, err); 85 | exit(err.raw_os_error().unwrap_or(1)); 86 | } 87 | } 88 | } 89 | --------------------------------------------------------------------------------