diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-06-02 21:26:20 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-06-02 21:26:20 -0400 |
commit | 04883f4bf9fa6c0bf935f1aac95d5d48abe3bb30 (patch) | |
tree | 3ff95e7bbb62d0decfb9e2cba9e3d54f61013706 | |
parent | 956d010d59ad225bea768aec172ccb56977b1775 (diff) | |
parent | 5fb7140613d6ea00ec1964fde18418c6257c2e27 (diff) |
Merge branch 'master' into build_more_roms
210 files changed, 13533 insertions, 1316 deletions
@@ -13,7 +13,7 @@ *.pic *.pcm *.map -pokegold-spaceworld.sym +poke*_spaceworld.sym shim.asm *~ @@ -23,5 +23,9 @@ shim.asm tools/scan_includes tools/pkmncompress tools/gfx +tools/*.pyc build/ .idea/ + +coverage.png +coverage.log @@ -22,6 +22,7 @@ BASEROM := baserom_$(BUILD_NAME).gb DIRS := home engine data audio OBJS := $(addprefix $(BUILD)/, gfx.o sram.o wram.o hram.o shim.o) SHIM := shim_$(BUILD_NAME).sym +CORRECTEDROMS := $(ROMS:%.gb=%-correctheader.gb) rwildcard = $(foreach d, $(wildcard $1*), $(filter $(subst *, %, $2), $d) $(call rwildcard, $d/, $2)) OBJS += $(patsubst %.asm, $(BUILD)/%.o, $(call rwildcard, $(DIRS), *.asm)) @@ -30,13 +31,13 @@ GFX := $(patsubst %.png, $(BUILD)/%.2bpp, \ $(patsubst %.1bpp.png, $(BUILD)/%.1bpp, \ $(patsubst gfx/pokemon/%/front.png, $(BUILD)/gfx/pokemon/%/front.pic, \ $(patsubst gfx/pokemon/%/back.png, $(BUILD)/gfx/pokemon/%/back.pic, \ - $(call rwildcard, gfx, *.png))))) + $(patsubst gfx/trainer/%.png, $(BUILD)/gfx/trainer/%.pic, \ + $(call rwildcard, gfx, *.png)))))) .SECONDEXPANSION: .PHONY: all -all: $(ROM) - +all: $(ROM) $(CORRECTEDROMS) coverage .PHONY: tools tools tools/pkmncompress tools/gfx: $(MAKE) -C tools/ @@ -44,13 +45,14 @@ tools tools/pkmncompress tools/gfx: # Remove files generated by the build process. .PHONY: clean clean: - rm -rf $(ROMS) $(BUILDBASE) $(ROMS:.gb=.sym) $(ROMS:.gb=.map) + rm -rf $(ROMS) $(BUILDBASE) $(ROMS:.gb=.sym) $(ROMS:.gb=.map) $(CORRECTEDROMS) make -C tools clean # Remove files except for graphics. .PHONY: mostlyclean mostlyclean: - rm -rf $(ROMS) $(OBJS) $(ROMS:.gb=.sym) $(ROMS:.gb=.map) + rm -rf $(ROMS) $(OBJS) $(ROMS:.gb=.sym) $(ROMS:.gb=.map) $(CORRECTEDROMS) + find . \( -iname '*.d' \) -exec rm {} + $(ROM): $(OBJS) $(RGBLINK) -d -n $(@:.gb=.sym) -m $(@:.gb=.map) -O $(BASEROM) -o $@ $^ @@ -59,6 +61,13 @@ $(ROM): $(OBJS) $(BUILD)/shim.asm: $(SHIM) | $$(dir $$@) tools/make_shim -w $< > $@ +$(CORRECTEDROMS): %-correctheader.gb: %.gb + cp $< $@ + $(RGBFIX) -f h -m 0x10 $@ + +.PHONY: coverage +coverage: $(ROMS) + $(PYTHON) tools/disasm_coverage.py -m $(ROM:.gb=.map) -b 0x40 $(BUILD)/gfx.o: | $(GFX) $(BUILD)/%.o: $(BUILD)/%.asm | $$(dir $$@) diff --git a/audio/engine.asm b/audio/engine.asm index 561d778..f7a9974 100644 --- a/audio/engine.asm +++ b/audio/engine.asm @@ -166,3 +166,6 @@ _PlayMusic:: ; 3a:4d66 jr nz, .loop xor a ; TODO + +SECTION "Song Header Pointers", ROMX[$52C7], BANK[$3A] +INCLUDE "audio/song_header_pointers.inc" diff --git a/audio/song_header_pointers.inc b/audio/song_header_pointers.inc new file mode 100644 index 0000000..231eba6 --- /dev/null +++ b/audio/song_header_pointers.inc @@ -0,0 +1,14 @@ +SongHeaderPointers: + dbw Bank(Song_None), Song_None + dbw Bank(Song_Title), Song_Title + dbw Bank(Song_Route1), Song_Route1 + dbw Bank(Song_OakIntro), Song_OakIntro + dbw Bank(Song_LeaderBattle), Song_LeaderBattle + dbw Bank(Song_TrainerBattle), Song_TrainerBattle + dbw Bank(Song_NidorinoIntro), Song_NidorinoIntro + dbw Bank(Song_ViridianCity), Song_ViridianCity + dbw Bank(Song_Heal), Song_Heal + dbw Bank(Song_Bicycle), Song_Bicycle + dbw Bank(Song_SpottedRocket), Song_SpottedRocket + dbw Bank(Song_VictoryTrainer), Song_VictoryTrainer + dbw Bank(Song_Evolution), Song_Evolution diff --git a/audio/songs/bicycle.asm b/audio/songs/bicycle.asm new file mode 100755 index 0000000..7c773fa --- /dev/null +++ b/audio/songs/bicycle.asm @@ -0,0 +1,724 @@ +INCLUDE "constants.asm" + +SECTION "Song Bicycle", ROMX[$563e], BANK[$3b] + +Song_Bicycle:: ; ed63e (3b:563e) + db 3 << 6 | 0 + dw Song_Bicycle_Ch0 + db 1 + dw Song_Bicycle_Ch1 + db 2 + dw Song_Bicycle_Ch2 + db 3 + dw Song_Bicycle_Ch3 + +Song_Bicycle_Ch0:: ; ed64a (3b:564a) + tempo 144 + volume 7, 7 + duty 3 + vibrato 8, 1, 4 + notetype 12, 11, 5 + octave 3 + G_ 2 + +Song_Bicycle_branch_ed659:: + octave 4 + C_ 4 + D_ 4 + E_ 2 + C_ 2 + E_ 2 + G_ 2 + G_ 2 + F_ 2 + E_ 2 + F_ 4 + E_ 2 + D_ 2 + F_ 4 + D_ 4 + octave 3 + B_ 2 + octave 4 + F_ 4 + D_ 4 + E_ 2 + F_ 2 + G_ 2 + C_ 2 + E_ 2 + C_ 2 + D_ 2 + E_ 2 + notetype 12, 11, 6 + F_ 10 + notetype 12, 10, 6 + F_ 2 + E_ 2 + F_ 2 + G_ 10 + E_ 2 + D_ 2 + E_ 2 + F_ 6 + toggleperfectpitch + rest 1 + rest 2 + notetype 12, 11, 3 + E_ 2 + D_ 2 + D_ 1 + E_ 1 + F_ 2 + E_ 1 + F_ 1 + toggleperfectpitch + rest 1 + rest 2 + notetype 12, 11, 5 + G_ 6 + G_ 6 + A_ 2 + F_ 2 + G_ 6 + notetype 12, 11, 4 + G_ 2 + F_ 4 + notetype 12, 10, 4 + E_ 2 + D_ 2 + notetype 12, 9, 3 + octave 3 + A_ 2 + octave 4 + C_ 4 + C_ 2 + octave 3 + B_ 2 + A_ 1 + B_ 1 + A_ 2 + B_ 2 + octave 4 + C_ 2 + C_ 4 + C_ 2 + octave 3 + A_ 2 + B_ 2 + B_ 2 + A_ 2 + octave 4 + C_ 4 + octave 3 + A_ 2 + B_ 1 + octave 4 + C_ 1 + octave 3 + B_ 2 + octave 4 + D_ 4 + octave 3 + B_ 2 + octave 4 + C_ 4 + octave 3 + B_ 1 + octave 4 + C_ 1 + D_ 1 + octave 3 + B_ 1 + octave 4 + C_ 4 + notetype 12, 3, 13 + C_ 4 + notetype 12, 11, 4 + F_ 6 + G_ 4 + F_ 1 + G_ 1 + F_ 4 + E_ 6 + F_ 2 + E_ 2 + D_ 1 + E_ 1 + D_ 2 + C_ 2 + notetype 12, 11, 5 + octave 3 + A_ 4 + octave 4 + D_ 4 + octave 3 + B_ 4 + octave 4 + E_ 4 + C_ 4 + F_ 4 + D_ 4 + F# 4 + vibrato 10, 2, 6 + notetype 12, 8, 0 + G_ 16 + G_ 4 + notetype 12, 8, 7 + G_ 12 + notetype 12, 11, 5 + vibrato 8, 1, 4 + loopchannel 0, Song_Bicycle_branch_ed659 + + +Song_Bicycle_Ch1:: ; ed70d (3b:570d) + duty 2 + vibrato 6, 1, 5 + notetype 12, 12, 3 + octave 4 + C_ 2 + +Song_Bicycle_branch_ed717:: + E_ 4 + F_ 4 + G_ 4 + octave 5 + C_ 4 + octave 4 + B_ 6 + A_ 1 + B_ 1 + A_ 10 + F_ 2 + G_ 2 + A_ 2 + octave 5 + D_ 2 + C_ 2 + octave 4 + B_ 2 + A_ 1 + B_ 1 + octave 5 + C_ 6 + octave 4 + A_ 2 + G_ 4 + duty 3 + notetype 12, 8, 4 + A# 6 + duty 2 + notetype 12, 12, 5 + octave 5 + C_ 2 + octave 4 + B_ 2 + octave 5 + C_ 2 + octave 4 + A_ 10 + octave 5 + C_ 2 + octave 4 + B_ 2 + octave 5 + C_ 2 + octave 4 + G_ 10 + notetype 12, 12, 3 + octave 5 + C_ 4 + E_ 2 + D_ 2 + C_ 2 + octave 4 + B_ 2 + octave 5 + C_ 2 + notetype 12, 11, 0 + D_ 4 + notetype 12, 12, 7 + D_ 10 + D_ 1 + C_ 1 + notetype 12, 11, 0 + octave 4 + B_ 4 + notetype 12, 12, 7 + B_ 12 + notetype 12, 12, 4 + F_ 6 + F_ 2 + G_ 2 + F_ 2 + E_ 2 + D_ 2 + E_ 6 + E_ 2 + F_ 2 + E_ 2 + D_ 2 + C_ 2 + F_ 2 + E_ 2 + D_ 2 + F_ 2 + G_ 4 + A_ 2 + F_ 2 + E_ 2 + G_ 4 + F_ 2 + E_ 6 + notetype 6, 12, 2 + F_ 1 + G_ 1 + A_ 1 + B_ 1 + notetype 12, 12, 3 + octave 5 + C_ 2 + octave 4 + B_ 2 + A_ 2 + octave 5 + C_ 2 + octave 4 + B_ 4 + A_ 4 + G_ 2 + A# 4 + A_ 2 + G_ 4 + F_ 2 + E_ 2 + notetype 8, 12, 4 + A_ 4 + G_ 4 + F_ 4 + B_ 4 + A_ 4 + G_ 4 + octave 5 + C_ 4 + octave 4 + B_ 4 + A_ 4 + octave 5 + D_ 4 + E_ 4 + C_ 4 + notetype 12, 12, 7 + D_ 12 + C_ 4 + notetype 12, 11, 0 + octave 4 + B_ 4 + notetype 12, 12, 7 + B_ 12 + notetype 12, 12, 3 + loopchannel 0, Song_Bicycle_branch_ed717 + + +Song_Bicycle_Ch2:: ; ed7c5 (3b:57c5) + notetype 12, 1, 3 + rest 2 + +Song_Bicycle_branch_ed7c9:: + octave 4 + C_ 1 + rest 1 + E_ 1 + rest 1 + octave 3 + G_ 1 + rest 1 + octave 4 + E_ 1 + rest 1 + C_ 1 + rest 1 + E_ 1 + rest 1 + C_ 1 + rest 1 + G_ 1 + rest 1 + F_ 1 + rest 1 + A_ 1 + rest 1 + C_ 1 + rest 1 + A_ 1 + rest 1 + F_ 1 + rest 1 + A_ 1 + rest 1 + E_ 1 + rest 1 + A_ 1 + rest 1 + D_ 1 + rest 1 + F_ 1 + rest 1 + octave 3 + A_ 1 + rest 1 + octave 4 + F_ 1 + rest 1 + D_ 1 + rest 1 + F_ 1 + rest 1 + E_ 1 + rest 1 + F_ 1 + rest 1 + E_ 1 + rest 1 + G_ 1 + rest 1 + C_ 1 + rest 1 + G_ 1 + rest 1 + E_ 1 + rest 1 + G_ 1 + rest 1 + E_ 1 + rest 1 + G_ 1 + rest 1 + F_ 1 + rest 1 + A_ 1 + rest 1 + C_ 1 + rest 1 + A_ 1 + rest 1 + F_ 1 + rest 1 + G_ 1 + rest 1 + A_ 1 + rest 1 + G_ 1 + rest 1 + E_ 1 + rest 1 + G_ 1 + rest 1 + C_ 1 + rest 1 + G_ 1 + rest 1 + E_ 1 + rest 1 + G_ 1 + rest 1 + E_ 1 + rest 1 + G_ 1 + rest 1 + D_ 1 + rest 1 + F_ 1 + rest 1 + octave 3 + A_ 1 + rest 1 + octave 4 + F_ 1 + rest 1 + D_ 1 + rest 1 + F_ 1 + rest 1 + D_ 1 + rest 1 + F_ 1 + rest 1 + G_ 1 + rest 1 + C_ 1 + rest 1 + D_ 1 + rest 1 + G_ 1 + rest 1 + D_ 1 + rest 1 + G_ 1 + rest 1 + D_ 1 + rest 1 + G_ 1 + rest 1 + D_ 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + D_ 1 + rest 1 + G_ 1 + rest 1 + D_ 1 + rest 1 + G_ 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + G_ 1 + rest 1 + D_ 1 + rest 1 + F_ 1 + rest 1 + octave 3 + A_ 1 + rest 1 + octave 4 + F_ 1 + rest 1 + D_ 1 + rest 1 + F_ 1 + rest 1 + D_ 1 + rest 1 + F_ 1 + rest 1 + E_ 1 + rest 1 + G_ 1 + rest 1 + C_ 1 + rest 1 + G_ 1 + rest 1 + E_ 1 + rest 1 + G_ 1 + rest 1 + E_ 1 + rest 1 + G_ 1 + rest 1 + D_ 1 + rest 1 + F_ 1 + rest 1 + octave 3 + A_ 1 + rest 1 + octave 4 + F_ 1 + rest 1 + F_ 1 + rest 1 + E_ 1 + rest 1 + D_ 1 + rest 1 + F_ 1 + rest 1 + E_ 1 + rest 1 + C_ 1 + rest 1 + G_ 1 + rest 1 + C_ 1 + rest 1 + E_ 1 + rest 1 + G_ 1 + rest 1 + E_ 1 + rest 1 + G_ 1 + rest 1 + F_ 1 + rest 1 + A_ 1 + rest 1 + C_ 1 + rest 1 + A_ 1 + rest 1 + F_ 1 + rest 1 + A_ 1 + rest 1 + A_ 1 + rest 1 + F_ 1 + rest 1 + G_ 1 + rest 1 + A# 1 + rest 1 + E_ 1 + rest 1 + A# 1 + rest 1 + G_ 1 + rest 1 + A# 1 + rest 1 + A# 1 + rest 1 + G_ 1 + rest 1 + F_ 1 + rest 1 + D_ 1 + rest 1 + F_ 1 + rest 1 + A_ 1 + rest 1 + G_ 1 + rest 1 + E_ 1 + rest 1 + G_ 1 + rest 1 + B_ 1 + rest 1 + A_ 1 + rest 1 + F_ 1 + rest 1 + A_ 1 + rest 1 + octave 5 + C_ 1 + rest 1 + octave 4 + B_ 1 + rest 1 + A_ 1 + rest 1 + octave 5 + C_ 1 + rest 1 + octave 4 + A_ 1 + rest 1 + G_ 1 + rest 1 + octave 5 + C_ 1 + rest 1 + octave 4 + G_ 1 + rest 1 + octave 5 + C_ 1 + rest 1 + octave 4 + G_ 1 + rest 1 + octave 5 + C_ 1 + rest 1 + octave 4 + G_ 1 + rest 1 + octave 5 + C_ 1 + rest 1 + octave 4 + G_ 1 + rest 1 + B_ 1 + rest 1 + G_ 1 + rest 1 + B_ 1 + rest 1 + F_ 1 + rest 1 + A_ 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F_ 1 + rest 1 + loopchannel 0, Song_Bicycle_branch_ed7c9 + + +Song_Bicycle_Ch3:: ; ed91a (3b:591a) + drumset 1 + dspeed 12 + rest 2 + +Song_Bicycle_branch_ed91f:: + callchannel Song_Bicycle_branch_ed95c + callchannel Song_Bicycle_branch_ed965 + callchannel Song_Bicycle_branch_ed95c + callchannel Song_Bicycle_branch_ed96e + callchannel Song_Bicycle_branch_ed965 + callchannel Song_Bicycle_branch_ed965 + callchannel Song_Bicycle_branch_ed95c + callchannel Song_Bicycle_branch_ed95c + callchannel Song_Bicycle_branch_ed95c + callchannel Song_Bicycle_branch_ed95c + callchannel Song_Bicycle_branch_ed965 + callchannel Song_Bicycle_branch_ed95c + callchannel Song_Bicycle_branch_ed96e + callchannel Song_Bicycle_branch_ed95c + callchannel Song_Bicycle_branch_ed965 + callchannel Song_Bicycle_branch_ed95c + callchannel Song_Bicycle_branch_ed95c + callchannel Song_Bicycle_branch_ed95c + callchannel Song_Bicycle_branch_ed95c + loopchannel 0, Song_Bicycle_branch_ed91f + +Song_Bicycle_branch_ed95c:: + rest 2 + snare7 2 + rest 2 + snare7 2 + rest 2 + snare7 2 + rest 2 + snare7 2 + endchannel + +Song_Bicycle_branch_ed965:: + rest 2 + snare7 2 + rest 2 + snare7 2 + rest 2 + snare7 2 + snare7 2 + snare7 2 + endchannel + +Song_Bicycle_branch_ed96e:: + rest 2 + snare7 2 + rest 2 + snare7 2 + rest 2 + snare7 2 + rest 2 + snare7 1 + snare7 1 + endchannel +; 0xed978 diff --git a/audio/songs/evolution.asm b/audio/songs/evolution.asm new file mode 100755 index 0000000..98bfc0e --- /dev/null +++ b/audio/songs/evolution.asm @@ -0,0 +1,126 @@ +INCLUDE "constants.asm" + +SECTION "Song Evolution", ROMX[$5b1c], BANK[$3b] + +Song_Evolution:: ; edb1c (3b:5b1c) + db 2 << 6 | 0 + dw Song_Evolution_Ch0 + db 1 + dw Song_Evolution_Ch1 + db 2 + dw Song_Evolution_Ch2 + +Song_Evolution_Ch0:: ; edb25 (3b:5b25) + tempo 132 + volume 7, 7 + vibrato 6, 3, 4 + toggleperfectpitch + rest 1 + rest 2 + duty 2 + notetype 12, 9, 2 + octave 3 + pitchbend 0, 74 + C_ 1 + pitchbend 0, 74 + G_ 1 + pitchbend 0, 74 + C_ 1 + pitchbend 0, 74 + G_ 1 + rest 4 + duty 3 + +Song_Evolution_branch_edb49:: + callchannel Song_Evolution_branch_edb5b + notetype 12, 10, 4 + F# 4 + callchannel Song_Evolution_branch_edb5b + notetype 12, 10, 4 + F# 4 + loopchannel 0, Song_Evolution_branch_edb49 + +Song_Evolution_branch_edb5b:: + notetype 12, 10, 2 + octave 3 + C_ 4 + G_ 4 + C_ 4 + G_ 4 + C_ 4 + G_ 4 + C_ 4 + endchannel + + +Song_Evolution_Ch1:: ; edb67 (3b:5b67) + duty 2 + vibrato 8, 2, 5 + notetype 12, 10, 2 + octave 4 + G_ 1 + D_ 1 + G_ 1 + D_ 1 + rest 4 + duty 3 + +Song_Evolution_branch_edb77:: + callchannel Song_Evolution_branch_edb89 + notetype 12, 11, 5 + A_ 4 + callchannel Song_Evolution_branch_edb89 + notetype 12, 11, 5 + B_ 4 + loopchannel 0, Song_Evolution_branch_edb77 + +Song_Evolution_branch_edb89:: + notetype 12, 11, 2 + octave 3 + G_ 4 + D_ 4 + G_ 4 + D_ 4 + G_ 4 + D_ 4 + G_ 4 + endchannel + + +Song_Evolution_Ch2:: ; edb95 (3b:5b95) + notetype 12, 1, 0 + rest 8 + +Song_Evolution_branch_edb99:: + callchannel Song_Evolution_branch_edba7 + octave 4 + A_ 4 + callchannel Song_Evolution_branch_edba7 + octave 4 + B_ 4 + loopchannel 0, Song_Evolution_branch_edb99 + +Song_Evolution_branch_edba7:: + octave 3 + A_ 2 + rest 2 + octave 4 + D_ 2 + rest 2 + octave 3 + A_ 2 + rest 2 + octave 4 + D_ 2 + rest 2 + octave 3 + A_ 2 + rest 2 + octave 4 + D_ 2 + rest 2 + octave 3 + A_ 2 + rest 2 + endchannel +; 0xedbbd diff --git a/audio/songs/heal.asm b/audio/songs/heal.asm new file mode 100755 index 0000000..9ea7368 --- /dev/null +++ b/audio/songs/heal.asm @@ -0,0 +1,62 @@ +INCLUDE "constants.asm" + +SECTION "Song Heal", ROMX[$55f4], BANK[$3b] + +Song_Heal:: ; ed5f4 (3b:55f4) + db 2 << 6 | 0 + dw Song_Heal_Ch0 + db 1 + dw Song_Heal_Ch1 + db 2 + dw Song_Heal_Ch2 + +Song_Heal_Ch0:: ; ed5fd (3b:55fd) + tempo 144 + volume 7, 7 + duty 2 + toggleperfectpitch + rest 1 + rest 2 + notetype 12, 8, 1 + rest 2 + pitchbend 0, 64 + B_ 2 + pitchbend 0, 85 + B_ 2 + pitchbend 0, 69 + E_ 2 + rest 4 + pitchbend 0, 48 + E_ 4 + pitchbend 0, 64 + B_ 4 + endchannel + + +Song_Heal_Ch1:: ; ed621 (3b:5621) + duty 2 + notetype 12, 12, 3 + octave 4 + B_ 4 + B_ 4 + B_ 2 + G# 2 + notetype 12, 12, 4 + octave 5 + E_ 8 + endchannel + + +Song_Heal_Ch2:: ; ed631 (3b:5631) + notetype 12, 1, 0 + octave 4 + E_ 2 + rest 2 + E_ 2 + rest 2 + E_ 2 + G# 2 + E_ 6 + rest 2 + endchannel +; 0xed63e diff --git a/audio/songs/leaderbattle.asm b/audio/songs/leaderbattle.asm new file mode 100755 index 0000000..e013759 --- /dev/null +++ b/audio/songs/leaderbattle.asm @@ -0,0 +1,1415 @@ +INCLUDE "constants.asm" + +SECTION "Song LeaderBattle", ROMX[$4858], BANK[$3b] + +Song_LeaderBattle:: ; ec858 (3b:4858) + db 2 << 6 | 0 + dw Song_LeaderBattle_Ch0 + db 1 + dw Song_LeaderBattle_Ch1 + db 2 + dw Song_LeaderBattle_Ch2 + +Song_LeaderBattle_Ch0:: ; ec861 (3b:4861) + tempo 104 + volume 7, 7 + duty 3 + vibrato 8, 3, 4 + toggleperfectpitch + rest 1 + rest 2 + notetype 12, 11, 3 + rest 6 + octave 3 + F# 1 + F_ 1 + E_ 1 + F_ 1 + E_ 1 + D# 1 + E_ 1 + D# 1 + D_ 1 + D# 1 + D_ 1 + C# 1 + D_ 1 + C# 1 + C_ 1 + C# 1 + C_ 1 + octave 2 + B_ 1 + octave 1 + G# 1 + A_ 1 + A# 1 + A_ 1 + A# 1 + B_ 1 + A# 1 + B_ 1 + octave 2 + F# 1 + rest 15 + F# 1 + rest 9 + G_ 6 + F# 1 + rest 15 + F# 1 + rest 9 + F_ 6 + F# 1 + rest 15 + F# 1 + rest 9 + G_ 6 + F# 1 + rest 15 + F# 1 + rest 9 + A_ 6 + +Song_LeaderBattle_branch_ec8a4:: + F# 1 + octave 3 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + octave 2 + E_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + F# 1 + octave 3 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + C# 1 + octave 2 + E_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + octave 3 + C# 1 + octave 2 + B_ 1 + A_ 1 + rest 2 + octave 1 + B_ 1 + rest 1 + octave 2 + D_ 4 + octave 1 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 2 + E_ 4 + octave 1 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 2 + D_ 4 + octave 1 + B_ 1 + rest 1 + octave 2 + C# 2 + octave 1 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 2 + D_ 4 + octave 1 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 2 + E_ 4 + octave 1 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 2 + D_ 4 + octave 1 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 2 + C# 2 + octave 1 + B_ 2 + A_ 2 + octave 2 + C# 2 + octave 1 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + rest 16 + octave 1 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A_ 1 + B_ 1 + octave 1 + A_ 1 + rest 1 + A_ 1 + rest 1 + notetype 12, 11, 5 + octave 3 + C# 12 + notetype 12, 11, 3 + octave 1 + A_ 1 + rest 1 + A_ 1 + rest 1 + notetype 12, 11, 5 + octave 3 + A_ 12 + notetype 12, 11, 3 + D# 4 + C# 4 + D# 4 + E_ 2 + F# 4 + octave 2 + B_ 2 + octave 3 + C# 2 + F# 2 + B_ 2 + F# 2 + D# 2 + F# 2 + octave 1 + A_ 1 + rest 1 + A_ 1 + rest 1 + notetype 12, 11, 5 + octave 3 + A_ 12 + notetype 12, 11, 3 + C# 1 + octave 2 + B_ 1 + octave 3 + C# 1 + D# 1 + E_ 1 + D# 1 + E_ 1 + F# 1 + A_ 1 + G# 1 + F# 1 + E_ 1 + F# 1 + E_ 1 + D# 1 + C# 1 + notetype 12, 11, 5 + D# 4 + E_ 4 + C# 2 + D# 6 + F# 4 + E_ 2 + D# 4 + C# 6 + rest 16 + rest 10 + E_ 6 + D# 4 + E_ 4 + C# 2 + D# 6 + E_ 4 + D# 2 + C# 4 + octave 2 + B_ 6 + octave 3 + D# 4 + E_ 4 + C# 2 + D# 6 + F# 4 + A_ 2 + G# 4 + E_ 6 + loopchannel 0, Song_LeaderBattle_branch_ec8a4 + + +Song_LeaderBattle_Ch1:: ; eca9c (3b:4a9c) + duty 3 + vibrato 8, 2, 5 + notetype 12, 12, 3 + octave 4 + F_ 1 + E_ 1 + D# 1 + E_ 1 + D# 1 + D_ 1 + D# 1 + D_ 1 + C# 1 + D_ 1 + C# 1 + C_ 1 + octave 3 + B_ 1 + rest 5 + F# 1 + F_ 1 + E_ 1 + F_ 1 + E_ 1 + D# 1 + E_ 1 + D# 1 + D_ 1 + D# 1 + D_ 1 + C# 1 + D_ 1 + C# 1 + B_ 1 + rest 15 + B_ 1 + rest 9 + octave 4 + C_ 6 + octave 3 + B_ 1 + rest 15 + B_ 1 + rest 9 + A# 6 + octave 3 + B_ 1 + rest 15 + B_ 1 + rest 9 + octave 4 + C_ 6 + octave 3 + B_ 1 + rest 15 + B_ 1 + rest 9 + octave 4 + C# 6 + +Song_LeaderBattle_branch_ecadc:: + notetype 12, 12, 5 + D# 4 + C# 4 + D# 4 + E_ 2 + F# 4 + E_ 4 + D# 2 + C# 2 + octave 3 + B_ 2 + octave 4 + C# 2 + D# 2 + notetype 12, 11, 7 + duty 2 + octave 3 + A_ 8 + octave 4 + C# 8 + E_ 8 + C# 8 + notetype 12, 12, 5 + duty 3 + D# 4 + C# 4 + D# 4 + E_ 2 + F# 4 + E_ 4 + D# 2 + C# 2 + octave 3 + B_ 2 + octave 4 + C# 2 + D# 2 + notetype 12, 11, 7 + duty 2 + C# 8 + octave 3 + B_ 8 + A_ 8 + notetype 12, 12, 3 + octave 4 + E_ 4 + E_ 2 + C# 2 + notetype 12, 12, 5 + duty 3 + octave 1 + B_ 1 + rest 3 + octave 3 + D_ 1 + C# 1 + octave 2 + B_ 1 + octave 3 + D_ 1 + rest 4 + E_ 1 + D_ 1 + octave 2 + B_ 1 + octave 3 + E_ 1 + rest 4 + F# 1 + E_ 1 + C# 1 + F# 1 + rest 2 + E_ 1 + C# 1 + E_ 1 + rest 1 + F_ 1 + rest 1 + D_ 1 + C# 1 + octave 2 + B_ 1 + octave 3 + D_ 1 + rest 4 + E_ 1 + D_ 1 + octave 2 + B_ 1 + octave 3 + E_ 1 + rest 4 + F# 1 + E_ 1 + C# 1 + F# 1 + E_ 1 + rest 1 + C# 1 + rest 1 + D_ 1 + rest 1 + C# 1 + rest 1 + F# 1 + rest 1 + E_ 1 + rest 1 + octave 1 + B_ 1 + rest 1 + B_ 1 + rest 1 + notetype 12, 11, 0 + octave 3 + B_ 4 + octave 4 + C_ 4 + octave 3 + A_ 4 + B_ 4 + octave 4 + C_ 4 + octave 3 + A_ 4 + G_ 4 + notetype 12, 11, 0 + F# 8 + notetype 12, 11, 7 + F# 8 + notetype 12, 12, 3 + C_ 1 + C# 1 + D_ 1 + D# 1 + E_ 1 + D# 1 + D_ 1 + C# 1 + C_ 1 + octave 2 + B_ 1 + A_ 1 + G_ 1 + F# 1 + F_ 1 + E_ 1 + F_ 1 + F# 1 + G_ 1 + A_ 1 + B_ 1 + notetype 12, 11, 0 + octave 3 + B_ 4 + octave 4 + C_ 4 + octave 3 + A_ 4 + B_ 4 + octave 4 + C_ 4 + octave 3 + A_ 4 + octave 4 + C_ 4 + notetype 12, 11, 0 + octave 3 + B_ 16 + notetype 12, 3, 15 + octave 4 + F# 16 + notetype 12, 12, 3 + duty 3 + octave 1 + A_ 1 + rest 1 + A_ 1 + rest 1 + notetype 12, 12, 7 + octave 3 + A_ 12 + notetype 12, 12, 3 + octave 1 + A_ 1 + rest 1 + A_ 1 + rest 1 + notetype 12, 12, 7 + octave 4 + C# 12 + notetype 12, 11, 0 + D# 16 + notetype 12, 11, 7 + D# 16 + notetype 12, 12, 3 + octave 1 + A_ 1 + rest 1 + A_ 1 + rest 1 + notetype 12, 12, 7 + octave 4 + C# 12 + notetype 12, 12, 0 + A_ 8 + E_ 8 + B_ 16 + notetype 12, 12, 7 + B_ 16 + notetype 12, 12, 4 + octave 3 + D# 4 + E_ 4 + C# 2 + D# 6 + F# 4 + A_ 2 + G# 4 + rest 2 + B_ 1 + octave 4 + D# 1 + F# 1 + A# 1 + notetype 12, 12, 0 + B_ 16 + F# 16 + A_ 16 + octave 5 + C# 8 + rest 2 + notetype 12, 12, 3 + octave 4 + A_ 6 + loopchannel 0, Song_LeaderBattle_branch_ecadc + + +Song_LeaderBattle_Ch2:: ; ecc05 (3b:4c05) + vibrato 0, 2, 0 + notetype 12, 1, 3 + rest 12 + octave 3 + B_ 1 + octave 4 + C_ 1 + C# 1 + C_ 1 + C# 1 + D_ 1 + C# 1 + D_ 1 + D# 1 + D_ 1 + D# 1 + E_ 1 + D# 1 + E_ 1 + F_ 1 + E_ 1 + F_ 1 + F# 1 + F_ 1 + F# 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + C_ 6 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F_ 6 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + C_ 6 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + F# 1 + rest 1 + octave 3 + B_ 1 + rest 1 + octave 4 + C# 6 + notetype 12, 1, 4 + +Song_LeaderBattle_branch_eccc9:: + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 4 + D_ 4 + octave 3 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 4 + E_ 4 + octave 3 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 4 + D_ 4 + octave 3 + B_ 1 + rest 1 + octave 4 + C# 2 + octave 3 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 4 + D_ 4 + octave 3 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 4 + E_ 4 + octave 3 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 4 + D_ 4 + octave 3 + B_ 1 + rest 1 + B_ 1 + rest 1 + octave 4 + C# 2 + octave 3 + B_ 2 + A_ 2 + octave 4 + C# 2 + octave 3 + B_ 1 + rest 1 + B_ 1 + rest 13 + B_ 1 + rest 1 + B_ 1 + rest 13 + B_ 1 + rest 1 + B_ 1 + rest 13 + B_ 1 + rest 1 + B_ 1 + rest 13 + B_ 1 + rest 1 + B_ 1 + rest 13 + B_ 1 + rest 1 + B_ 1 + rest 13 + B_ 1 + rest 1 + B_ 1 + rest 13 + B_ 1 + rest 1 + B_ 1 + rest 13 + A_ 1 + rest 1 + A_ 1 + rest 1 + octave 4 + C# 12 + octave 3 + A_ 1 + rest 1 + A_ 1 + rest 1 + octave 4 + E_ 12 + D# 16 + octave 3 + B_ 16 + A_ 1 + rest 1 + A_ 1 + rest 1 + octave 4 + E_ 12 + C# 8 + E_ 8 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + E_ 6 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + G_ 6 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + C_ 6 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + F# 2 + octave 3 + B_ 2 + octave 4 + G_ 6 + loopchannel 0, Song_LeaderBattle_branch_eccc9 +; 0xece31 diff --git a/audio/songs/nidorinointro.asm b/audio/songs/nidorinointro.asm new file mode 100755 index 0000000..2124bc1 --- /dev/null +++ b/audio/songs/nidorinointro.asm @@ -0,0 +1,347 @@ +INCLUDE "constants.asm" + +SECTION "Song NidorinoIntro", ROMX[$4000], BANK[$3b] + +Song_NidorinoIntro:: ; ec000 (3b:4000) + db 3 << 6 | 0 + dw Song_NidorinoIntro_Ch0 + db 1 + dw Song_NidorinoIntro_Ch1 + db 2 + dw Song_NidorinoIntro_Ch2 + db 3 + dw Song_NidorinoIntro_Ch3 + +Song_NidorinoIntro_Ch0:: ; ec00c (3b:400c) + tempo 102 + volume 7, 7 + duty 3 + vibrato 6, 3, 4 + toggleperfectpitch + rest 1 + rest 2 + notetype 12, 11, 1 + rest 8 + octave 2 + A_ 2 + A_ 2 + notetype 12, 11, 4 + octave 3 + D_ 4 + notetype 12, 11, 1 + octave 2 + A_ 2 + A_ 2 + notetype 12, 11, 4 + octave 3 + D# 4 + notetype 12, 11, 1 + octave 2 + A_ 2 + A_ 2 + notetype 12, 11, 4 + octave 3 + D_ 4 + notetype 12, 11, 1 + octave 2 + A_ 2 + A_ 2 + notetype 12, 10, 0 + A# 4 + notetype 12, 11, 1 + A_ 2 + A_ 2 + notetype 12, 11, 4 + octave 3 + D_ 4 + notetype 12, 11, 1 + octave 2 + A_ 2 + A_ 2 + notetype 12, 2, 9 + octave 3 + G_ 4 + notetype 12, 11, 0 + A_ 8 + octave 2 + A_ 8 + notetype 12, 11, 7 + octave 3 + F_ 8 + notetype 12, 4, 15 + octave 2 + F_ 8 + notetype 12, 11, 1 + A_ 2 + A_ 2 + notetype 12, 11, 4 + octave 3 + D_ 4 + notetype 12, 11, 1 + octave 2 + A_ 2 + A_ 2 + notetype 12, 11, 4 + octave 3 + D# 4 + notetype 12, 11, 1 + octave 2 + A_ 2 + A_ 2 + notetype 12, 11, 4 + octave 3 + F_ 4 + notetype 12, 11, 1 + octave 2 + A_ 2 + A_ 2 + notetype 12, 11, 4 + octave 3 + G_ 4 + notetype 12, 11, 0 + F# 16 + notetype 12, 11, 1 + octave 4 + D_ 16 + endchannel + + +Song_NidorinoIntro_Ch1:: ; ec09f (3b:409f) + duty 3 + vibrato 8, 2, 5 + notetype 12, 12, 2 + rest 8 + octave 3 + D_ 2 + D_ 2 + notetype 12, 12, 5 + A_ 4 + notetype 12, 12, 2 + D_ 2 + D_ 2 + notetype 12, 12, 5 + A# 4 + notetype 12, 12, 2 + D_ 2 + D_ 2 + notetype 12, 12, 5 + A_ 4 + notetype 12, 12, 2 + D_ 2 + D_ 2 + notetype 12, 11, 7 + C# 4 + notetype 12, 12, 2 + D_ 2 + D_ 2 + notetype 12, 12, 5 + A_ 4 + notetype 12, 12, 2 + octave 3 + D_ 2 + D_ 2 + notetype 12, 12, 7 + octave 4 + C# 4 + D_ 8 + octave 3 + D_ 8 + octave 4 + C_ 8 + octave 3 + C_ 8 + notetype 12, 12, 2 + D_ 2 + D_ 2 + notetype 12, 12, 5 + A_ 4 + notetype 12, 12, 2 + D_ 2 + D_ 2 + notetype 12, 12, 5 + A# 4 + notetype 12, 12, 2 + D_ 2 + D_ 2 + notetype 12, 12, 5 + octave 4 + C_ 4 + notetype 12, 12, 2 + octave 3 + D_ 2 + D_ 2 + notetype 12, 12, 5 + octave 4 + C# 4 + notetype 12, 2, 15 + D_ 16 + notetype 12, 12, 1 + octave 5 + D_ 16 + endchannel + + +Song_NidorinoIntro_Ch2:: ; ec116 (3b:4116) + notetype 12, 1, 0 + rest 8 + octave 4 + D_ 1 + rest 1 + D_ 1 + rest 1 + A_ 4 + D_ 1 + rest 1 + D_ 1 + rest 1 + A_ 4 + D_ 1 + rest 1 + D_ 1 + rest 1 + A_ 4 + D_ 1 + rest 1 + D_ 1 + rest 1 + F# 4 + D_ 1 + rest 1 + D_ 1 + rest 1 + A_ 4 + D_ 1 + rest 1 + D_ 1 + rest 1 + A# 4 + A_ 8 + D_ 8 + A# 8 + D_ 8 + D_ 1 + rest 1 + D_ 1 + rest 1 + A_ 4 + D_ 1 + rest 1 + D_ 1 + rest 1 + A_ 4 + D_ 1 + rest 1 + D_ 1 + rest 1 + A# 4 + D_ 1 + rest 1 + D_ 1 + rest 1 + A# 4 + A_ 16 + D_ 1 + rest 15 + endchannel + + +Song_NidorinoIntro_Ch3:: ; ec155 (3b:4155) + drumset 2 + dspeed 6 + snare4 1 + snare4 1 + snare4 1 + snare4 1 + snare3 1 + snare4 1 + snare3 1 + snare4 1 + snare3 1 + snare4 1 + snare3 1 + snare3 1 + snare3 1 + snare3 1 + snare2 1 + snare2 1 + snare2 4 + snare2 4 + snare4 1 + snare4 1 + snare4 1 + snare4 1 + snare3 1 + snare3 1 + snare3 1 + snare3 1 + snare2 4 + snare2 4 + snare2 8 + snare2 4 + snare2 4 + snare2 8 + snare2 4 + snare2 4 + snare4 1 + snare4 1 + snare4 1 + snare4 1 + snare3 1 + snare3 1 + snare3 1 + snare3 1 + snare2 4 + snare2 4 + snare2 8 + snare2 4 + snare2 4 + snare2 4 + snare4 1 + snare4 1 + snare3 1 + snare3 1 + snare2 16 + snare2 16 + snare2 16 + snare4 1 + snare4 1 + snare4 1 + snare4 1 + snare3 1 + snare4 1 + snare3 1 + snare4 1 + snare3 1 + snare3 1 + snare3 1 + snare3 1 + snare2 1 + snare2 1 + snare2 1 + snare2 1 + snare2 4 + snare2 4 + snare2 8 + snare2 4 + snare2 4 + snare4 1 + snare4 1 + snare4 1 + snare4 1 + snare3 1 + snare3 1 + snare3 1 + snare3 1 + snare2 4 + snare2 4 + snare2 8 + snare2 4 + snare2 8 + snare2 4 + snare2 16 + snare2 16 + snare2 2 + rest 16 + rest 14 + endchannel +; 0xec1b9 diff --git a/audio/songs/none.asm b/audio/songs/none.asm new file mode 100755 index 0000000..746a1c9 --- /dev/null +++ b/audio/songs/none.asm @@ -0,0 +1,20 @@ +INCLUDE "constants.asm" + +SECTION "Song None", ROMX[$52ee], BANK[$3a] + +Song_None:: ; e92ee (3a:52ee) + db 3 << 6 | 0 + dw Song_None_Ch0 + db 1 + dw Song_None_Ch1 + db 2 + dw Song_None_Ch2 + db 3 + dw Song_None_Ch3 + +Song_None_Ch0:: ; e92fa (3a:52fa) +Song_None_Ch1:: ; e92fa (3a:52fa) +Song_None_Ch2:: ; e92fa (3a:52fa) +Song_None_Ch3:: ; e92fa (3a:52fa) + endchannel +; 0xe92fb diff --git a/audio/songs/oakintro.asm b/audio/songs/oakintro.asm new file mode 100755 index 0000000..e6d6bb4 --- /dev/null +++ b/audio/songs/oakintro.asm @@ -0,0 +1,445 @@ +INCLUDE "constants.asm" + +SECTION "Song OakIntro", ROMX[$4685], BANK[$3b] + +Song_OakIntro:: ; ec685 (3b:4685) + db 3 << 6 | 0 + dw Song_OakIntro_Ch0 + db 1 + dw Song_OakIntro_Ch1 + db 2 + dw Song_OakIntro_Ch2 + db 3 + dw Song_OakIntro_Ch3 + +Song_OakIntro_Ch0:: ; ec691 (3b:4691) + tempo 152 + volume 7, 7 + vibrato 9, 2, 5 + duty 1 + +Song_OakIntro_branch_ec69b:: + notetype 12, 11, 2 + octave 2 + B_ 4 + octave 3 + G# 6 + F# 2 + E_ 2 + D# 1 + F# 1 + E_ 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + A_ 2 + G# 4 + F# 4 + octave 2 + B_ 4 + octave 3 + G# 6 + F# 2 + E_ 2 + D# 1 + F# 1 + B_ 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + A_ 2 + G# 4 + B_ 4 + notetype 8, 11, 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + E_ 2 + octave 3 + A_ 2 + octave 4 + E_ 2 + D# 2 + octave 3 + G# 2 + octave 4 + D# 2 + D# 2 + octave 3 + G# 2 + octave 4 + D# 2 + C# 2 + octave 3 + F# 2 + octave 4 + C# 2 + C# 2 + octave 3 + F# 2 + octave 4 + C# 2 + octave 3 + B_ 2 + E_ 2 + B_ 2 + B_ 2 + E_ 2 + G# 2 + F# 2 + G# 2 + A_ 2 + A_ 2 + F# 2 + A_ 2 + F# 2 + G# 2 + A_ 2 + A_ 2 + F# 2 + A_ 2 + G# 2 + E_ 2 + B_ 2 + B_ 2 + E_ 2 + B_ 2 + B_ 2 + E_ 2 + B_ 2 + B_ 2 + E_ 2 + B_ 2 + A_ 2 + B_ 2 + A_ 2 + octave 4 + C# 2 + octave 3 + B_ 2 + octave 4 + C# 2 + D_ 2 + octave 3 + B_ 2 + octave 4 + D_ 2 + F# 2 + E_ 2 + D# 2 + E_ 2 + octave 3 + B_ 2 + octave 4 + E_ 2 + E_ 2 + octave 3 + B_ 2 + octave 4 + E_ 2 + E_ 2 + octave 3 + B_ 2 + octave 4 + E_ 2 + E_ 2 + octave 3 + B_ 2 + octave 4 + E_ 2 + loopchannel 0, Song_OakIntro_branch_ec69b + endchannel + + +Song_OakIntro_Ch1:: ; ec729 (3b:4729) + vibrato 8, 2, 6 + duty 3 + +Song_OakIntro_branch_ec72e:: + notetype 12, 13, 4 + octave 4 + E_ 6 + octave 3 + B_ 1 + octave 4 + E_ 1 + F# 6 + A_ 2 + G# 3 + E_ 1 + F# 8 + octave 3 + D# 4 + octave 4 + E_ 6 + octave 3 + B_ 1 + octave 4 + E_ 1 + F# 6 + A_ 2 + G# 3 + E_ 1 + B_ 8 + octave 3 + G# 4 + octave 5 + C# 6 + octave 4 + B_ 1 + A_ 1 + B_ 6 + A_ 1 + G# 1 + A_ 6 + G# 1 + F# 1 + G# 4 + F# 2 + E_ 2 + D_ 2 + D_ 1 + E_ 1 + F# 8 + A_ 4 + G# 3 + F# 1 + E_ 8 + F# 2 + E_ 2 + stereopanning 70 + D# 6 + D_ 2 + D_ 1 + E_ 1 + F# 2 + F# 1 + G# 1 + A_ 4 + octave 5 + C# 4 + octave 4 + B_ 3 + A_ 1 + G# 8 + rest 4 + loopchannel 0, Song_OakIntro_branch_ec72e + endchannel + + +Song_OakIntro_Ch2:: ; ec779 (3b:4779) + vibrato 9, 2, 8 + +Song_OakIntro_branch_ec77c:: + notetype 12, 1, 1 + octave 3 + E_ 2 + rest 2 + octave 2 + B_ 6 + octave 3 + D_ 1 + C# 1 + D_ 2 + D# 2 + E_ 2 + rest 2 + octave 2 + B_ 6 + octave 3 + D_ 1 + C# 1 + octave 2 + A_ 2 + octave 3 + C# 2 + E_ 2 + rest 2 + octave 2 + B_ 6 + octave 3 + D_ 1 + C# 1 + D_ 2 + D# 2 + E_ 2 + rest 2 + octave 2 + B_ 4 + octave 3 + C# 2 + octave 2 + B_ 2 + octave 3 + D_ 2 + F# 2 + E_ 2 + rest 2 + octave 2 + A_ 2 + rest 2 + octave 3 + D# 2 + rest 2 + octave 2 + G# 2 + rest 2 + octave 3 + C# 2 + rest 2 + octave 2 + F# 2 + rest 2 + B_ 2 + rest 2 + E_ 2 + G# 2 + F# 2 + rest 2 + A_ 2 + rest 2 + F# 2 + rest 2 + A_ 2 + rest 2 + G# 2 + rest 2 + B_ 2 + rest 2 + G# 2 + rest 2 + B_ 2 + rest 2 + F# 2 + rest 2 + A_ 2 + rest 2 + octave 3 + C# 2 + rest 2 + octave 2 + A_ 2 + octave 3 + C# 2 + octave 2 + B_ 2 + rest 2 + octave 3 + E_ 2 + rest 2 + G# 2 + rest 2 + E_ 2 + rest 2 + loopchannel 0, Song_OakIntro_branch_ec77c + endchannel + + +Song_OakIntro_Ch3:: ; ec7e7 (3b:47e7) + drumset 0 + +Song_OakIntro_branch_ec7e9:: + dspeed 12 + snare3 2 + rest 2 + snare3 1 + rest 5 + snare3 1 + snare3 1 + snare3 2 + snare3 2 + snare3 2 + rest 2 + dspeed 8 + snare3 2 + snare3 2 + snare3 2 + snare3 3 + snare3 3 + dspeed 12 + snare3 1 + rest 3 + snare3 2 + rest 2 + snare3 2 + rest 4 + snare3 1 + snare3 1 + snare3 2 + rest 2 + snare3 2 + rest 2 + dspeed 8 + snare3 2 + snare3 2 + snare3 2 + snare3 3 + snare3 3 + snare3 2 + snare3 2 + snare3 2 + snare3 3 + rest 3 + dspeed 12 + snare3 1 + rest 5 + snare3 1 + snare3 1 + snare3 2 + snare3 2 + snare3 2 + rest 2 + dspeed 8 + snare3 2 + snare3 2 + snare3 2 + snare3 3 + rest 3 + dspeed 12 + snare3 1 + rest 3 + snare3 2 + rest 2 + snare3 2 + rest 4 + snare3 1 + snare3 1 + snare3 2 + snare3 2 + snare3 2 + rest 2 + dspeed 8 + snare3 2 + snare3 2 + snare3 2 + snare3 3 + rest 3 + snare3 3 + snare3 3 + snare3 3 + rest 3 + dspeed 12 + snare3 1 + rest 5 + snare3 1 + snare3 1 + snare3 2 + snare3 2 + snare3 2 + rest 2 + dspeed 8 + snare3 2 + snare3 2 + snare3 2 + snare3 3 + rest 3 + snare3 3 + rest 3 + loopchannel 0, Song_OakIntro_branch_ec7e9 + endchannel +; 0xec858 diff --git a/audio/songs/route1.asm b/audio/songs/route1.asm new file mode 100755 index 0000000..0ad9311 --- /dev/null +++ b/audio/songs/route1.asm @@ -0,0 +1,426 @@ +INCLUDE "constants.asm" + +SECTION "Song Route1", ROMX[$44c2], BANK[$3b] + +Song_Route1:: ; ec4c2 (3b:44c2) + db 3 << 6 | 0 + dw Song_Route1_Ch0 + db 1 + dw Song_Route1_Ch1 + db 2 + dw Song_Route1_Ch2 + db 3 + dw Song_Route1_Ch3 + +Song_Route1_Ch0:: ; ec4ce (3b:44ce) + tempo 152 + volume 7, 7 + vibrato 4, 2, 3 + duty 2 + toggleperfectpitch + rest 1 + rest 2 + +Song_Route1_branch_ec4db:: + notetype 12, 10, 1 + rest 4 + octave 4 + D_ 2 + D_ 6 + D_ 2 + D_ 6 + D_ 2 + D_ 1 + C# 1 + octave 3 + B_ 1 + octave 4 + C# 1 + octave 3 + A_ 2 + A_ 2 + A_ 6 + octave 4 + C# 2 + C# 6 + C# 2 + C# 4 + octave 3 + A_ 2 + octave 4 + C# 2 + octave 3 + B_ 2 + octave 4 + C# 4 + octave 3 + A_ 2 + A_ 6 + octave 4 + D_ 2 + D_ 6 + D_ 2 + D_ 6 + D_ 2 + D_ 1 + E_ 1 + D_ 1 + C# 1 + octave 3 + B_ 2 + A_ 2 + A_ 6 + octave 4 + C# 2 + C# 6 + octave 3 + A_ 2 + octave 4 + E_ 2 + octave 3 + A_ 2 + notetype 12, 10, 2 + octave 4 + G_ 4 + E_ 4 + F# 2 + notetype 12, 10, 1 + octave 3 + A_ 2 + A_ 6 + A_ 2 + F# 2 + A_ 4 + B_ 2 + octave 4 + C# 2 + octave 3 + B_ 4 + A_ 2 + F# 2 + A_ 4 + G_ 2 + E_ 2 + C# 4 + A_ 2 + octave 4 + D_ 2 + octave 3 + A_ 4 + B_ 2 + G_ 2 + B_ 4 + octave 4 + D_ 2 + E_ 2 + C# 2 + D_ 2 + octave 3 + A_ 2 + A_ 2 + loopchannel 0, Song_Route1_branch_ec4db + endchannel + + +Song_Route1_Ch1:: ; ec546 (3b:4546) + duty 2 + +Song_Route1_branch_ec548:: + notetype 12, 13, 1 + callchannel Song_Route1_branch_ec55b + callchannel Song_Route1_branch_ec56e + callchannel Song_Route1_branch_ec55b + callchannel Song_Route1_branch_ec586 + loopchannel 0, Song_Route1_branch_ec548 + +Song_Route1_branch_ec55b:: + octave 4 + D_ 1 + E_ 1 + F# 2 + F# 2 + F# 2 + D_ 1 + E_ 1 + F# 2 + F# 2 + F# 2 + D_ 1 + E_ 1 + F# 2 + F# 2 + G_ 3 + F# 1 + E_ 6 + endchannel + +Song_Route1_branch_ec56e:: + C# 1 + D_ 1 + E_ 2 + E_ 2 + E_ 2 + C# 1 + D_ 1 + E_ 2 + E_ 2 + E_ 2 + C# 1 + D_ 1 + stereopanning 41 + D# 8 + E_ 2 + E_ 2 + F# 1 + E_ 1 + E_ 1 + F# 1 + D_ 4 + F# 2 + endchannel + +Song_Route1_branch_ec586:: + C# 1 + D_ 1 + E_ 2 + G_ 2 + F# 2 + E_ 2 + D_ 2 + C# 2 + octave 3 + B_ 2 + octave 4 + C# 2 + notetype 12, 13, 2 + B_ 4 + notetype 6, 13, 1 + octave 3 + B_ 1 + octave 4 + C# 1 + notetype 12, 13, 1 + octave 3 + B_ 1 + A_ 1 + octave 4 + C# 1 + D_ 6 + notetype 12, 13, 2 + F# 1 + G_ 1 + A_ 2 + A_ 2 + F# 2 + D_ 2 + octave 5 + D_ 2 + C# 2 + octave 4 + B_ 2 + octave 5 + C# 2 + octave 4 + A_ 2 + F# 2 + D_ 3 + F# 1 + E_ 6 + F# 1 + G_ 1 + A_ 2 + A_ 2 + F# 2 + A_ 2 + octave 5 + D_ 2 + C# 2 + octave 4 + B_ 3 + G_ 1 + A_ 2 + octave 5 + D_ 2 + C# 2 + E_ 2 + D_ 2 + notetype 12, 13, 1 + octave 4 + D_ 2 + D_ 2 + endchannel + endchannel + + +Song_Route1_Ch2:: ; ec5d6 (3b:45d6) + vibrato 8, 2, 5 + notetype 12, 1, 3 + +Song_Route1_branch_ec5dc:: + rest 2 + octave 4 + D_ 4 + C# 4 + octave 3 + B_ 4 + A_ 4 + octave 4 + D_ 4 + octave 3 + A_ 4 + B_ 4 + A_ 4 + octave 4 + C# 4 + octave 3 + A_ 4 + B_ 4 + octave 4 + C_ 4 + C# 4 + octave 3 + A_ 4 + octave 4 + D_ 4 + octave 3 + A_ 4 + octave 4 + D_ 4 + C# 4 + octave 3 + B_ 4 + A_ 4 + octave 4 + D_ 4 + octave 3 + A_ 4 + B_ 4 + A_ 4 + octave 4 + C# 4 + octave 3 + B_ 4 + A_ 4 + B_ 4 + octave 4 + C# 4 + octave 3 + A_ 4 + octave 4 + D_ 4 + octave 3 + A_ 4 + octave 4 + D_ 8 + octave 3 + G_ 8 + A_ 8 + octave 4 + C# 8 + D_ 8 + octave 3 + G_ 8 + A_ 8 + octave 4 + D_ 6 + loopchannel 0, Song_Route1_branch_ec5dc + endchannel + + +Song_Route1_Ch3:: ; ec623 (3b:4623) + drumset 2 + +Song_Route1_branch_ec625:: + dspeed 12 + rest 4 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + snare4 2 + rest 4 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + snare4 2 + snare4 2 + snare4 2 + rest 4 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + snare4 2 + rest 4 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + rest 2 + snare4 2 + snare4 2 + snare4 2 + rest 2 + snare4 2 + snare4 2 + rest 4 + snare4 2 + snare4 2 + snare4 2 + rest 2 + snare4 2 + snare4 2 + rest 4 + snare4 2 + snare4 2 + snare4 2 + rest 2 + snare4 2 + snare4 2 + rest 4 + snare4 2 + snare4 2 + snare4 2 + rest 2 + snare4 2 + snare4 2 + snare4 2 + rest 2 + snare4 2 + snare4 2 + loopchannel 0, Song_Route1_branch_ec625 + endchannel +; 0xec685 diff --git a/audio/songs/spottedrocket.asm b/audio/songs/spottedrocket.asm new file mode 100755 index 0000000..aef6bb5 --- /dev/null +++ b/audio/songs/spottedrocket.asm @@ -0,0 +1,95 @@ +INCLUDE "constants.asm" + +SECTION "Song SpottedRocket", ROMX[$5978], BANK[$3b] + +Song_SpottedRocket:: ; ed978 (3b:5978) + db 2 << 6 | 0 + dw Song_SpottedRocket_Ch0 + db 1 + dw Song_SpottedRocket_Ch1 + db 2 + dw Song_SpottedRocket_Ch2 + +Song_SpottedRocket_Ch0:: ; ed981 (3b:5981) + tempo 124 + volume 7, 7 + duty 2 + toggleperfectpitch + rest 1 + rest 2 + notetype 12, 11, 1 + rest 4 + octave 3 + D_ 2 + C# 2 + notetype 12, 4, 15 + D_ 4 + +Song_SpottedRocket_branch_ed996:: + notetype 12, 10, 1 + D_ 4 + D_ 4 + D_ 4 + notetype 12, 7, 0 + D_ 4 + loopchannel 0, Song_SpottedRocket_branch_ed996 + + +Song_SpottedRocket_Ch1:: ; ed9a4 (3b:59a4) + duty 1 + notetype 12, 11, 6 + octave 3 + B_ 2 + A# 2 + B_ 8 + +Song_SpottedRocket_branch_ed9ad:: + notetype 12, 12, 2 + octave 4 + D# 2 + D_ 2 + C# 2 + C_ 2 + octave 3 + B_ 4 + B_ 4 + B_ 4 + B_ 4 + B_ 4 + notetype 12, 4, 15 + A# 4 + notetype 12, 12, 2 + G_ 2 + G# 2 + A_ 2 + A# 2 + B_ 4 + B_ 4 + B_ 4 + B_ 4 + B_ 4 + notetype 12, 3, 15 + A# 4 + notetype 12, 12, 2 + loopchannel 0, Song_SpottedRocket_branch_ed9ad + + +Song_SpottedRocket_Ch2:: ; ed9d6 (3b:59d6) + notetype 12, 1, 0 + rest 8 + octave 4 + F# 1 + rest 1 + F_ 1 + rest 1 + +Song_SpottedRocket_branch_ed9df:: + F# 1 + rest 3 + F# 1 + rest 3 + F# 1 + rest 3 + A# 4 + loopchannel 0, Song_SpottedRocket_branch_ed9df +; 0xed9ea diff --git a/audio/songs/title.asm b/audio/songs/title.asm new file mode 100755 index 0000000..087980d --- /dev/null +++ b/audio/songs/title.asm @@ -0,0 +1,695 @@ +INCLUDE "constants.asm" + +SECTION "Song Title", ROMX[$62fe], BANK[$3c] + +Song_Title:: ; f22fe (3c:62fe) + db 3 << 6 | 0 + dw Song_Title_Ch0 + db 1 + dw Song_Title_Ch1 + db 2 + dw Song_Title_Ch2 + db 3 + dw Song_Title_Ch3 + +Song_Title_Ch0:: ; f230a (3c:630a) + tempo 144 + volume 7, 7 + vibrato 9, 3, 4 + duty 3 + notetype 12, 12, 1 + octave 2 + E_ 1 + G_ 1 + B_ 1 + octave 3 + D_ 1 + octave 2 + G_ 4 + G_ 6 + G_ 1 + G_ 1 + G_ 4 + G_ 4 + G_ 4 + notetype 8, 12, 1 + A_ 2 + A_ 2 + A_ 2 + A_ 2 + A_ 2 + F# 2 + +Song_Title_branch_f232e:: + callchannel Song_Title_branch_f2395 + callchannel Song_Title_branch_f239f + callchannel Song_Title_branch_f2395 + octave 3 + C_ 8 + notetype 8, 12, 6 + E_ 4 + E_ 4 + C_ 4 + notetype 12, 12, 6 + octave 2 + B_ 8 + notetype 8, 14, 7 + octave 3 + F_ 4 + E_ 4 + C_ 4 + notetype 12, 14, 7 + D_ 10 + notetype 12, 12, 6 + octave 2 + B_ 2 + octave 3 + C_ 2 + D_ 2 + callchannel Song_Title_branch_f2395 + callchannel Song_Title_branch_f239f + callchannel Song_Title_branch_f2395 + C_ 6 + C_ 6 + E_ 4 + D_ 6 + F_ 2 + G_ 2 + D_ 4 + G_ 2 + G_ 6 + A_ 4 + F_ 2 + A_ 2 + octave 4 + C_ 2 + octave 3 + D_ 12 + E_ 4 + F_ 8 + G_ 4 + F_ 4 + E_ 12 + F_ 4 + G_ 8 + notetype 12, 11, 6 + octave 4 + C_ 4 + C# 4 + callchannel Song_Title_branch_f23b3 + notetype 8, 11, 4 + octave 4 + C_ 4 + C_ 4 + C# 4 + callchannel Song_Title_branch_f23b3 + notetype 8, 11, 2 + octave 3 + E_ 4 + E_ 4 + C# 4 + loopchannel 0, Song_Title_branch_f232e + +Song_Title_branch_f2395:: + notetype 12, 12, 6 + octave 3 + D_ 6 + octave 2 + B_ 2 + octave 3 + D_ 8 + endchannel + +Song_Title_branch_f239f:: + C_ 6 + F_ 6 + C_ 4 + D_ 8 + notetype 12, 14, 7 + F_ 6 + E_ 1 + D# 1 + D_ 8 + notetype 8, 12, 6 + C_ 4 + octave 2 + B_ 4 + octave 3 + C_ 4 + endchannel + +Song_Title_branch_f23b3:: + notetype 12, 12, 1 + D_ 1 + rest 1 + octave 2 + D_ 1 + D_ 1 + D_ 1 + rest 1 + D_ 1 + D_ 1 + D_ 1 + rest 1 + D_ 1 + D_ 1 + D_ 1 + rest 1 + D_ 1 + D_ 1 + D_ 1 + rest 1 + D_ 1 + D_ 1 + D_ 1 + rest 1 + D_ 1 + D_ 1 + endchannel + + +Song_Title_Ch1:: ; f23d0 (3c:63d0) + vibrato 16, 4, 6 + duty 1 + notetype 12, 14, 1 + octave 2 + G_ 1 + B_ 1 + octave 3 + D_ 1 + F# 1 + G_ 4 + G_ 6 + G_ 1 + G_ 1 + G_ 4 + G_ 4 + G_ 4 + notetype 8, 14, 1 + F_ 2 + F_ 2 + F_ 2 + F_ 2 + F_ 2 + F# 2 + +Song_Title_branch_f23ee:: + vibrato 16, 4, 6 + callchannel Song_Title_branch_f248a + unknown_f9 + octave 2 + A_ 4 + F_ 4 + callchannel Song_Title_branch_f2496 + octave 2 + A_ 8 + B_ 16 + callchannel Song_Title_branch_f248a + octave 2 + A_ 6 + F_ 2 + notetype 8, 14, 7 + octave 4 + C_ 4 + octave 3 + B_ 4 + octave 4 + C_ 4 + notetype 12, 14, 7 + D_ 8 + notetype 12, 9, 5 + octave 2 + D_ 6 + D_ 1 + F# 1 + G_ 16 + callchannel Song_Title_branch_f248a + octave 2 + A_ 2 + F_ 6 + callchannel Song_Title_branch_f2496 + octave 3 + C_ 2 + octave 2 + A_ 6 + B_ 6 + G_ 2 + F_ 8 + callchannel Song_Title_branch_f248a + notetype 8, 9, 5 + octave 2 + G_ 4 + F_ 5 + A_ 3 + notetype 8, 14, 6 + octave 4 + F_ 4 + E_ 4 + F_ 4 + notetype 12, 14, 7 + G_ 6 + A# 2 + G_ 8 + unknown_f9 + vibrato 16, 2, 6 + duty 3 + notetype 12, 0, 11 + G_ 8 + notetype 12, 14, 7 + A_ 8 + duty 1 + notetype 12, 14, 7 + A# 6 + F_ 2 + F_ 8 + octave 3 + D_ 8 + octave 4 + A# 4 + B_ 4 + octave 5 + C_ 6 + octave 4 + G_ 2 + G_ 8 + octave 3 + E_ 8 + notetype 12, 13, 7 + octave 5 + C_ 4 + C# 4 + callchannel Song_Title_branch_f24a2 + rest 3 + D_ 1 + rest 3 + D_ 1 + notetype 8, 14, 5 + octave 5 + C_ 4 + C_ 4 + C# 4 + callchannel Song_Title_branch_f24a2 + D_ 1 + rest 2 + D_ 1 + rest 3 + D_ 1 + notetype 8, 14, 3 + octave 5 + C_ 4 + C_ 4 + octave 4 + B_ 4 + loopchannel 0, Song_Title_branch_f23ee + +Song_Title_branch_f248a:: + notetype 12, 14, 7 + octave 3 + G_ 6 + B_ 2 + octave 4 + D_ 8 + notetype 12, 9, 5 + endchannel + +Song_Title_branch_f2496:: + notetype 12, 14, 7 + octave 4 + F_ 6 + E_ 1 + D# 1 + D_ 8 + notetype 12, 9, 5 + endchannel + +Song_Title_branch_f24a2:: + notetype 12, 14, 1 + D_ 1 + rest 2 + octave 4 + D_ 1 + rest 3 + D_ 1 + rest 3 + D_ 1 + rest 3 + D_ 1 + endchannel + + +Song_Title_Ch2:: ; f24b0 (3c:64b0) + notetype 12, 1, 0 + octave 3 + G_ 1 + rest 1 + D_ 1 + rest 1 + G_ 1 + rest 3 + G_ 1 + rest 5 + G_ 1 + G_ 1 + G_ 1 + rest 3 + G_ 1 + rest 3 + G_ 1 + rest 3 + notetype 8, 1, 0 + F_ 2 + F_ 2 + F_ 2 + F_ 2 + F_ 2 + A_ 2 + +Song_Title_branch_f24cd:: + callchannel Song_Title_branch_f253a + callchannel Song_Title_branch_f2541 + +Song_Title_branch_f24d3:: + callchannel Song_Title_branch_f253a + callchannel Song_Title_branch_f253a + callchannel Song_Title_branch_f253a + callchannel Song_Title_branch_f2541 + loopchannel 3, Song_Title_branch_f24d3 + callchannel Song_Title_branch_f253a + G_ 6 + D_ 3 + A_ 6 + F_ 3 + A_ 3 + F_ 3 + callchannel Song_Title_branch_f2548 + A# 3 + F_ 3 + callchannel Song_Title_branch_f2548 + B_ 3 + G_ 3 + callchannel Song_Title_branch_f254d + octave 4 + C_ 3 + octave 3 + G_ 3 + callchannel Song_Title_branch_f254d + octave 4 + C# 3 + octave 3 + A_ 3 + callchannel Song_Title_branch_f2556 + octave 5 + pitchbend 0, 67 + D_ 4 + rest 4 + octave 6 + pitchbend 0, 51 + D_ 4 + octave 5 + pitchbend 0, 67 + D_ 4 + rest 2 + notetype 8, 1, 0 + octave 4 + C_ 4 + C_ 4 + C# 4 + callchannel Song_Title_branch_f2556 + octave 6 + pitchbend 0, 51 + D_ 4 + rest 4 + octave 5 + pitchbend 0, 67 + D_ 4 + rest 6 + notetype 8, 1, 0 + octave 4 + C_ 4 + C_ 4 + octave 3 + B_ 4 + loopchannel 0, Song_Title_branch_f24cd + +Song_Title_branch_f253a:: + G_ 6 + D_ 3 + G_ 6 + D_ 3 + G_ 3 + D_ 3 + endchannel + +Song_Title_branch_f2541:: + F_ 6 + C_ 3 + F_ 6 + C_ 3 + F_ 3 + C_ 3 + endchannel + +Song_Title_branch_f2548:: + A# 6 + F_ 3 + A# 6 + F_ 3 + endchannel + +Song_Title_branch_f254d:: + octave 4 + C_ 6 + octave 3 + G_ 3 + octave 4 + C_ 6 + octave 3 + G_ 3 + endchannel + +Song_Title_branch_f2556:: + notetype 12, 1, 0 + octave 4 + D_ 1 + rest 5 + endchannel + + +Song_Title_Ch3:: ; f255d (3c:655d) + drumset 0 + dspeed 6 + rest 4 + snare3 1 + snare3 1 + snare4 1 + snare4 1 + dspeed 12 + snare2 1 + rest 3 + snare2 1 + rest 5 + snare2 1 + snare2 1 + snare2 1 + rest 3 + snare2 1 + rest 3 + snare2 1 + rest 3 + dspeed 8 + snare3 2 + snare4 2 + snare2 2 + snare3 2 + snare2 2 + snare1 2 + +Song_Title_branch_f257c:: + dspeed 12 + snare2 1 + rest 3 + snare2 1 + rest 5 + snare2 1 + snare2 1 + snare3 1 + rest 3 + callchannel Song_Title_branch_f263c + callchannel Song_Title_branch_f263c + snare2 1 + rest 3 + snare2 1 + rest 5 + snare2 1 + snare2 1 + snare3 1 + rest 1 + snare3 1 + snare2 1 + callchannel Song_Title_branch_f2645 + snare2 1 + rest 3 + snare2 1 + rest 5 + snare2 1 + snare3 1 + snare2 1 + rest 1 + snare2 1 + rest 1 + callchannel Song_Title_branch_f2645 + snare2 1 + rest 3 + snare2 1 + rest 5 + snare2 1 + snare3 1 + snare2 1 + rest 1 + dspeed 6 + snare3 1 + snare3 1 + snare4 1 + snare4 1 + dspeed 12 + callchannel Song_Title_branch_f263c + callchannel Song_Title_branch_f2645 + snare2 1 + rest 3 + snare2 1 + rest 5 + snare2 1 + snare3 1 + snare2 1 + rest 3 + snare2 1 + rest 3 + snare2 1 + rest 5 + snare3 1 + snare2 1 + snare2 1 + rest 1 + snare3 1 + snare2 1 + callchannel Song_Title_branch_f263c + callchannel Song_Title_branch_f2645 + snare2 1 + rest 3 + snare2 1 + rest 5 + snare3 1 + snare2 1 + snare2 1 + rest 1 + snare4 1 + snare3 1 + snare2 1 + rest 3 + snare3 1 + rest 5 + snare2 1 + snare4 1 + snare2 1 + rest 1 + dspeed 6 + snare3 1 + snare3 1 + snare4 1 + snare4 1 + dspeed 12 + snare1 1 + rest 3 + snare2 1 + rest 5 + snare3 1 + snare2 1 + snare1 1 + rest 3 + snare2 1 + rest 3 + snare3 1 + rest 5 + snare3 1 + snare2 1 + snare3 1 + rest 3 + snare2 1 + rest 3 + snare3 1 + rest 5 + snare2 1 + snare3 1 + snare4 1 + rest 1 + snare3 1 + snare2 1 + snare2 1 + rest 3 + snare3 1 + rest 5 + snare2 1 + snare3 1 + snare2 1 + rest 3 + snare5 1 + rest 5 + snare2 1 + rest 3 + snare3 1 + snare2 1 + snare1 1 + rest 5 + snare2 1 + snare3 1 + snare2 1 + rest 1 + snare1 1 + rest 1 + dspeed 8 + snare2 4 + snare3 4 + snare1 4 + dspeed 12 + snare5 1 + rest 5 + snare2 1 + rest 3 + snare3 1 + snare2 1 + snare3 1 + rest 5 + snare2 1 + snare3 1 + snare1 1 + rest 1 + snare3 1 + snare2 1 + dspeed 8 + snare2 4 + snare3 4 + snare2 4 + loopchannel 0, Song_Title_branch_f257c + +Song_Title_branch_f263c:: + snare2 1 + rest 3 + snare2 1 + rest 5 + snare2 1 + snare3 1 + snare2 1 + rest 3 + endchannel + +Song_Title_branch_f2645:: + snare2 1 + rest 3 + snare2 1 + rest 5 + snare3 1 + snare2 1 + snare2 1 + rest 3 + endchannel +; 0xf264e diff --git a/audio/songs/trainerbattle.asm b/audio/songs/trainerbattle.asm new file mode 100755 index 0000000..a7e9a84 --- /dev/null +++ b/audio/songs/trainerbattle.asm @@ -0,0 +1,1872 @@ +INCLUDE "constants.asm" + +SECTION "Song TrainerBattle", ROMX[$4e31], BANK[$3b] + +Song_TrainerBattle:: ; ece31 (3b:4e31) + db 2 << 6 | 0 + dw Song_TrainerBattle_Ch0 + db 1 + dw Song_TrainerBattle_Ch1 + db 2 + dw Song_TrainerBattle_Ch2 + +Song_TrainerBattle_Ch0:: ; ece3a (3b:4e3a) + tempo 112 + volume 7, 7 + duty 3 + vibrato 6, 3, 4 + toggleperfectpitch + rest 1 + rest 2 + notetype 12, 11, 2 + rest 8 + octave 3 + F_ 1 + E_ 1 + F_ 1 + E_ 1 + D# 1 + E_ 1 + D# 1 + D_ 1 + D# 1 + D_ 1 + C# 1 + D_ 1 + C# 1 + C_ 1 + C# 1 + C_ 1 + octave 2 + B_ 1 + octave 3 + C_ 1 + octave 2 + B_ 1 + A# 1 + B_ 1 + A# 1 + A_ 1 + A# 1 + octave 3 + D_ 6 + E_ 6 + F_ 4 + D_ 2 + E_ 4 + F_ 6 + C_ 4 + D_ 6 + E_ 6 + F_ 4 + D_ 2 + E_ 4 + F_ 6 + C_ 2 + C# 2 + D_ 6 + E_ 6 + F_ 4 + D_ 2 + E_ 4 + F_ 6 + C_ 4 + D_ 6 + E_ 6 + F_ 4 + D_ 2 + E_ 4 + F_ 6 + C_ 2 + C# 2 + +Song_TrainerBattle_branch_ece86:: + notetype 12, 11, 5 + D_ 2 + E_ 4 + C# 2 + D_ 4 + octave 2 + B_ 4 + F# 4 + octave 3 + E_ 2 + D_ 4 + C# 2 + D_ 2 + E_ 2 + F_ 8 + notetype 12, 11, 2 + C_ 1 + C# 1 + D_ 1 + D# 1 + E_ 1 + D# 1 + D_ 1 + C_ 1 + C_ 1 + C# 1 + D_ 1 + D# 1 + E_ 1 + F_ 1 + F# 1 + G_ 1 + G# 1 + G_ 1 + F# 1 + F_ 1 + E_ 1 + D# 1 + D_ 1 + C_ 1 + notetype 12, 11, 5 + D_ 2 + E_ 4 + C# 2 + D_ 4 + octave 2 + B_ 4 + F# 4 + octave 3 + E_ 2 + D_ 4 + C# 2 + octave 2 + B_ 2 + octave 3 + C# 2 + notetype 12, 10, 7 + D_ 8 + C# 8 + octave 2 + B_ 8 + octave 3 + C# 8 + notetype 12, 11, 5 + D_ 2 + C# 2 + octave 2 + B_ 2 + A_ 2 + G_ 2 + rest 2 + octave 3 + D_ 2 + C# 2 + octave 2 + B_ 2 + A_ 2 + G_ 2 + rest 2 + octave 3 + D_ 2 + C# 2 + octave 2 + B_ 2 + octave 3 + C# 2 + E_ 4 + octave 2 + G_ 1 + A_ 1 + B_ 1 + octave 3 + C# 1 + D_ 4 + octave 2 + F# 1 + G_ 1 + A_ 1 + B_ 1 + octave 3 + C# 4 + octave 2 + G_ 1 + A_ 1 + B_ 1 + octave 3 + C# 1 + D_ 4 + octave 2 + F# 1 + G_ 1 + A_ 1 + B_ 1 + octave 3 + D_ 2 + C# 2 + octave 2 + B_ 2 + A_ 2 + G_ 2 + rest 2 + octave 3 + D_ 2 + C# 2 + octave 2 + B_ 2 + A_ 2 + B_ 2 + G_ 2 + octave 3 + D_ 2 + E_ 2 + F# 2 + G_ 2 + A_ 2 + B_ 2 + A_ 2 + G_ 2 + A_ 2 + rest 2 + A_ 2 + B_ 2 + A_ 2 + G_ 2 + F# 2 + G_ 2 + A_ 2 + E_ 2 + G_ 2 + F# 2 + octave 2 + B_ 1 + octave 3 + C_ 1 + C# 1 + D_ 1 + D# 1 + E_ 1 + F_ 1 + F# 1 + G_ 1 + G# 1 + A_ 1 + A# 1 + B_ 1 + octave 4 + C_ 1 + C# 1 + D_ 1 + D# 1 + D_ 1 + C# 1 + C_ 1 + octave 3 + B_ 1 + A# 1 + A_ 1 + G# 1 + G_ 1 + F# 1 + F_ 1 + E_ 1 + D# 1 + D_ 1 + C# 1 + C_ 1 + C_ 1 + C# 1 + D_ 1 + D# 1 + E_ 1 + F_ 1 + F# 1 + G_ 1 + G# 1 + A_ 1 + A# 1 + B_ 1 + octave 4 + C_ 1 + C# 1 + D_ 1 + D# 1 + E_ 1 + D# 1 + D_ 1 + C# 1 + C_ 1 + octave 3 + B_ 1 + A# 1 + A_ 1 + G# 1 + G_ 1 + F# 1 + F_ 1 + E_ 1 + D# 1 + D_ 1 + C# 1 + C# 1 + D_ 1 + D# 1 + E_ 1 + F_ 1 + F# 1 + G_ 1 + G# 1 + A_ 1 + A# 1 + B_ 1 + octave 4 + C_ 1 + C# 1 + D_ 1 + D# 1 + E_ 1 + F_ 1 + E_ 1 + D# 1 + D_ 1 + C# 1 + C_ 1 + octave 3 + B_ 1 + A# 1 + A_ 1 + G# 1 + G_ 1 + F# 1 + F_ 1 + E_ 1 + D# 1 + D_ 1 + D_ 1 + D# 1 + E_ 1 + F_ 1 + F# 1 + G_ 1 + G# 1 + A_ 1 + A# 1 + B_ 1 + octave 4 + C_ 1 + C# 1 + D_ 1 + D# 1 + E_ 1 + F_ 1 + F# 1 + F_ 1 + E_ 1 + D# 1 + D_ 1 + C# 1 + C_ 1 + octave 3 + B_ 1 + A# 1 + B_ 1 + octave 4 + C_ 1 + C# 1 + D_ 1 + D# 1 + E_ 1 + F_ 1 + octave 3 + A_ 4 + octave 4 + D_ 4 + octave 3 + A_ 2 + D_ 1 + E_ 1 + F# 1 + G_ 1 + G# 1 + A# 1 + B_ 2 + octave 4 + C_ 2 + octave 3 + A_ 2 + octave 4 + C_ 2 + octave 3 + G_ 2 + B_ 2 + F_ 2 + G_ 2 + A_ 2 + octave 4 + C_ 2 + D_ 2 + rest 2 + octave 3 + A_ 4 + octave 4 + C_ 4 + D_ 2 + octave 3 + F_ 1 + G_ 1 + A_ 1 + B_ 1 + octave 4 + C_ 1 + D_ 1 + E_ 2 + F_ 2 + D_ 2 + F_ 2 + D_ 2 + F_ 2 + D_ 2 + F_ 2 + D_ 2 + F_ 2 + D_ 2 + F_ 2 + E_ 2 + F_ 2 + E_ 2 + F_ 2 + E_ 2 + F_ 2 + E_ 2 + F_ 2 + E_ 2 + F_ 2 + E_ 2 + F_ 2 + E_ 2 + F_ 2 + E_ 2 + octave 3 + B_ 2 + C_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + C_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + C_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + C_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + C_ 2 + octave 2 + A_ 2 + octave 3 + C_ 2 + E_ 2 + D_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + D_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + D_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + D_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + D_ 2 + octave 2 + A# 2 + octave 3 + D_ 2 + F_ 2 + C_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + C_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + C_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + C_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + C_ 2 + octave 2 + A_ 2 + octave 3 + C_ 2 + E_ 2 + D_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + D_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + D_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + D_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + D_ 2 + octave 2 + A# 2 + octave 3 + D_ 2 + F_ 2 + D_ 16 + C_ 16 + octave 2 + A# 16 + G_ 12 + octave 3 + D_ 1 + E_ 1 + G_ 1 + octave 4 + C_ 1 + D_ 8 + F_ 8 + octave 3 + A# 8 + octave 4 + C_ 8 + D_ 8 + E_ 8 + F_ 8 + G_ 8 + E_ 2 + rest 4 + E_ 2 + rest 4 + E_ 2 + rest 2 + E_ 2 + rest 4 + E_ 2 + rest 4 + E_ 2 + rest 2 + E_ 2 + rest 4 + E_ 2 + rest 4 + E_ 2 + rest 2 + E_ 2 + rest 4 + E_ 2 + rest 4 + E_ 2 + rest 2 + octave 3 + C_ 2 + D_ 4 + octave 2 + B_ 2 + octave 3 + C# 4 + rest 2 + C# 1 + D_ 1 + E_ 1 + rest 1 + D_ 1 + rest 1 + octave 2 + B_ 1 + rest 1 + octave 3 + C# 1 + rest 9 + D_ 1 + D# 1 + E_ 1 + F_ 1 + F_ 1 + E_ 1 + D# 1 + D_ 1 + C# 1 + rest 5 + C# 1 + D_ 1 + E_ 1 + rest 1 + F_ 1 + rest 1 + E_ 1 + rest 1 + D_ 1 + rest 1 + D_ 2 + E_ 2 + F_ 2 + G_ 2 + D# 1 + E_ 1 + F_ 1 + F# 1 + F# 1 + F_ 1 + E_ 1 + D# 1 + D_ 1 + rest 9 + F# 2 + E_ 4 + D# 2 + E_ 2 + F# 2 + G# 2 + E_ 8 + F# 8 + G_ 8 + octave 4 + C_ 4 + octave 3 + G_ 1 + G# 1 + A_ 1 + A# 1 + loopchannel 0, Song_TrainerBattle_branch_ece86 + + +Song_TrainerBattle_Ch1:: ; ed0d7 (3b:50d7) + duty 3 + vibrato 10, 2, 5 + notetype 12, 12, 2 + octave 4 + A_ 1 + G# 1 + G_ 1 + F# 1 + A_ 1 + F_ 1 + F# 1 + F_ 1 + A_ 1 + E_ 1 + F_ 1 + E_ 1 + A_ 1 + D# 1 + E_ 1 + D# 1 + A_ 1 + D_ 1 + D# 1 + D_ 1 + A_ 1 + C# 1 + D_ 1 + C# 1 + A_ 1 + C_ 1 + C# 1 + C_ 1 + A_ 1 + octave 3 + B_ 1 + octave 4 + C_ 1 + octave 3 + B_ 1 + notetype 12, 14, 1 + octave 4 + B_ 16 + rest 16 + notetype 12, 13, 1 + B_ 16 + rest 12 + A_ 4 + notetype 12, 12, 2 + octave 3 + B_ 6 + octave 4 + C# 6 + D_ 4 + octave 3 + B_ 2 + octave 4 + C# 4 + D_ 6 + A_ 2 + A# 2 + B_ 6 + octave 5 + C# 6 + D_ 4 + octave 4 + B_ 2 + octave 5 + C# 4 + D_ 6 + octave 4 + A_ 4 + +Song_TrainerBattle_branch_ed129:: + notetype 12, 12, 7 + octave 3 + B_ 6 + F# 14 + B_ 4 + F# 4 + B_ 4 + notetype 12, 5, 0 + octave 4 + C_ 8 + notetype 12, 3, 0 + C_ 8 + notetype 12, 4, 14 + C_ 8 + notetype 12, 12, 7 + C_ 8 + octave 3 + B_ 6 + F# 14 + B_ 4 + F# 4 + B_ 4 + notetype 12, 9, 0 + A_ 8 + notetype 12, 5, 0 + A_ 8 + notetype 12, 4, 0 + A_ 8 + notetype 12, 3, 0 + A_ 8 + notetype 12, 12, 7 + G_ 16 + octave 4 + D_ 8 + octave 3 + G_ 8 + notetype 12, 8, 0 + A_ 8 + notetype 12, 5, 0 + A_ 8 + notetype 12, 4, 0 + A_ 8 + notetype 12, 6, 0 + A_ 8 + notetype 12, 12, 7 + G_ 16 + octave 4 + E_ 8 + F# 8 + E_ 16 + notetype 12, 12, 5 + G_ 4 + A_ 2 + G_ 2 + F# 2 + E_ 2 + D_ 2 + E_ 2 + notetype 12, 11, 7 + F# 8 + notetype 12, 5, 0 + F# 8 + notetype 12, 6, 0 + F# 8 + notetype 12, 7, 0 + F# 8 + notetype 12, 10, 0 + G_ 8 + notetype 12, 10, 7 + G_ 8 + notetype 12, 11, 7 + G_ 4 + notetype 12, 12, 5 + A_ 2 + G_ 2 + G_ 2 + F# 2 + E_ 2 + F# 2 + notetype 12, 10, 0 + G# 8 + notetype 12, 7, 0 + G# 8 + notetype 12, 8, 0 + G# 8 + notetype 12, 6, 0 + G# 8 + notetype 12, 10, 0 + A_ 16 + notetype 12, 11, 0 + octave 5 + C# 8 + E_ 8 + notetype 12, 12, 0 + D_ 4 + octave 4 + A_ 4 + octave 5 + C_ 2 + notetype 12, 12, 7 + octave 4 + B_ 8 + notetype 12, 6, 0 + B_ 8 + notetype 12, 6, 9 + B_ 6 + notetype 12, 9, 6 + B_ 6 + rest 2 + notetype 12, 12, 0 + octave 5 + D_ 4 + octave 4 + A_ 4 + A# 2 + notetype 12, 11, 0 + octave 5 + F_ 14 + notetype 12, 6, 0 + G_ 16 + notetype 12, 5, 0 + E_ 16 + notetype 12, 4, 0 + E_ 16 + notetype 12, 12, 7 + octave 4 + C_ 6 + octave 3 + A_ 14 + octave 4 + C_ 4 + octave 3 + A_ 4 + octave 4 + C_ 4 + octave 3 + A# 6 + octave 4 + F_ 14 + octave 3 + A# 4 + octave 4 + F_ 4 + D_ 4 + C_ 6 + octave 3 + A_ 14 + octave 4 + C_ 4 + E_ 2 + D_ 2 + C_ 2 + E_ 2 + D_ 2 + octave 3 + A# 4 + octave 4 + F_ 10 + G_ 6 + F_ 6 + D_ 4 + notetype 12, 11, 0 + F_ 16 + E_ 16 + D_ 16 + E_ 16 + notetype 12, 10, 0 + octave 5 + F_ 16 + E_ 16 + G_ 16 + F_ 16 + notetype 12, 13, 1 + octave 3 + A# 6 + A# 6 + A# 4 + A_ 6 + A_ 6 + A_ 4 + octave 4 + C_ 6 + C_ 6 + C_ 4 + octave 3 + A# 6 + A# 6 + A_ 4 + notetype 12, 12, 7 + A_ 4 + B_ 4 + G_ 2 + A_ 10 + B_ 2 + octave 4 + C# 2 + E_ 2 + D_ 2 + C# 2 + octave 3 + B_ 2 + A# 16 + rest 2 + A# 2 + octave 4 + C_ 2 + F_ 2 + E_ 2 + D_ 2 + C_ 2 + octave 3 + A# 2 + B_ 16 + rest 2 + B_ 2 + octave 4 + C# 2 + G_ 2 + F# 2 + E_ 2 + D_ 2 + octave 3 + B_ 2 + octave 4 + C_ 16 + E_ 8 + G_ 8 + loopchannel 0, Song_TrainerBattle_branch_ed129 + + +Song_TrainerBattle_Ch2:: ; ed26a (3b:526a) + vibrato 0, 2, 0 + notetype 12, 1, 4 + octave 3 + B_ 1 + A# 1 + A_ 1 + G# 1 + A_ 1 + G# 1 + G_ 1 + F# 1 + G_ 1 + F# 1 + F_ 1 + E_ 1 + F_ 1 + E_ 1 + D# 1 + D_ 1 + D# 1 + D_ 1 + C# 1 + C_ 1 + C# 1 + C_ 1 + octave 2 + B_ 1 + A# 1 + B_ 1 + A# 1 + A_ 1 + G# 1 + A_ 2 + A# 2 + B_ 2 + B_ 2 + octave 3 + D_ 2 + E_ 2 + octave 2 + B_ 2 + octave 3 + F_ 2 + E_ 2 + D_ 2 + octave 2 + B_ 2 + B_ 2 + octave 3 + D_ 2 + E_ 2 + octave 2 + B_ 2 + octave 3 + D_ 2 + octave 2 + A# 2 + octave 3 + C_ 2 + octave 2 + B_ 2 + B_ 2 + octave 3 + D_ 2 + E_ 2 + octave 2 + B_ 2 + octave 3 + F_ 2 + E_ 2 + D_ 2 + octave 2 + B_ 2 + B_ 2 + octave 3 + D_ 2 + E_ 2 + octave 2 + B_ 2 + octave 3 + D_ 2 + octave 2 + A# 2 + octave 3 + C_ 2 + octave 2 + B_ 2 + B_ 2 + octave 3 + D_ 2 + E_ 2 + octave 2 + B_ 2 + octave 3 + F_ 2 + E_ 2 + D_ 2 + octave 2 + B_ 2 + B_ 2 + octave 3 + D_ 2 + E_ 2 + octave 2 + B_ 2 + octave 3 + D_ 2 + octave 2 + A# 2 + octave 3 + C_ 2 + octave 2 + B_ 2 + B_ 2 + octave 3 + D_ 2 + E_ 2 + octave 2 + B_ 2 + octave 3 + F_ 2 + E_ 2 + D_ 2 + octave 2 + B_ 2 + B_ 2 + octave 3 + D_ 2 + E_ 2 + octave 2 + B_ 2 + octave 3 + D_ 2 + octave 2 + A# 2 + octave 3 + C_ 2 + +Song_TrainerBattle_branch_ed2f7:: + octave 2 + A# 1 + B_ 1 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + G_ 2 + C_ 2 + G_ 2 + C_ 2 + G_ 2 + C_ 2 + G_ 2 + C_ 2 + G_ 2 + A_ 2 + G_ 2 + F# 2 + E_ 2 + D_ 2 + C_ 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + D_ 2 + C# 2 + D_ 2 + C# 2 + octave 2 + A_ 2 + G# 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + G# 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + octave 3 + D_ 2 + octave 2 + G_ 2 + G# 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + D_ 2 + C# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + D_ 2 + E_ 2 + F# 2 + E_ 2 + D_ 2 + F# 2 + C_ 2 + G_ 2 + C_ 2 + G_ 2 + C_ 2 + G_ 2 + C_ 2 + G_ 2 + C_ 2 + G_ 2 + D# 2 + F_ 2 + G_ 2 + F_ 2 + D# 2 + G_ 2 + C# 2 + G# 2 + C# 2 + G# 2 + C# 2 + G# 2 + C# 2 + G# 2 + C# 2 + G# 2 + E_ 2 + F# 2 + G# 2 + F# 2 + E_ 2 + G# 2 + D_ 2 + A_ 2 + D_ 2 + A_ 2 + D_ 2 + A_ 2 + D_ 2 + A_ 2 + D_ 2 + A_ 2 + F_ 2 + G_ 2 + A_ 2 + G_ 2 + F_ 2 + E_ 2 + D_ 4 + octave 2 + A_ 4 + octave 3 + C_ 2 + G_ 2 + octave 2 + B_ 2 + octave 3 + G_ 2 + octave 2 + B_ 2 + octave 3 + G_ 2 + octave 2 + B_ 2 + octave 3 + G_ 2 + octave 2 + B_ 2 + octave 3 + G_ 2 + octave 2 + B_ 2 + octave 3 + G_ 2 + octave 2 + B_ 2 + octave 3 + G_ 2 + octave 2 + B_ 2 + octave 3 + G_ 2 + D_ 4 + octave 2 + A_ 4 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 4 + octave 3 + F_ 4 + octave 2 + A# 4 + octave 3 + F_ 4 + octave 2 + A# 4 + octave 3 + E_ 4 + octave 2 + A# 4 + octave 3 + E_ 4 + octave 2 + A# 4 + octave 3 + D_ 4 + octave 2 + A# 4 + octave 3 + D_ 4 + octave 2 + A# 4 + octave 3 + E_ 4 + octave 2 + A# 4 + octave 3 + E_ 4 + octave 2 + A# 4 + octave 3 + F_ 4 + octave 2 + A# 4 + octave 3 + F_ 4 + octave 2 + A# 4 + octave 3 + E_ 4 + octave 2 + A# 4 + octave 3 + E_ 4 + octave 2 + A# 4 + octave 3 + D_ 4 + octave 2 + A# 4 + octave 3 + D_ 4 + octave 2 + A# 4 + octave 3 + E_ 4 + octave 2 + A# 4 + octave 3 + E_ 4 + octave 2 + A_ 2 + octave 3 + E_ 2 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + E_ 2 + octave 2 + B_ 2 + A_ 2 + octave 3 + E_ 2 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + E_ 2 + octave 2 + B_ 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A_ 2 + octave 3 + E_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + A# 2 + octave 3 + F_ 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + C_ 2 + G_ 2 + C_ 2 + G_ 2 + C_ 2 + G_ 2 + C_ 2 + G_ 2 + C_ 2 + G_ 2 + F# 2 + E_ 2 + F# 2 + E_ 2 + D_ 2 + C_ 2 + loopchannel 0, Song_TrainerBattle_branch_ed2f7 +; 0xed5f4 diff --git a/audio/songs/victorytrainer.asm b/audio/songs/victorytrainer.asm new file mode 100755 index 0000000..3fe523e --- /dev/null +++ b/audio/songs/victorytrainer.asm @@ -0,0 +1,278 @@ +INCLUDE "constants.asm" + +SECTION "Song VictoryTrainer", ROMX[$59ea], BANK[$3b] + +Song_VictoryTrainer:: ; ed9ea (3b:59ea) + db 2 << 6 | 0 + dw Song_VictoryTrainer_Ch0 + db 1 + dw Song_VictoryTrainer_Ch1 + db 2 + dw Song_VictoryTrainer_Ch2 + +Song_VictoryTrainer_Ch0:: ; ed9f3 (3b:59f3) + tempo 224 + volume 7, 7 + duty 2 + toggleperfectpitch + rest 1 + rest 2 + tempo 224 + notetype 4, 10, 2 + octave 4 + D_ 2 + tempo 224 + D_ 2 + D_ 2 + D_ 2 + octave 3 + A_ 2 + octave 4 + D_ 2 + notetype 4, 11, 3 + F# 12 + duty 1 + tempo 224 + +Song_VictoryTrainer_branch_eda18:: + notetype 4, 6, 3 + octave 3 + A_ 6 + F# 3 + A_ 3 + B_ 6 + G# 3 + B_ 3 + octave 4 + C# 3 + octave 3 + B_ 3 + A_ 3 + G_ 3 + A_ 3 + B_ 3 + A_ 3 + G_ 3 + A_ 6 + F# 3 + A_ 3 + B_ 6 + G# 3 + B_ 3 + octave 4 + C# 3 + D_ 3 + E_ 3 + F# 3 + C# 3 + octave 3 + B_ 3 + A_ 3 + octave 4 + C# 3 + octave 3 + A_ 6 + F# 3 + A_ 3 + B_ 6 + G# 3 + B_ 3 + octave 4 + C_ 6 + octave 3 + A_ 3 + octave 4 + C_ 3 + D_ 3 + octave 3 + B_ 3 + octave 4 + D_ 6 + C# 3 + octave 3 + B_ 3 + A_ 3 + G_ 3 + F# 3 + G_ 3 + A_ 3 + B_ 3 + A_ 3 + G_ 3 + F# 3 + E_ 3 + F# 3 + G_ 3 + A_ 3 + B_ 3 + loopchannel 0, Song_VictoryTrainer_branch_eda18 + + +Song_VictoryTrainer_Ch1:: ; eda64 (3b:5a64) + duty 2 + notetype 4, 12, 3 + octave 4 + A_ 2 + A_ 2 + A_ 2 + A_ 2 + B_ 2 + octave 5 + C# 2 + notetype 4, 12, 4 + D_ 12 + +Song_VictoryTrainer_branch_eda75:: + notetype 4, 8, 5 + octave 4 + D_ 6 + octave 3 + A_ 3 + octave 4 + D_ 3 + E_ 6 + octave 3 + B_ 3 + octave 4 + E_ 3 + F# 3 + G_ 3 + A_ 6 + E_ 3 + F# 3 + G_ 6 + D_ 6 + octave 3 + A_ 3 + octave 4 + D_ 3 + E_ 6 + octave 3 + B_ 3 + octave 4 + E_ 3 + F# 3 + G_ 3 + A_ 6 + F# 3 + G_ 3 + A_ 6 + D_ 6 + octave 3 + A_ 3 + octave 4 + D_ 3 + E_ 6 + octave 3 + B_ 3 + octave 4 + E_ 3 + F_ 6 + C_ 3 + F_ 3 + G_ 3 + D_ 3 + G_ 6 + notetype 4, 7, 0 + F# 12 + notetype 4, 7, 7 + F# 12 + notetype 4, 6, 0 + E_ 12 + notetype 4, 6, 7 + E_ 12 + loopchannel 0, Song_VictoryTrainer_branch_eda75 + + +Song_VictoryTrainer_Ch2:: ; edabd (3b:5abd) + notetype 4, 1, 0 + octave 5 + D_ 2 + D_ 2 + D_ 2 + octave 4 + B_ 2 + A_ 2 + G_ 2 + A_ 12 + notetype 4, 2, 1 + +Song_VictoryTrainer_branch_edacc:: + F# 3 + rest 3 + F# 3 + rest 3 + G# 3 + rest 3 + G# 3 + rest 3 + A_ 3 + rest 3 + A_ 3 + rest 3 + B_ 3 + rest 3 + B_ 3 + rest 3 + F# 3 + rest 3 + F# 3 + rest 3 + G# 3 + rest 3 + G# 3 + rest 3 + A_ 3 + rest 3 + A_ 3 + rest 3 + octave 5 + C# 3 + rest 3 + C# 3 + octave 4 + A_ 3 + F# 3 + octave 5 + D_ 3 + octave 4 + F# 3 + rest 3 + G# 3 + octave 5 + E_ 3 + octave 4 + G# 3 + rest 3 + A_ 3 + octave 5 + F_ 3 + octave 4 + A_ 3 + rest 3 + B_ 3 + octave 5 + G_ 3 + octave 4 + B_ 3 + A# 3 + A_ 3 + rest 3 + A_ 3 + rest 3 + A_ 3 + rest 3 + A_ 3 + octave 5 + C_ 3 + C# 3 + rest 3 + C# 3 + rest 3 + C# 3 + rest 3 + C# 3 + octave 4 + A_ 3 + loopchannel 0, Song_VictoryTrainer_branch_edacc +; 0xedb1c diff --git a/audio/songs/viridiancity.asm b/audio/songs/viridiancity.asm new file mode 100755 index 0000000..4b3a35e --- /dev/null +++ b/audio/songs/viridiancity.asm @@ -0,0 +1,677 @@ +INCLUDE "constants.asm" + +SECTION "Song ViridianCity", ROMX[$41b9], BANK[$3b] + +Song_ViridianCity:: ; ec1b9 (3b:41b9) + db 3 << 6 | 0 + dw Song_ViridianCity_Ch0 + db 1 + dw Song_ViridianCity_Ch1 + db 2 + dw Song_ViridianCity_Ch2 + db 3 + dw Song_ViridianCity_Ch3 + +Song_ViridianCity_branch_ec1c5:: + tempo 232 + loopchannel 0, Song_ViridianCity_branch_ec1cf + +Song_ViridianCity_Ch0:: ; ec1cc (3b:41cc) + tempo 144 + +Song_ViridianCity_branch_ec1cf:: + volume 7, 7 + vibrato 8, 2, 4 + duty 3 + +Song_ViridianCity_branch_ec1d6:: + notetype 12, 12, 5 + octave 3 + G# 4 + F# 4 + E_ 2 + E_ 2 + F# 2 + D# 2 + E_ 2 + E_ 2 + D# 2 + C# 4 + D# 4 + E_ 2 + D# 4 + C# 2 + E_ 2 + E_ 4 + notetype 12, 10, 5 + C# 4 + octave 2 + B_ 6 + octave 3 + C# 2 + C# 4 + octave 2 + B_ 4 + notetype 12, 12, 5 + callchannel Song_ViridianCity_branch_ec2de + octave 3 + D# 6 + E_ 2 + octave 2 + B_ 4 + notetype 12, 10, 5 + octave 3 + C# 2 + octave 2 + B_ 2 + A_ 4 + B_ 4 + B_ 2 + octave 3 + C# 2 + D# 2 + E_ 2 + D# 2 + C# 2 + D# 2 + notetype 12, 12, 5 + G# 2 + E_ 2 + F# 2 + E_ 2 + E_ 4 + F# 2 + D# 2 + E_ 4 + D# 2 + C# 4 + D# 4 + E_ 2 + D# 2 + C# 2 + C# 2 + E_ 2 + E_ 4 + notetype 12, 10, 5 + C# 2 + octave 2 + A_ 2 + B_ 6 + octave 3 + C# 2 + C# 2 + octave 2 + B_ 2 + B_ 4 + notetype 12, 12, 5 + callchannel Song_ViridianCity_branch_ec2de + octave 3 + D# 4 + D# 2 + E_ 2 + octave 2 + B_ 2 + octave 3 + C# 2 + G# 2 + E_ 4 + octave 2 + B_ 2 + octave 3 + E_ 2 + notetype 12, 10, 5 + C# 4 + octave 2 + B_ 2 + octave 3 + D# 4 + C# 2 + E_ 4 + notetype 12, 11, 3 + callchannel Song_ViridianCity_branch_ec2eb + A_ 2 + B_ 2 + A_ 2 + G# 2 + A_ 4 + F# 4 + G# 2 + E_ 2 + octave 2 + B_ 2 + octave 3 + E_ 4 + G# 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + E_ 2 + F# 2 + E_ 2 + D# 2 + E_ 2 + D# 2 + C# 2 + octave 2 + B_ 2 + octave 3 + +Song_ViridianCity_branch_ec271:: + C# 2 + D# 2 + C# 2 + octave 2 + B_ 4 + B_ 2 + octave 3 + C# 2 + D# 2 + loopchannel 2, Song_ViridianCity_branch_ec271 + E_ 2 + octave 2 + B_ 4 + octave 3 + E_ 4 + octave 2 + B_ 2 + octave 3 + C# 2 + G# 2 + G# 2 + octave 2 + B_ 2 + octave 3 + F# 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + octave 2 + B_ 2 + octave 3 + D# 2 + octave 2 + B_ 2 + octave 3 + callchannel Song_ViridianCity_branch_ec2eb + A_ 2 + E_ 2 + A_ 2 + B_ 2 + A_ 2 + G# 2 + A_ 2 + F# 2 + G# 2 + E_ 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + C# 2 + G# 2 + C# 2 + D# 2 + B_ 2 + E_ 2 + G# 2 + E_ 2 + F# 2 + E_ 4 + G# 2 + F# 2 + D# 2 + octave 2 + B_ 2 + octave 3 + D# 4 + F# 2 + D# 2 + D# 2 + F# 2 + octave 2 + B_ 2 + octave 3 + E_ 2 + octave 2 + B_ 2 + octave 3 + D# 2 + octave 2 + B_ 2 + B_ 2 + octave 3 + D# 2 + notetype 12, 11, 6 + F# 8 + F# 4 + D# 4 + E_ 8 + notetype 12, 8, 4 + octave 2 + B_ 4 + octave 3 + E_ 2 + F# 2 + loopchannel 0, Song_ViridianCity_branch_ec1d6 + +Song_ViridianCity_branch_ec2de:: + octave 3 + F# 2 + D# 4 + E_ 2 + D# 4 + C# 4 + octave 2 + B_ 4 + octave 3 + C# 2 + D# 2 + C# 2 + endchannel + +Song_ViridianCity_branch_ec2eb:: + A_ 2 + E_ 2 + C# 2 + E_ 4 + A_ 2 + C# 2 + E_ 2 + endchannel + + +Song_ViridianCity_Ch1:: ; ec2f3 (3b:42f3) + vibrato 5, 1, 5 + callchannel Song_ViridianCity_branch_ec368 + octave 4 + G# 2 + notetype 12, 12, 4 + E_ 6 + notetype 12, 12, 5 + duty 3 + octave 3 + C# 4 + D# 4 + E_ 6 + F# 6 + G# 4 + callchannel Song_ViridianCity_branch_ec368 + octave 4 + G# 2 + notetype 12, 12, 4 + E_ 14 + duty 3 + octave 3 + E_ 6 + F# 6 + G# 4 + notetype 12, 11, 7 + duty 2 + vibrato 8, 1, 7 + octave 5 + C# 12 + octave 4 + A_ 4 + octave 5 + E_ 8 + F# 2 + E_ 2 + D# 2 + C# 2 + octave 4 + B_ 12 + G# 4 + B_ 16 + F# 12 + G# 2 + A_ 2 + B_ 4 + A_ 4 + G# 4 + F# 4 + G# 12 + E_ 4 + B_ 16 + octave 5 + C# 12 + D# 2 + E_ 2 + F# 4 + E_ 4 + D# 4 + C# 4 + octave 4 + B_ 12 + octave 5 + C# 2 + D# 2 + C# 4 + octave 4 + B_ 4 + A_ 4 + G# 4 + A_ 12 + B_ 2 + octave 5 + C_ 2 + C_ 4 + octave 4 + B_ 4 + A_ 4 + F# 4 + notetype 12, 11, 7 + A_ 8 + octave 5 + C_ 8 + octave 4 + B_ 14 + notetype 12, 8, 4 + G# 1 + notetype 12, 10, 4 + A_ 1 + loopchannel 0, Song_ViridianCity_Ch1 + +Song_ViridianCity_branch_ec368:: + duty 2 + notetype 12, 12, 3 + octave 4 + B_ 4 + A_ 4 + notetype 12, 12, 4 + G# 10 + notetype 12, 12, 3 + G# 2 + A_ 2 + B_ 4 + B_ 2 + A_ 2 + G# 2 + A_ 2 + notetype 12, 12, 4 + F# 10 + notetype 12, 12, 5 + duty 3 + octave 3 + E_ 4 + D# 8 + E_ 4 + F# 4 + notetype 12, 12, 3 + duty 2 + octave 4 + A_ 4 + G# 4 + notetype 12, 12, 4 + F# 10 + notetype 12, 12, 3 + F# 2 + G# 2 + A_ 4 + A_ 2 + G# 2 + F# 2 + endchannel + + +Song_ViridianCity_Ch2:: ; ec3a2 (3b:43a2) + notetype 12, 1, 1 + toggleperfectpitch + rest 1 + rest 2 + +Song_ViridianCity_branch_ec3a8:: + vibrato 0, 0, 0 + octave 4 + callchannel Song_ViridianCity_branch_ec438 + callchannel Song_ViridianCity_branch_ec438 + callchannel Song_ViridianCity_branch_ec441 + G# 2 + E_ 2 + F# 2 + G# 2 + rest 2 + E_ 2 + F# 2 + G# 2 + callchannel Song_ViridianCity_branch_ec438 + B_ 2 + E_ 2 + F# 2 + G# 2 + rest 2 + E_ 2 + F# 2 + G# 2 + callchannel Song_ViridianCity_branch_ec438 + callchannel Song_ViridianCity_branch_ec441 + G# 2 + E_ 2 + F# 2 + G# 2 + rest 2 + G# 2 + E_ 2 + B_ 2 + rest 2 + E_ 2 + F# 2 + E_ 2 + G# 2 + E_ 2 + B_ 2 + E_ 2 + vibrato 8, 2, 5 + A_ 8 + E_ 8 + A_ 8 + F# 8 + G# 8 + E_ 8 + G# 12 + E_ 4 + F# 2 + F# 2 + D# 2 + E_ 4 + F# 2 + D# 2 + E_ 2 + F# 2 + F# 2 + B_ 2 + A_ 2 + G# 2 + A_ 2 + G# 2 + F# 2 + G# 2 + G# 2 + E_ 2 + G# 2 + rest 2 + E_ 2 + F# 2 + G# 2 + rest 2 + E_ 2 + F# 2 + G# 2 + B_ 2 + A_ 2 + G# 2 + F# 2 + A_ 8 + E_ 8 + A_ 8 + B_ 2 + A_ 2 + G# 2 + F# 2 + G# 8 + E_ 8 + B_ 4 + E_ 4 + F# 4 + G# 4 + rest 2 + D# 2 + E_ 2 + F# 2 + rest 2 + F# 2 + B_ 2 + A_ 2 + A_ 4 + G# 4 + F# 2 + D# 2 + A_ 2 + F# 2 + rest 2 + E_ 2 + F# 2 + G# 2 + rest 2 + E_ 2 + F# 1 + G# 1 + E_ 1 + F# 1 + G# 4 + B_ 2 + A_ 2 + G# 2 + A_ 2 + G# 2 + F# 2 + loopchannel 0, Song_ViridianCity_branch_ec3a8 + +Song_ViridianCity_branch_ec438:: + rest 2 + E_ 2 + F# 2 + G# 2 + rest 2 + E_ 2 + F# 2 + G# 2 + endchannel + +Song_ViridianCity_branch_ec441:: + A_ 2 + F# 2 + G# 2 + A_ 2 + rest 2 + A_ 2 + G# 2 + F# 2 + rest 2 + F# 2 + G# 2 + A_ 2 + rest 2 + A_ 2 + G# 2 + F# 2 + D# 2 + D# 2 + E_ 2 + F# 2 + rest 2 + D# 2 + E_ 2 + F# 2 + rest 2 + D# 2 + E_ 2 + F# 2 + rest 2 + D# 2 + E_ 2 + F# 2 + endchannel + + +Song_ViridianCity_Ch3:: ; ec462 (3b:4462) + drumset 0 + +Song_ViridianCity_branch_ec464:: + dspeed 12 + callchannel Song_ViridianCity_branch_ec49f + +Song_ViridianCity_branch_ec469:: + callchannel Song_ViridianCity_branch_ec49f + callchannel Song_ViridianCity_branch_ec4a7 + callchannel Song_ViridianCity_branch_ec4a7 + loopchannel 2, Song_ViridianCity_branch_ec469 + callchannel Song_ViridianCity_branch_ec49f + callchannel Song_ViridianCity_branch_ec4b5 + callchannel Song_ViridianCity_branch_ec4ae + triangle1 6 + triangle1 6 + triangle2 4 + callchannel Song_ViridianCity_branch_ec4bd + callchannel Song_ViridianCity_branch_ec4b5 + callchannel Song_ViridianCity_branch_ec4ae + callchannel Song_ViridianCity_branch_ec4bd + callchannel Song_ViridianCity_branch_ec4ae + triangle1 6 + triangle1 6 + triangle2 2 + triangle1 2 + triangle1 6 + triangle1 6 + triangle1 4 + triangle1 6 + snare6 6 + snare6 4 + loopchannel 0, Song_ViridianCity_branch_ec464 + +Song_ViridianCity_branch_ec49f:: + snare6 6 + snare6 6 + snare6 4 + snare6 6 + snare6 6 + snare6 2 + snare6 2 + endchannel + +Song_ViridianCity_branch_ec4a7:: + snare6 6 + snare6 6 + snare6 4 + snare6 6 + snare6 6 + snare6 4 + endchannel + +Song_ViridianCity_branch_ec4ae:: + triangle1 6 + triangle1 6 + triangle2 4 + triangle1 6 + triangle1 6 + triangle2 4 + endchannel + +Song_ViridianCity_branch_ec4b5:: + triangle1 6 + triangle1 6 + triangle2 4 + triangle1 6 + triangle1 6 + triangle2 2 + triangle1 2 + endchannel + +Song_ViridianCity_branch_ec4bd:: + triangle1 6 + triangle1 6 + triangle2 2 + triangle2 2 + endchannel +; 0xec4c2 diff --git a/charmap.asm b/charmap.asm index 2f8b096..575a8eb 100644 --- a/charmap.asm +++ b/charmap.asm @@ -1,57 +1,9 @@ -; $00-$16 are TX_* constants (see macros/scripts/text.asm) + charmap "<NULL>", $00 -; Control characters (see home/text.asm) - - charmap "<PLAY_G>", $14 ; "<PLAYER>くん" or "<PLAYER>ちゃん"; same as "<PLAYER>" in English - charmap "<JP_18>", $18 ; "ノ゛"? (ungrammatical) - charmap "<NI>", $1d ; "に " - charmap "<TTE>", $1e ; "って" - charmap "<WO>", $1f ; "を " - - charmap "<TA!>", $22 ; "た!" - charmap "<KOUGEKI>", $23 ; "こうげき" - charmap "<WA>", $24 ; "は " - charmap "<NO>", $25 ; "の " - - charmap "<ROUTE>", $35 ; "ばん どうろ" - charmap "<WATASHI>", $36 ; "わたし" - charmap "<KOKO_WA>", $37 ; "ここは" - charmap "<RED>", $38 ; wRedsName - charmap "<GREEN>", $39 ; wGreensName - charmap "<ENEMY>", $3f - - charmap "<MOM>", $49 ; wMomsName - charmap "<GA>", $4a ; "が " - charmap "<_CONT>", $4b ; implements "<CONT>" - charmap "<SCROLL>", $4c - charmap "<NEXT>", $4e - charmap "<LINE>", $4f - - charmap "@", $50 ; string terminator - charmap "<PARA>", $51 - charmap "<PLAYER>", $52 ; wPlayerName - charmap "<RIVAL>", $53 ; wRivalName - charmap "#", $54 ; "POKé" - charmap "<CONT>", $55 - charmap "<……>", $56 ; "……" - charmap "<DONE>", $57 - charmap "<PROMPT>", $58 - charmap "<TARGET>", $59 - charmap "<USER>", $5a - charmap "<PC>", $5b ; "PC" - charmap "<TM>", $5c ; "TM" - charmap "<TRAINER>", $5d ; "TRAINER" - charmap "<ROCKET>", $5e ; "ROCKET" - charmap "<DEXEND>", $5f - -; Actual characters (from other graphics files) - - ; needed for _LoadFontsExtra1 (see engine/load_font.asm) - charmap "■", $60 ; gfx/font/black.2bpp - charmap "▲", $61 ; gfx/font/up_arrow.png - charmap "☎", $62 ; gfx/font/phone_icon.2bpp - -; Japanese kana + charmap "イ゛", $01 + charmap "ヴ", $02 + charmap "エ゛", $03 + charmap "オ゛", $04 charmap "ガ", $05 charmap "ギ", $06 @@ -69,11 +21,31 @@ charmap "デ", $12 charmap "ド", $13 + charmap "<PLAY_G>", $14 ; "<PLAYER>くん" or "<PLAYER>ちゃん" + + charmap "<15>", $15 ; nothing + charmap "<16>", $16 ; nothing + + charmap "ネ゛", $17 + charmap "ノ゛", $18 + charmap "バ", $19 charmap "ビ", $1a charmap "ブ", $1b charmap "ボ", $1c + charmap "<NI>", $1d ; "に " + charmap "<TTE>", $1e ; "って" + charmap "<WO>", $1f ; "を " + + charmap "ィ゛", $20 + charmap "あ゛", $21 + + charmap "<TA!>", $22 ; "た!" + charmap "<KOUGEKI>", $23 ; "こうげき" + charmap "<WA>", $24 ; "は " + charmap "<NO>", $25 ; "の " + charmap "が", $26 charmap "ぎ", $27 charmap "ぐ", $28 @@ -90,12 +62,20 @@ charmap "で", $33 charmap "ど", $34 + charmap "<ROUTE>", $35 ; "ばん どうろ" + charmap "<WATASHI>", $36 ; "わたし" + charmap "<KOKO_WA>", $37 ; "ここは" + charmap "<RED>", $38 ; wRedsName + charmap "<GREEN>", $39 ; wGreensName + charmap "ば", $3a charmap "び", $3b charmap "ぶ", $3c charmap "べ", $3d charmap "ぼ", $3e + charmap "<ENEMY>", $3f + charmap "パ", $40 charmap "ピ", $41 charmap "プ", $42 @@ -106,12 +86,61 @@ charmap "ぺ", $47 charmap "ぽ", $48 + charmap "<MOM>", $49 ; wMomsName + charmap "<GA>", $4a ; "が " + charmap "<_CONT>", $4b ; implements "<CONT>" + charmap "<SCROLL>", $4c + + charmap "も゜", $4d + + charmap "<NEXT>", $4e + charmap "<LINE>", $4f + charmap "@", $50 ; string terminator + charmap "<PARA>", $51 + charmap "<PLAYER>", $52 ; wPlayerName + charmap "<RIVAL>", $53 ; wRivalName + charmap "#", $54 ; "POKé" + charmap "<CONT>", $55 + charmap "<……>", $56 ; "……" + charmap "<DONE>", $57 + charmap "<PROMPT>", $58 + charmap "<TARGET>", $59 + charmap "<USER>", $5a + charmap "<PC>", $5b ; "PC" + charmap "<TM>", $5c ; "TM" + charmap "<TRAINER>", $5d ; "TRAINER" + charmap "<ROCKET>", $5e ; "ROCKET" + charmap "<DEXEND>", $5f + + charmap "■", $60 + charmap "▲", $61 + charmap "☎", $62 + + charmap "A", $60 + charmap "B", $61 + charmap "C", $62 + charmap "D", $63 + charmap "E", $64 + charmap "F", $65 + charmap "G", $66 + charmap "H", $67 + charmap "I", $68 + charmap "V", $69 + charmap "S", $6a + charmap "L", $6b + charmap "M", $6c + + charmap ":", $6d + + charmap "ぃ", $6e + charmap "ぅ", $6f + charmap "「", $70 charmap "」", $71 charmap "『", $72 charmap "』", $73 - charmap "·", $74 - charmap "⋯", $75 + charmap "・", $74 + charmap "…", $75 charmap "ぁ", $76 charmap "ぇ", $77 @@ -123,6 +152,7 @@ charmap "│", $7c charmap "└", $7d charmap "┘", $7e + charmap " ", $7f charmap "ア", $80 @@ -169,6 +199,7 @@ charmap "ワ", $a9 charmap "ヲ", $aa charmap "ン", $ab + charmap "ッ", $ac charmap "ャ", $ad charmap "ュ", $ae @@ -221,12 +252,14 @@ charmap "わ", $dc charmap "を", $dd charmap "ん", $de + charmap "っ", $df charmap "ゃ", $e0 charmap "ゅ", $e1 charmap "ょ", $e2 charmap "ー", $e3 + charmap "゚", $e4 charmap "゙", $e5 @@ -237,29 +270,27 @@ charmap "ァ", $e9 charmap "ゥ", $ea charmap "ェ", $eb - + charmap "▷", $ec charmap "▶", $ed charmap "▲", $ed charmap "▼", $ee charmap "♂", $ef - charmap "円", $f0 charmap "×", $f1 charmap ".", $f2 charmap "/", $f3 charmap "ォ", $f4 - - charmap "♀", $f5 - charmap "0", $f6 - charmap "1", $f7 - charmap "2", $f8 - charmap "3", $f9 - charmap "4", $fa - charmap "5", $fb - charmap "6", $fc - charmap "7", $fd - charmap "8", $fe - charmap "9", $ff + charmap "♀", $f5 + charmap "0", $f6 + charmap "1", $f7 + charmap "2", $f8 + charmap "3", $f9 + charmap "4", $fa + charmap "5", $fb + charmap "6", $fc + charmap "7", $fd + charmap "8", $fe + charmap "9", $ff diff --git a/constants.asm b/constants.asm index d9bf703..6909def 100644 --- a/constants.asm +++ b/constants.asm @@ -9,12 +9,16 @@ INCLUDE "constants/text_constants.asm" INCLUDE "constants/type_constants.asm" INCLUDE "constants/pokedex_constants.asm" +INCLUDE "constants/pokemon_constants.asm" INCLUDE "constants/pokemon_data_constants.asm" INCLUDE "constants/move_constants.asm" INCLUDE "constants/item_constants.asm" INCLUDE "constants/trainer_constants.asm" INCLUDE "constants/trainer_data_constants.asm" +INCLUDE "constants/sprite_constants.asm" INCLUDE "constants/battle_constants.asm" INCLUDE "constants/palette_constants.asm" INCLUDE "constants/serial_constants.asm" + +INCLUDE "constants/misc_constants.asm" diff --git a/constants/audio_constants.asm b/constants/audio_constants.asm index c341e90..8d25540 100644 --- a/constants/audio_constants.asm +++ b/constants/audio_constants.asm @@ -1,21 +1,3 @@ - - -; pitch - const_def - const __ - const C_ - const C# - const D_ - const D# - const E_ - const F_ - const F# - const G_ - const G# - const A_ - const A# - const B_ - ; channel const_def const CHAN1 diff --git a/constants/item_constants.asm b/constants/item_constants.asm index 017a58e..30af41c 100644 --- a/constants/item_constants.asm +++ b/constants/item_constants.asm @@ -262,3 +262,7 @@ NUM_TMS = const_value - ITEM_TM01 - 2 ; discount ITEM_C8 and ITEM_E1 NUM_HMS = const_value - ITEM_HM01 NUM_TMS_HMS = NUM_TMS + NUM_HMS + +; leftovers from pokered +ITEM_HM01_RED EQU $c4 +ITEM_TM01_RED EQU $c9 diff --git a/constants/misc_constants.asm b/constants/misc_constants.asm new file mode 100644 index 0000000..d01de98 --- /dev/null +++ b/constants/misc_constants.asm @@ -0,0 +1,24 @@ +; joypad + + const_def + const A_BUTTON_F + const B_BUTTON_F + const SELECT_F + const START_F + const D_RIGHT_F + const D_LEFT_F + const D_UP_F + const D_DOWN_F + +NO_INPUT EQU %00000000 +A_BUTTON EQU 1 << A_BUTTON_F +B_BUTTON EQU 1 << B_BUTTON_F +SELECT EQU 1 << SELECT_F +START EQU 1 << START_F +D_RIGHT EQU 1 << D_RIGHT_F +D_LEFT EQU 1 << D_LEFT_F +D_UP EQU 1 << D_UP_F +D_DOWN EQU 1 << D_DOWN_F + +BUTTONS EQU A_BUTTON | B_BUTTON | SELECT | START +D_PAD EQU D_RIGHT | D_LEFT | D_UP | D_DOWN diff --git a/constants/move_constants.asm b/constants/move_constants.asm index 1f04fe8..b7daf0e 100644 --- a/constants/move_constants.asm +++ b/constants/move_constants.asm @@ -94,7 +94,7 @@ const MOVE_DIG ; 5b const MOVE_TOXIC ; 5c const MOVE_CONFUSION ; 5d - const MOVE_PSYCHIC_M ; 5e + const MOVE_PSYCHIC ; 5e const MOVE_HYPNOSIS ; 5f const MOVE_MEDITATE ; 60 const MOVE_AGILITY ; 61 diff --git a/constants/name_constants.asm b/constants/name_constants.asm new file mode 100755 index 0000000..7e35ebb --- /dev/null +++ b/constants/name_constants.asm @@ -0,0 +1,2 @@ +; Name Lists
+ITEM_NAME EQU 4
\ No newline at end of file diff --git a/constants/palette_constants.asm b/constants/palette_constants.asm index 9f410a8..e9d6d79 100755 --- a/constants/palette_constants.asm +++ b/constants/palette_constants.asm @@ -1,5 +1,5 @@ const_def - const PAL_TOWN_00 ; 00 + const PAL_ROUTE ; 00 const PAL_TOWN_01 ; 01 const PAL_TOWN_02 ; 02 const PAL_TOWN_03 ; 03 @@ -24,19 +24,19 @@ const PAL_PINKMON ; 16 const PAL_YELLOWMON ; 17 const PAL_GREYMON ; 18 - const PAL_DARKMEWMON ; 19 - const PAL_DARKBLUEMON ; 1a - const PAL_DARKREDMON ; 1b - const PAL_DARKCYANMON ; 1c - const PAL_DARKPURPLEMON ; 1d - const PAL_DARKBROWNMON ; 1e - const PAL_TANMON ; 1f - const PAL_BLUEPINKMON ; 20 - const PAL_ORANGEMON ; 21 - const PAL_DARKGREYMON ; 22 - const PAL_GREENBAR ; 23 - const PAL_YELLOWBAR ; 24 - const PAL_REDBAR ; 25 + const PAL_SHINY_MEWMON ; 19 + const PAL_SHINY_BLUEMON ; 1a + const PAL_SHINY_REDMON ; 1b + const PAL_SHINY_CYANMON ; 1c + const PAL_SHINY_PURPLEMON ; 1d + const PAL_SHINY_BROWNMON ; 1e + const PAL_SHINY_GREENMON ; 1f + const PAL_SHINY_PINKMON ; 20 + const PAL_SHINY_YELLOWMON ; 21 + const PAL_SHINY_GREYMON ; 22 + const PAL_GREEN_BAR ; 23 + const PAL_YELLOW_BAR ; 24 + const PAL_RED_BAR ; 25 const PAL_TOWN_MAP ; 26 const PAL_LOGO_1 ; 27 const PAL_LOGO_2 ; 28 diff --git a/constants/pokemon_constants.asm b/constants/pokemon_constants.asm new file mode 100644 index 0000000..2678607 --- /dev/null +++ b/constants/pokemon_constants.asm @@ -0,0 +1,199 @@ +; old RBY index numbers +; used primarily for cries + const_def + const MON_NONE ; 00 + const MON_SIDON ; 01 RHYDON + const MON_GARURA ; 02 KANGASKHAN + const MON_NIDORAN_M ; 03 NIDORAN_M + const MON_PIPPI ; 04 CLEFAIRY + const MON_ONISUZUME ; 05 SPEAROW + const MON_BIRIRIDAMA ; 06 VOLTORB + const MON_NIDOKING ; 07 NIDOKING + const MON_YADORAN ; 08 SLOWBRO + const MON_FUSHIGISOU ; 09 IVYSAUR + const MON_NASSY ; 0a EXEGGUTOR + const MON_BERORINGA ; 0b LICKITUNG + const MON_TAMATAMA ; 0c EXEGGCUTE + const MON_BETBETER ; 0d GRIMER + const MON_GANGAR ; 0e GENGAR + const MON_NIDORAN_F ; 0f NIDORAN_F + const MON_NIDOQUEEN ; 10 NIDOQUEEN + const MON_KARAKARA ; 11 CUBONE + const MON_SIHORN ; 12 RHYHORN + const MON_LAPLACE ; 13 LAPRAS + const MON_WINDIE ; 14 ARCANINE + const MON_MEW ; 15 MEW + const MON_GYARADOS ; 16 GYARADOS + const MON_SHELLDER ; 17 SHELLDER + const MON_MENOKURAGE ; 18 TENTACOOL + const MON_GHOS ; 19 GASTLY + const MON_STRIKE ; 1a SCYTHER + const MON_HITODEMAN ; 1b STARYU + const MON_KAMEX ; 1c BLASTOISE + const MON_KAILIOS ; 1d PINSIR + const MON_MONJARA ; 1e TANGELA + const MON_KAPOERER ; 1f HITMONTOP + const MON_PUDIE ; 20 (baby GROWLITHE) + const MON_GARDIE ; 21 GROWLITHE + const MON_IWARK ; 22 ONIX + const MON_ONIDRILL ; 23 FEAROW + const MON_POPPO ; 24 PIDGEY + const MON_YADON ; 25 SLOWPOKE + const MON_YUNGERER ; 26 KADABRA + const MON_GOLONE ; 27 GRAVELER + const MON_LUCKY ; 28 CHANSEY + const MON_GORIKY ; 29 MACHOKE + const MON_BARRIERD ; 2a MR__MIME + const MON_SAWAMULAR ; 2b HITMONLEE + const MON_EBIWALAR ; 2c HITMONCHAN + const MON_ARBOK ; 2d ARBOK + const MON_PARASECT ; 2e PARASECT + const MON_KODUCK ; 2f PSYDUCK + const MON_SLEEPE ; 30 DROWZEE + const MON_GOLONYA ; 31 GOLEM + const MON_HANEKO ; 32 HOPPIP + const MON_BOOBER ; 33 MAGMAR + const MON_TAIL ; 34 AIPOM + const MON_ELEBOO ; 35 ELECTABUZZ + const MON_RARECOIL ; 36 MAGNETON + const MON_DOGARS ; 37 KOFFING + const MON_POPONEKO ; 38 SKIPLOOM + const MON_MANKEY ; 39 MANKEY + const MON_PAWOU ; 3a SEEL + const MON_DIGDA ; 3b DIGLETT + const MON_KENTAUROS ; 3c TAUROS + const MON_WATANEKO ; 3d JUMPLUFF + const MON_BARIRINA ; 3e MIME_JR (baby MR__MIME) + const MON_LIP ; 3f SMOOCHUM + const MON_KAMONEGI ; 40 FARFETCH_D + const MON_KONGPANG ; 41 VENONAT + const MON_KAIRYU ; 42 DRAGONITE + const MON_ELEBABY ; 43 ELEKID + const MON_BOOBY ; 44 MAGBY + const MON_KIREIHANA ; 45 BELLOSSOM + const MON_DODO ; 46 DODUO + const MON_NYOROMO ; 47 POLIWAG + const MON_ROUGELA ; 48 JYNX + const MON_FIRE ; 49 MOLTRES + const MON_FREEZER ; 4a ARTICUNO + const MON_THUNDER ; 4b ZAPDOS + const MON_METAMON ; 4c DITTO + const MON_NYARTH ; 4d MEOWTH + const MON_CRAB ; 4e KRABBY + const MON_TSUBOMITTO ; 4f (evolved WEEPINBELL) + const MON_MILTANK ; 50 MILTANK + const MON_BOMBSEEKER ; 51 (MISSINGNO) + const MON_ROKON ; 52 VULPIX + const MON_KYUKON ; 53 NINETALES + const MON_PIKACHU ; 54 PIKACHU + const MON_RAICHU ; 55 RAICHU + const MON_GIFT ; 56 DELIBIRD + const MON_KOTORA ; 57 (MISSINGNO) + const MON_MINIRYU ; 58 DRATINI + const MON_HAKURYU ; 59 DRAGONAIR + const MON_KABUTO ; 5a KABUTO + const MON_KABUTOPS ; 5b KABUTOPS + const MON_TATTU ; 5c HORSEA + const MON_SEADRA ; 5d SEADRA + const MON_RAITORA ; 5e (MISSINGNO) + const MON_MADAME ; 5f (evolved FARFETCH_D) + const MON_SAND ; 60 SANDSHREW + const MON_SANDPAN ; 61 SANDSLASH + const MON_OMNITE ; 62 OMANYTE + const MON_OMSTAR ; 63 OMASTAR + const MON_PURIN ; 64 JIGGLYPUFF + const MON_PUKURIN ; 65 WIGGLYTUFF + const MON_EIEVUI ; 66 EEVEE + const MON_BOOSTER ; 67 FLAREON + const MON_THUNDERS ; 68 JOLTEON + const MON_SHOWERS ; 69 VAPOREON + const MON_WANRIKY ; 6a MACHOP + const MON_ZUBAT ; 6b ZUBAT + const MON_ARBO ; 6c EKANS + const MON_PARAS ; 6d PARAS + const MON_NYOROZO ; 6e POLIWHIRL + const MON_NYOROBON ; 6f POLIWRATH + const MON_BEEDLE ; 70 WEEDLE + const MON_COCOON ; 71 KAKUNA + const MON_SPEAR ; 72 BEEDRILL + const MON_NOROWARA ; 73 (MISSINGNO) + const MON_DODORIO ; 74 DODRIO + const MON_OKORIZARU ; 75 PRIMEAPE + const MON_DUGTRIO ; 76 DUGTRIO + const MON_MORPHON ; 77 VENOMOTH + const MON_JUGON ; 78 DEWGONG + const MON_KYONPAN ; 79 (MISSINGNO) + const MON_YAMIKARASU ; 7a MURKROW + const MON_CATERPIE ; 7b CATERPIE + const MON_TRANSEL ; 7c METAPOD + const MON_BUTTERFREE ; 7d BUTTERFREE + const MON_KAIRIKY ; 7e MACHAMP + const MON_HAPPI ; 7f BLISSEY + const MON_GOLDUCK ; 80 GOLDUCK + const MON_SLEEPER ; 81 HYPNO + const MON_GOLBAT ; 82 GOLBAT + const MON_MEWTWO ; 83 MEWTWO + const MON_KABIGON ; 84 SNORLAX + const MON_KOIKING ; 85 MAGIKARP + const MON_SCISSORS ; 86 SCIZOR + const MON_PURAKKUSU ; 87 (evolved PINSIR) + const MON_BETBETON ; 88 MUK + const MON_DEVIL ; 89 HOUNDOUR + const MON_KINGLER ; 8a KINGLER + const MON_PARSHEN ; 8b CLOYSTER + const MON_HELGAA ; 8c HOUNDOOM + const MON_MARUMINE ; 8d ELECTRODE + const MON_PIXY ; 8e CLEFABLE + const MON_MATADOGAS ; 8f WEEZING + const MON_PERSIAN ; 90 PERSIAN + const MON_GARAGARA ; 91 MAROWAK + const MON_WOLFMAN ; 92 (MISSINGNO) + const MON_GHOST ; 93 HAUNTER + const MON_CASEY ; 94 ABRA + const MON_FOODIN ; 95 ALAKAZAM + const MON_PIGEON ; 96 PIDGEOTTO + const MON_PIGEOT ; 97 PIDGEOT + const MON_STARMIE ; 98 STARMIE + const MON_FUSHIGIDANE ; 99 BULBASAUR + const MON_FUSHIGIBANA ; 9a VENUSAUR + const MON_DOKUKURAGE ; 9b TENTACRUEL + const MON_WARWOLF ; 9c (MISSINGNO) + const MON_TOSAKINTO ; 9d GOLDEEN + const MON_AZUMAO ; 9e SEAKING + const MON_PORYGON2 ; 9f PORYGON2 + const MON_NAMEIL ; a0 LICKILICKY (evolved LICKITUNG) + const MON_HAGANEIL ; a1 STEELIX + const MON_KINGDRA ; a2 KINGDRA + const MON_PONYTA ; a3 PONYTA + const MON_GALLOP ; a4 RAPIDASH + const MON_KORATTA ; a5 RATTATA + const MON_RATTA ; a6 RATICATE + const MON_NIDORINO ; a7 NIDORINO + const MON_NIDORINA ; a8 NIDORINA + const MON_ISITSUBUTE ; a9 GEODUDE + const MON_PORYGON ; aa PORYGON + const MON_PTERA ; ab AERODACTYL + const MON_RAI ; ac RAIKOU + const MON_COIL ; ad MAGNEMITE + const MON_EN ; ae ENTEI + const MON_SUI ; af SUICUNE + const MON_HITOKAGE ; b0 CHARMANDER + const MON_ZENIGAME ; b1 SQUIRTLE + const MON_LIZARDO ; b2 CHARMELEON + const MON_KAMEIL ; b3 WARTORTLE + const MON_LIZARDON ; b4 CHARIZARD + const MON_NYULA ; b5 SNEASEL + const MON_HOUOU ; b6 HO_OH + const MON_TOGEPY ; b7 TOGEPI + const MON_BULU ; b8 SNUBBULL + const MON_NAZONOKUSA ; b9 ODDISH + const MON_KUSAIHANA ; ba GLOOM + const MON_RUFFRESIA ; bb VILEPLUME + const MON_MADATSUBOMI ; bc BELLSPROUT + const MON_UTSUDON ; bd WEEPINBELL + const MON_UTSUBOT ; be VICTREEBEL + +; LEAFY isn't in the table at 10:4B70 +; and its ID 0xFB will be found at +; 10:4117 (index 0x4A7 + 1 % 0x100 = 0xA8) +MON_LEAFY EQU MON_NIDORINA diff --git a/constants/serial.asm b/constants/serial.asm deleted file mode 100644 index e475798..0000000 --- a/constants/serial.asm +++ /dev/null @@ -1,17 +0,0 @@ -; serial - -ESTABLISH_CONNECTION_WITH_INTERNAL_CLOCK EQU $01 -ESTABLISH_CONNECTION_WITH_EXTERNAL_CLOCK EQU $02 - -USING_EXTERNAL_CLOCK EQU $01 -USING_INTERNAL_CLOCK EQU $02 -CONNECTION_NOT_ESTABLISHED EQU $ff - -; signals the start of an array of bytes transferred over the link cable -SERIAL_PREAMBLE_BYTE EQU $FD - -; this byte is used when there is no data to send -SERIAL_NO_DATA_BYTE EQU $FE - -; signals the end of one part of a patch list (there are two parts) for player/enemy party data -SERIAL_PATCH_LIST_PART_TERMINATOR EQU $FF diff --git a/constants/sprite_constants.asm b/constants/sprite_constants.asm new file mode 100644 index 0000000..50b5d84 --- /dev/null +++ b/constants/sprite_constants.asm @@ -0,0 +1,93 @@ + const_def + const SPRITE_NONE ; 00 + const SPRITE_GOLD ; 01 + const SPRITE_GOLD_BIKE ; 02 + const SPRITE_GOLD_SKATEBOARD ; 03 + const SPRITE_SILVER ; 04 + const SPRITE_OKIDO ; 05 PROF_OAK + const SPRITE_RED ; 06 + const SPRITE_BLUE ; 07 + const SPRITE_MASAKI ; 08 BILL + const SPRITE_ELDER ; 09 + const SPRITE_SAKAKI ; 0a GIOVANNI + const SPRITE_GANTETSU ; 0b KURT + const SPRITE_MOM ; 0c + const SPRITE_SILVERS_MOM ; 0d + const SPRITE_REDS_MOM ; 0e + const SPRITE_0F ; 0f duplicate SPRITE_REDS_MOM + const SPRITE_NANAMI ; 10 DAISY + const SPRITE_EVIL_OKIDO ; 11 EVIL_PROF_OAK + const SPRITE_KIKUKO ; 12 AGATHA + const SPRITE_HAYATO ; 13 FALKNER + const SPRITE_TSUKUSHI ; 14 BUGSY + const SPRITE_15 ; 15 duplicate SPRITE_TSUKUSHI + const SPRITE_ENOKI ; 16 MORTY + const SPRITE_MIKAN ; 17 JASMINE + const SPRITE_18 ; 18 duplicate SPRITE_MIKAN + const SPRITE_COOLTRAINER_M ; 19 + const SPRITE_1A ; 1a duplicate SPRITE_COOLTRAINER_M + const SPRITE_1B ; 1b duplicate SPRITE_COOLTRAINER_M + const SPRITE_1C ; 1c duplicate SPRITE_COOLTRAINER_M + const SPRITE_1D ; 1d duplicate SPRITE_COOLTRAINER_M + const SPRITE_1E ; 1e duplicate SPRITE_COOLTRAINER_M + const SPRITE_1F ; 1f duplicate SPRITE_COOLTRAINER_M + const SPRITE_20 ; 20 duplicate SPRITE_COOLTRAINER_M + const SPRITE_21 ; 21 duplicate SPRITE_COOLTRAINER_M + const SPRITE_22 ; 22 duplicate SPRITE_COOLTRAINER_M + const SPRITE_23 ; 23 duplicate SPRITE_COOLTRAINER_M + const SPRITE_24 ; 24 duplicate SPRITE_COOLTRAINER_M + const SPRITE_COOLTRAINER_F ; 25 + const SPRITE_BUG_CATCHER_BOY ; 26 + const SPRITE_TWIN ; 27 + const SPRITE_YOUNGSTER ; 28 + const SPRITE_LASS ; 29 + const SPRITE_TEACHER ; 2a + const SPRITE_GIRL ; 2b + const SPRITE_SUPER_NERD ; 2c + const SPRITE_ROCKER ; 2d + const SPRITE_POKEFAN_M ; 2e + const SPRITE_POKEFAN_F ; 2f + const SPRITE_GRAMPS ; 30 + const SPRITE_GRANNY ; 31 + const SPRITE_SWIMMER_M ; 32 + const SPRITE_SWIMMER_F ; 33 + const SPRITE_ROCKET_M ; 34 + const SPRITE_35 ; 35 duplicate SPRITE_ROCKET_M + const SPRITE_36 ; 36 duplicate SPRITE_ROCKET_M + const SPRITE_ROCKET_F ; 37 + const SPRITE_NURSE ; 38 + const SPRITE_LINK_RECEPTIONIST ; 39 + const SPRITE_CLERK ; 3a + const SPRITE_FISHER ; 3b + const SPRITE_FISHING_GURU ; 3c + const SPRITE_SCIENTIST ; 3d + const SPRITE_MEDIUM ; 3e + const SPRITE_SAGE ; 3f + const SPRITE_FROWNING_MAN ; 40 + const SPRITE_GENTLEMAN ; 41 + const SPRITE_BLACKBELT ; 42 + const SPRITE_RECEPTIONIST ; 43 + const SPRITE_OFFICER ; 44 + const SPRITE_CAPTAIN ; 45 + const SPRITE_46 ; 46 duplicate SPRITE_CAPTAIN + const SPRITE_47 ; 47 duplicate SPRITE_CAPTAIN + const SPRITE_MOHAWK ; 48 + const SPRITE_GYM_GUY ; 49 + const SPRITE_SAILOR ; 4a + const SPRITE_HELMET ; 4b + const SPRITE_BURGLAR ; 4c + const SPRITE_SIDON ; 4d RHYDON + const SPRITE_PIPPI ; 4e CLEFAIRY + const SPRITE_POPPO ; 4f PIDGEY + const SPRITE_LIZARDON ; 50 CHARIZARD + const SPRITE_KABIGON ; 51 SNORLAX + const SPRITE_PAWOU ; 52 SEEL + const SPRITE_NYOROBON ; 53 POLIWRATH + const SPRITE_LAPLACE ; 54 LAPRAS + const SPRITE_POKE_BALL ; 55 + const SPRITE_POKEDEX ; 56 + const SPRITE_PAPER ; 57 + const SPRITE_OLD_LINK_RECEPTIONIST ; 58 + const SPRITE_59 ; 59 duplicate SPRITE_OLD_LINK_RECEPTIONIST + const SPRITE_EGG ; 5a + const SPRITE_BOULDER ; 5b diff --git a/data/items/names.asm b/data/items/names.asm index a37acce..942af41 100644 --- a/data/items/names.asm +++ b/data/items/names.asm @@ -120,7 +120,7 @@ ItemNames:: db "おうじゃのべルト@" ; CHAMPION_BELT db "おふだ@" ; TAG db "のろいのおふだ@" ; SPELL_TAG - db "5えんだま@" ; 5_YEN_COIN + db "5えんだま@" ; 5_YEN_COIN db "まもりのいと@" ; GUARD_THREAD db "しげきだま@" ; STIMULUS_ORB db "おちつきのみ@" ; CALM_BERRY @@ -145,7 +145,7 @@ ItemNames:: db "こおりのビキニ@" ; ICE_BIKINI db "いかずちのキバ@" ; THUNDER_FANG db "ほのおのツメ@" ; FIRE_CLAW - db "2ほんのツノ@" ; TWIN_HORNS + db "2ほんのツノ@" ; TWIN_HORNS db "ごすんくぎ@" ; SPIKE db "きのみ@" ; BERRY db "りンゴ@" ; APPLE @@ -202,63 +202,63 @@ ItemNames:: db "みしよう@" ; C1 db "みしよう@" ; C2 db "みしよう@" ; C3 - db "わざマシン01@" ; TM01 - db "わざマシン02@" ; TM02 - db "わざマシン03@" ; TM03 - db "わざマシン04@" ; TM04 + db "わざマシン01@" ; TM01 + db "わざマシン02@" ; TM02 + db "わざマシン03@" ; TM03 + db "わざマシン04@" ; TM04 db "しようきんし@" ; C8 - db "わざマシン05@" ; TM05 - db "わざマシン06@" ; TM06 - db "わざマシン07@" ; TM07 - db "わざマシン08@" ; TM08 - db "わざマシン09@" ; TM09 - db "わざマシン10@" ; TM10 - db "わざマシン11@" ; TM11 - db "わざマシン12@" ; TM12 - db "わざマシン13@" ; TM13 - db "わざマシン14@" ; TM14 - db "わざマシン15@" ; TM15 - db "わざマシン16@" ; TM16 - db "わざマシン17@" ; TM17 - db "わざマシン18@" ; TM18 - db "わざマシン19@" ; TM19 - db "わざマシン20@" ; TM20 - db "わざマシン21@" ; TM21 - db "わざマシン22@" ; TM22 - db "わざマシン23@" ; TM23 - db "わざマシン24@" ; TM24 - db "わざマシン25@" ; TM25 - db "わざマシン26@" ; TM26 - db "わざマシン27@" ; TM27 - db "わざマシン28@" ; TM28 + db "わざマシン05@" ; TM05 + db "わざマシン06@" ; TM06 + db "わざマシン07@" ; TM07 + db "わざマシン08@" ; TM08 + db "わざマシン09@" ; TM09 + db "わざマシン10@" ; TM10 + db "わざマシン11@" ; TM11 + db "わざマシン12@" ; TM12 + db "わざマシン13@" ; TM13 + db "わざマシン14@" ; TM14 + db "わざマシン15@" ; TM15 + db "わざマシン16@" ; TM16 + db "わざマシン17@" ; TM17 + db "わざマシン18@" ; TM18 + db "わざマシン19@" ; TM19 + db "わざマシン20@" ; TM20 + db "わざマシン21@" ; TM21 + db "わざマシン22@" ; TM22 + db "わざマシン23@" ; TM23 + db "わざマシン24@" ; TM24 + db "わざマシン25@" ; TM25 + db "わざマシン26@" ; TM26 + db "わざマシン27@" ; TM27 + db "わざマシン28@" ; TM28 db "しようきんし@" ; E1 - db "わざマシン29@" ; TM29 - db "わざマシン30@" ; TM30 - db "わざマシン31@" ; TM31 - db "わざマシン32@" ; TM32 - db "わざマシン33@" ; TM33 - db "わざマシン34@" ; TM34 - db "わざマシン35@" ; TM35 - db "わざマシン36@" ; TM36 - db "わざマシン37@" ; TM37 - db "わざマシン38@" ; TM38 - db "わざマシン39@" ; TM39 - db "わざマシン40@" ; TM40 - db "わざマシン41@" ; TM41 - db "わざマシン42@" ; TM42 - db "わざマシン43@" ; TM43 - db "わざマシン44@" ; TM44 - db "わざマシン45@" ; TM45 - db "わざマシン46@" ; TM46 - db "わざマシン47@" ; TM47 - db "わざマシン48@" ; TM48 - db "わざマシン49@" ; TM49 - db "わざマシン50@" ; TM50 - db "ひでんマシン01@" ; HM01 - db "ひでんマシン02@" ; HM02 - db "ひでんマシン03@" ; HM03 - db "ひでんマシン04@" ; HM04 - db "ひでんマシン05@" ; HM05 - db "ひでんマシン06@" ; HM06 - db "ひでんマシン07@" ; HM07 + db "わざマシン29@" ; TM29 + db "わざマシン30@" ; TM30 + db "わざマシン31@" ; TM31 + db "わざマシン32@" ; TM32 + db "わざマシン33@" ; TM33 + db "わざマシン34@" ; TM34 + db "わざマシン35@" ; TM35 + db "わざマシン36@" ; TM36 + db "わざマシン37@" ; TM37 + db "わざマシン38@" ; TM38 + db "わざマシン39@" ; TM39 + db "わざマシン40@" ; TM40 + db "わざマシン41@" ; TM41 + db "わざマシン42@" ; TM42 + db "わざマシン43@" ; TM43 + db "わざマシン44@" ; TM44 + db "わざマシン45@" ; TM45 + db "わざマシン46@" ; TM46 + db "わざマシン47@" ; TM47 + db "わざマシン48@" ; TM48 + db "わざマシン49@" ; TM49 + db "わざマシン50@" ; TM50 + db "ひでんマシン01@" ; HM01 + db "ひでんマシン02@" ; HM02 + db "ひでんマシン03@" ; HM03 + db "ひでんマシン04@" ; HM04 + db "ひでんマシン05@" ; HM05 + db "ひでんマシン06@" ; HM06 + db "ひでんマシン07@" ; HM07 db "しようきんし@" ; FF diff --git a/data/maps/landmarks.asm b/data/maps/landmarks.asm new file mode 100644 index 0000000..314e4ba --- /dev/null +++ b/data/maps/landmarks.asm @@ -0,0 +1,50 @@ +INCLUDE "constants.asm" + +SECTION "LandmarkNames", ROMX[$4AAF], BANK[$3F] + +LandmarkNames:: + db "サイレント@" + db "オールド@" + db "ウエスト@" + db "ハイテク@" + db "フォント@" + db "バードン@" + db "ニュータイプ@" + db "シュガー@" + db "ブルーフォレスト@" + db "スタンド@" + db "カントー@" + db "プりンス@" + db "フジヤマ@" + db "サウス@" + db "ノース@" + db "15ばんどうろ@" + db "18ばんどうろ@" + db "はつでんしょ1@" + db "はつでんしょ2@" + db "はつでんしょ3@" + db "はつでんしょ4@" + db "いせき 1@" + db "いせき 2@" + db "はいこう1@" + db "はいこう2@" + db "はいこう3@" + db "はいこう4@" + db "はいこう5@" + db "はいこう6@" + db "はいこう7@" + db "アジト 1@" + db "アジト 2@" + db "アジト 3@" + db "ヤドンの いど1@" + db "ヤドンの いど2@" + db "#りーぐ1@" + db "#りーぐ1@" + db "#りーぐ2@" + db "#りーぐ3@" + db "#りーぐ4@" + db "#りーぐ5@" + db "#りーぐ6@" + db "#りーぐ7@" + db "#りーぐ7@" + db "しずかなおか@" diff --git a/data/moves/names.asm b/data/moves/names.asm index 2ca2749..db98d65 100644 --- a/data/moves/names.asm +++ b/data/moves/names.asm @@ -87,7 +87,7 @@ MoveNames:: db "りゅうのいかり@" ; DRAGON_RAGE db "ほのおのうず@" ; FIRE_SPIN db "でんきショック@" ; THUNDERSHOCK - db "10まんボルト@" ; THUNDERBOLT + db "10まんボルト@" ; THUNDERBOLT db "でんじは@" ; THUNDER_WAVE db "かみなり@" ; THUNDER db "いわおとし@" ; ROCK_THROW @@ -178,7 +178,7 @@ MoveNames:: db "いびき@" ; SNORE db "クギをうつ@" ; NAIL_DOWN db "じたばた@" ; FLAIL - db "テクスチャー2@" ; CONVERSION2 + db "テクスチャー2@" ; CONVERSION2 db "こばんなげ@" ; COIN_HURL db "わたほうし@" ; COTTON_SPORE db "きしかいせい@" ; REVERSAL diff --git a/data/pokemon/evos_attacks.asm b/data/pokemon/evos_attacks.asm index e78a5d0..c18757b 100644 --- a/data/pokemon/evos_attacks.asm +++ b/data/pokemon/evos_attacks.asm @@ -622,7 +622,7 @@ KongpangEvosAttacks: ; 42a1c db 35, MOVE_LEECH_LIFE db 42, MOVE_PSYBEAM db 49, MOVE_SLEEP_POWDER - db 56, MOVE_PSYCHIC_M + db 56, MOVE_PSYCHIC db 0 ; no more level-up moves MorphonEvosAttacks: ; 42a33 @@ -635,7 +635,7 @@ MorphonEvosAttacks: ; 42a33 db 40, MOVE_LEECH_LIFE db 48, MOVE_PSYBEAM db 56, MOVE_SLEEP_POWDER - db 64, MOVE_PSYCHIC_M + db 64, MOVE_PSYCHIC db 0 ; no more level-up moves DigdaEvosAttacks: ; 42a47 @@ -825,7 +825,7 @@ YungererEvosAttacks: ; 42b5d db 36, MOVE_RECOVER db 41, MOVE_REFLECT db 41, MOVE_LIGHT_SCREEN - db 46, MOVE_PSYCHIC_M + db 46, MOVE_PSYCHIC db 0 ; no more level-up moves FoodinEvosAttacks: ; 42b76 @@ -839,7 +839,7 @@ FoodinEvosAttacks: ; 42b76 db 36, MOVE_RECOVER db 41, MOVE_REFLECT db 41, MOVE_LIGHT_SCREEN - db 46, MOVE_PSYCHIC_M + db 46, MOVE_PSYCHIC db 0 ; no more level-up moves WanrikyEvosAttacks: ; 42b8c @@ -1032,7 +1032,7 @@ YadonEvosAttacks: ; 42cb3 db 22, MOVE_WATER_GUN db 31, MOVE_HEADBUTT db 41, MOVE_AMNESIA - db 52, MOVE_PSYCHIC_M + db 52, MOVE_PSYCHIC db 0 ; no more level-up moves YadoranEvosAttacks: ; 42cc6 @@ -1045,7 +1045,7 @@ YadoranEvosAttacks: ; 42cc6 db 37, MOVE_WITHDRAW db 39, MOVE_HEADBUTT db 51, MOVE_AMNESIA - db 64, MOVE_PSYCHIC_M + db 64, MOVE_PSYCHIC db 0 ; no more level-up moves CoilEvosAttacks: ; 42cdc @@ -1269,7 +1269,7 @@ SleepeEvosAttacks: ; 42e30 db 26, MOVE_POISON_GAS db 31, MOVE_MEDITATE db 36, MOVE_STALKER - db 41, MOVE_PSYCHIC_M + db 41, MOVE_PSYCHIC db 46, MOVE_CONFUSE_RAY db 0 ; no more level-up moves @@ -1283,7 +1283,7 @@ SleeperEvosAttacks: ; 42e49 db 31, MOVE_POISON_GAS db 37, MOVE_MEDITATE db 43, MOVE_STALKER - db 49, MOVE_PSYCHIC_M + db 49, MOVE_PSYCHIC db 55, MOVE_CONFUSE_RAY db 0 ; no more level-up moves @@ -1994,7 +1994,7 @@ MewtwoEvosAttacks: ; 432bf db 46, MOVE_RECOVER db 58, MOVE_SAFEGUARD db 71, MOVE_BARRIER - db 85, MOVE_PSYCHIC_M + db 85, MOVE_PSYCHIC db 100, MOVE_AMNESIA db 0 ; no more level-up moves @@ -2465,7 +2465,7 @@ KokumoEvosAttacks: ; 435a2 db 26, MOVE_BITE db 34, MOVE_SPIDER_WEB db 43, MOVE_NIGHT_SHADE - db 53, MOVE_PSYCHIC_M + db 53, MOVE_PSYCHIC db 0 ; no more level-up moves TwoheadEvosAttacks: ; 435b9 @@ -2478,7 +2478,7 @@ TwoheadEvosAttacks: ; 435b9 db 31, MOVE_BITE db 40, MOVE_SPIDER_WEB db 50, MOVE_NIGHT_SHADE - db 61, MOVE_PSYCHIC_M + db 61, MOVE_PSYCHIC db 0 ; no more level-up moves YoroidoriEvosAttacks: ; 435cd @@ -2644,7 +2644,7 @@ YadokingEvosAttacks: ; 436b6 db 37, MOVE_SWAGGER db 39, MOVE_HEADBUTT db 51, MOVE_AMNESIA - db 64, MOVE_PSYCHIC_M + db 64, MOVE_PSYCHIC db 0 ; no more level-up moves AnnonEvosAttacks: ; 436ca @@ -2697,7 +2697,7 @@ EifieEvosAttacks: ; 436ff db 42, MOVE_AGILITY db 49, MOVE_REFLECT db 56, MOVE_LIGHT_SCREEN - db 63, MOVE_PSYCHIC_M + db 63, MOVE_PSYCHIC db 0 ; no more level-up moves BlackyEvosAttacks: ; 43715 @@ -2998,7 +2998,7 @@ NorowaraEvosAttacks: ; 438d5 db 35, MOVE_CONFUSION db 46, MOVE_NIGHT_SHADE db 58, MOVE_SUBSTITUTE - db 71, MOVE_PSYCHIC_M + db 71, MOVE_PSYCHIC db 85, MOVE_PAIN_SPLIT db 100, MOVE_NAIL_DOWN db 0 ; no more level-up moves diff --git a/data/pokemon/names.asm b/data/pokemon/names.asm index 29cf7e2..54d5263 100644 --- a/data/pokemon/names.asm +++ b/data/pokemon/names.asm @@ -182,7 +182,7 @@ PokemonNames:: db "ネイティオ" ; NATIO db "ギョピン@" ; GYOPIN db "マりル@@" ; MARIL - db "マンボー1" ; MANBO1 + db "マンボー1" ; MANBO1 db "イカり@@" ; IKARI db "グロテス@" ; GROTESS db "エクシング" ; EKSING @@ -241,7 +241,7 @@ PokemonNames:: db "へルガー@" ; HELGAA db "ウルフマン" ; WOLFMAN db "ワーウルフ" ; WARWOLF - db "ポりゴン2" ; PORYGON2 + db "ポりゴン2" ; PORYGON2 db "ナメール@" ; NAMEIL db "ハガネール" ; HAGANEIL db "キングドラ" ; KINGDRA diff --git a/data/pokemon_palettes.inc b/data/pokemon/palettes.inc index 41ca0d5..41ca0d5 100755 --- a/data/pokemon_palettes.inc +++ b/data/pokemon/palettes.inc diff --git a/data/predef_pointers.inc b/data/predef_pointers.inc index ca710dd..0cc8d67 100644 --- a/data/predef_pointers.inc +++ b/data/predef_pointers.inc @@ -24,8 +24,8 @@ PredefPointers:: ; 1:62d3 add_predef Function_cdf9 add_predef Function_ce10_2 add_predef Function_cd33 -Function_366cPredef:: - dbw 3, Function_366c +GiveItemPredef:: + dbw 3, GiveItem add_predef Function_ce3c add_predef Function_da28 add_predef Function_d886 diff --git a/data/sprites/sprites.asm b/data/sprites/sprites.asm new file mode 100644 index 0000000..b901b7a --- /dev/null +++ b/data/sprites/sprites.asm @@ -0,0 +1,102 @@ +INCLUDE "constants.asm" + +SECTION "OverworldSprites", ROMX[$423B], BANK[$05] + +overworld_sprite: MACRO +; pointer, length, bank + dw \1 + db \2 tiles, BANK(\1) +ENDM + +OverworldSprites:: + overworld_sprite GoldSpriteGFX, 12 + overworld_sprite GoldBikeSpriteGFX, 12 + overworld_sprite GoldSkateboardSpriteGFX, 12 + overworld_sprite SilverSpriteGFX, 12 + overworld_sprite OkidoSpriteGFX, 12 + overworld_sprite RedSpriteGFX, 12 + overworld_sprite BlueSpriteGFX, 12 + overworld_sprite MasakiSpriteGFX, 12 + overworld_sprite ElderSpriteGFX, 12 + overworld_sprite SakakiSpriteGFX, 12 + overworld_sprite GantetsuSpriteGFX, 12 + overworld_sprite MomSpriteGFX, 12 + overworld_sprite SilversMomSpriteGFX, 12 + overworld_sprite RedsMomSpriteGFX, 12 + overworld_sprite RedsMomSpriteGFX, 12 + overworld_sprite NanamiSpriteGFX, 12 + overworld_sprite EvilOkidoSpriteGFX, 12 + overworld_sprite KikukoSpriteGFX, 12 + overworld_sprite HayatoSpriteGFX, 12 + overworld_sprite TsukushiSpriteGFX, 12 + overworld_sprite TsukushiSpriteGFX, 12 + overworld_sprite EnokiSpriteGFX, 12 + overworld_sprite MikanSpriteGFX, 12 + overworld_sprite MikanSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerMSpriteGFX, 12 + overworld_sprite CooltrainerFSpriteGFX, 12 + overworld_sprite BugCatcherBoySpriteGFX, 12 + overworld_sprite TwinSpriteGFX, 12 + overworld_sprite YoungsterSpriteGFX, 12 + overworld_sprite LassSpriteGFX, 12 + overworld_sprite TeacherSpriteGFX, 12 + overworld_sprite GirlSpriteGFX, 12 + overworld_sprite SuperNerdSpriteGFX, 12 + overworld_sprite RockerSpriteGFX, 12 + overworld_sprite PokefanMSpriteGFX, 12 + overworld_sprite PokefanFSpriteGFX, 12 + overworld_sprite GrampsSpriteGFX, 12 + overworld_sprite GrannySpriteGFX, 12 + overworld_sprite SwimmerMSpriteGFX, 12 + overworld_sprite SwimmerFSpriteGFX, 12 + overworld_sprite RocketMSpriteGFX, 12 + overworld_sprite RocketMSpriteGFX, 12 + overworld_sprite RocketMSpriteGFX, 12 + overworld_sprite RocketFSpriteGFX, 12 + overworld_sprite NurseSpriteGFX, 12 + overworld_sprite LinkReceptionistSpriteGFX, 12 + overworld_sprite ClerkSpriteGFX, 12 + overworld_sprite FisherSpriteGFX, 12 + overworld_sprite FishingGuruSpriteGFX, 12 + overworld_sprite ScientistSpriteGFX, 12 + overworld_sprite MediumSpriteGFX, 12 + overworld_sprite SageSpriteGFX, 12 + overworld_sprite FrowningManSpriteGFX, 12 + overworld_sprite GentlemanSpriteGFX, 12 + overworld_sprite BlackbeltSpriteGFX, 12 + overworld_sprite ReceptionistSpriteGFX, 12 + overworld_sprite OfficerSpriteGFX, 12 + overworld_sprite CaptainSpriteGFX, 12 + overworld_sprite CaptainSpriteGFX, 12 + overworld_sprite CaptainSpriteGFX, 12 + overworld_sprite MohawkSpriteGFX, 12 + overworld_sprite GymGuySpriteGFX, 12 + overworld_sprite SailorSpriteGFX, 12 + overworld_sprite HelmetSpriteGFX, 12 + overworld_sprite BurglarSpriteGFX, 12 + overworld_sprite SidonSpriteGFX, 12 + overworld_sprite PippiSpriteGFX, 12 + overworld_sprite PoppoSpriteGFX, 12 + overworld_sprite LizardonSpriteGFX, 12 + overworld_sprite KabigonSpriteGFX, 4 + overworld_sprite PawouSpriteGFX, 12 + overworld_sprite NyorobonSpriteGFX, 12 + overworld_sprite LaplaceSpriteGFX, 12 + overworld_sprite PokeBallSpriteGFX, 4 + overworld_sprite PokedexSpriteGFX, 4 + overworld_sprite PaperSpriteGFX, 4 + overworld_sprite OldLinkReceptionistSpriteGFX, 4 + overworld_sprite OldLinkReceptionistSpriteGFX, 4 + overworld_sprite EggSpriteGFX, 4 + overworld_sprite BoulderSpriteGFX, 4 diff --git a/data/super_palettes.inc b/data/super_palettes.inc index 052bcaf..cf654c3 100644 --- a/data/super_palettes.inc +++ b/data/super_palettes.inc @@ -1,5 +1,5 @@ SuperPalettes:: - RGB 28,28,28, 23,21,16, 15,20,20, 04,04,04 ; TOWN_00 + RGB 28,28,28, 23,21,16, 15,20,20, 04,04,04 ; ROUTE RGB 28,28,28, 25,24,29, 15,20,20, 04,04,04 ; TOWN_01 RGB 28,28,28, 11,31,03, 15,20,20, 04,04,04 ; TOWN_02 RGB 28,28,28, 18,18,18, 15,20,20, 04,04,04 ; TOWN_03 @@ -24,19 +24,19 @@ SuperPalettes:: RGB 28,28,28, 30,22,24, 28,15,21, 04,04,04 ; PINKMON RGB 28,28,28, 31,28,14, 26,20,00, 04,04,04 ; YELLOWMON RGB 28,28,28, 26,21,22, 15,15,18, 04,04,04 ; GREYMON - RGB 28,28,28, 23,19,13, 14,12,17, 04,04,04 ; DARKMEWMON - RGB 28,28,28, 16,18,21, 10,12,18, 04,04,04 ; DARKBLUEMON - RGB 28,28,28, 22,15,16, 17,02,05, 04,04,04 ; DARKREDMON - RGB 28,28,28, 15,20,20, 05,16,16, 04,04,04 ; DARKCYANMON - RGB 28,28,28, 23,15,19, 14,04,12, 04,04,04 ; DARKPURPLEMON - RGB 28,28,28, 20,17,18, 18,13,11, 04,04,04 ; DARKBROWNMON - RGB 28,28,28, 23,21,16, 12,12,10, 04,04,04 ; TANMON - RGB 28,28,28, 21,25,29, 30,22,24, 04,04,04 ; BLUEPINKMON - RGB 28,28,28, 26,23,16, 29,14,09, 04,04,04 ; ORANGEMON - RGB 28,28,28, 18,18,18, 10,10,10, 04,04,04 ; DARKGREYMON - RGB 28,28,28, 30,26,15, 09,20,11, 04,04,04 ; GREENBAR - RGB 28,28,28, 30,26,15, 26,20,00, 04,04,04 ; YELLOWBAR - RGB 28,28,28, 30,26,15, 26,10,06, 04,04,04 ; REDBAR + RGB 28,28,28, 23,19,13, 14,12,17, 04,04,04 ; SHINY_MEWMON + RGB 28,28,28, 16,18,21, 10,12,18, 04,04,04 ; SHINY_BLUEMON + RGB 28,28,28, 22,15,16, 17,02,05, 04,04,04 ; SHINY_REDMON + RGB 28,28,28, 15,20,20, 05,16,16, 04,04,04 ; SHINY_CYANMON + RGB 28,28,28, 23,15,19, 14,04,12, 04,04,04 ; SHINY_PURPLEMON + RGB 28,28,28, 20,17,18, 18,13,11, 04,04,04 ; SHINY_BROWNMON + RGB 28,28,28, 23,21,16, 12,12,10, 04,04,04 ; SHINY_GREENMON + RGB 28,28,28, 21,25,29, 30,22,24, 04,04,04 ; SHINY_PINKMON + RGB 28,28,28, 26,23,16, 29,14,09, 04,04,04 ; SHINY_YELLOWMON + RGB 28,28,28, 18,18,18, 10,10,10, 04,04,04 ; SHINY_GREYMON + RGB 28,28,28, 30,26,15, 09,20,11, 04,04,04 ; GREEN_BAR + RGB 28,28,28, 30,26,15, 26,20,00, 04,04,04 ; YELLOW_BAR + RGB 28,28,28, 30,26,15, 26,10,06, 04,04,04 ; RED_BAR RGB 28,28,28, 20,26,31, 17,23,10, 04,04,04 ; TOWN_MAP if def(GOLD) RGB 28,28,28, 24,20,10, 21,00,04, 04,04,04 ; LOGO_1 diff --git a/data/trainers/parties.asm b/data/trainers/parties.asm index d31c34c..f91aba7 100644 --- a/data/trainers/parties.asm +++ b/data/trainers/parties.asm @@ -16,6 +16,8 @@ INCLUDE "data/trainers/party_pointers.inc" ; TODO: decode all data if def(GOLD) +HayatoGroup:: + SECTION "Trainer Parties 1 TEMPORARY", ROMX[$51BF],BANK[$E] AkaneGroup:: BugCatcherBoyGroup:: @@ -29,168 +31,239 @@ BugCatcherBoyGroup:: db 9, DEX_REDIBA, ITEM_NONE, MOVE_SCRATCH, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE db -1 ; end -SECTION "Trainer Parties 2 TEMPORARY", ROMX[$52B4],BANK[$E] -MikanGroup:: - -SECTION "Trainer Parties 3 TEMPORARY", ROMX[$53BC],BANK[$E] -OkidoGroup:: +; Leftover Bug Catcher data from Red/Blue + db 6, MON_BEEDLE, MON_CATERPIE, 0 + db 7, MON_BEEDLE, MON_COCOON, MON_BEEDLE, 0 + db 9, MON_BEEDLE, 0 + db 10, MON_CATERPIE, MON_BEEDLE, MON_CATERPIE, 0 + db 9, MON_BEEDLE, MON_COCOON, MON_CATERPIE, MON_TRANSEL, 0 + db 11, MON_CATERPIE, MON_TRANSEL, 0 + db 11, MON_BEEDLE, MON_COCOON, 0 + db 10, MON_CATERPIE, MON_TRANSEL, MON_CATERPIE, 0 + db 14, MON_CATERPIE, MON_BEEDLE, 0 + db 16, MON_BEEDLE, MON_CATERPIE, MON_BEEDLE, 0 + db 20, MON_BUTTERFREE, 0 + db 18, MON_TRANSEL, MON_CATERPIE, MON_KONGPANG, 0 + db 19, MON_SPEAR, MON_SPEAR, 0 + db 20, MON_CATERPIE, MON_BEEDLE, MON_KONGPANG, 0 -SECTION "Trainer Parties 4 TEMPORARY", ROMX[$54B6],BANK[$E] -WataruGroup:: - -SECTION "Trainer Parties 5 TEMPORARY", ROMX[$54DC],BANK[$E] -GerugeMemberMGroup:: - -SECTION "Trainer Parties 6 TEMPORARY", ROMX[$54FA],BANK[$E] -Trio1Group:: -BeautyGroup:: - ; BEAUTY_MEGUMI - db "めぐみ@", TRAINERTYPE_ITEM_MOVES - db 10, DEX_NYARTH, ITEM_NONE, MOVE_PAY_DAY, MOVE_GROWL, MOVE_NONE, MOVE_NONE +TsukishiGroup:: +LassGroup:: + ; LASS_ATSUKO + db "あつこ@", TRAINERTYPE_ITEM_MOVES + db 8, DEX_NAZONOKUSA, ITEM_NONE + ; No moves? db -1 ; end -SECTION "Trainer Parties 7 TEMPORARY", ROMX[$55F4],BANK[$E] -FledglingGroup:: +; Leftover Lass data from Red/Blue + db 9, MON_POPPO, MON_POPPO, 0 + db 10, MON_KORATTA, MON_NIDORAN_M, 0 + db 14, MON_PURIN, 0 + db 31, MON_PARAS, MON_PARAS, MON_PARASECT, 0 + db 11, MON_NAZONOKUSA, MON_MADATSUBOMI, 0 + db 14, MON_PIPPI, 0 + db 16, MON_POPPO, MON_NIDORAN_F, 0 + db 14, MON_POPPO, MON_NIDORAN_F, 0 + db 15, MON_NIDORAN_M, MON_NIDORAN_F, 0 + db 13, MON_NAZONOKUSA, MON_POPPO, MON_NAZONOKUSA, 0 + db 18, MON_POPPO, MON_NIDORAN_F, 0 + db 18, MON_KORATTA, MON_PIKACHU, 0 + db 23, MON_NIDORAN_F, MON_NIDORINA, 0 + db 24, MON_NYARTH, MON_NYARTH, MON_NYARTH, 0 + db 19, MON_POPPO, MON_KORATTA, MON_NIDORAN_M, MON_NYARTH, MON_PIKACHU, 0 + db 22, MON_PIPPI, MON_PIPPI, 0 + db 23, MON_MADATSUBOMI, MON_UTSUDON, 0 + db 23, MON_NAZONOKUSA, MON_KUSAIHANA, 0 -SECTION "Trainer Parties 8 TEMPORARY", ROMX[$56D7],BANK[$E] -PokeManiacGroup:: +EnokiGroup:: +; Leftover Sailor data from Red/Blue + db 18, MON_WANRIKY, MON_SHELLDER, 0 + db 17, MON_WANRIKY, MON_MENOKURAGE, 0 + db 21, MON_SHELLDER, 0 + db 17, MON_TATTU, MON_SHELLDER, MON_MENOKURAGE, 0 + db 18, MON_MENOKURAGE, MON_HITODEMAN, 0 + db 17, MON_TATTU, MON_TATTU, MON_TATTU, 0 + db 20, MON_WANRIKY, 0 + db 21, MON_PIKACHU, MON_PIKACHU, 0 -SECTION "Trainer Parties 9 TEMPORARY", ROMX[$57C5],BANK[$E] -GentlemanGroup:: +OkeraGroup:: +; Leftover Jr.Trainer♂ data from Red/Blue + db 11, MON_DIGDA, MON_SAND, 0 + db 14, MON_KORATTA, MON_ARBO, 0 + db 18, MON_MANKEY, 0 + db 20, MON_ZENIGAME, 0 + db 16, MON_ONISUZUME, MON_RATTA, 0 + db 18, MON_DIGDA, MON_DIGDA, MON_SAND, 0 + db 21, MON_GARDIE, MON_HITOKAGE, 0 + db 19, MON_KORATTA, MON_DIGDA, MON_ARBO, MON_SAND, 0 + db 29, MON_NIDORAN_M, MON_NIDORINO, 0 + +SECTION "Trainer Parties 4 TEMPORARY", ROMX[$52B4],BANK[$E] +MikanGroup:: -SECTION "Trainer Parties 10 TEMPORARY", ROMX[$57E9],BANK[$E] -TeacherMGroup:: +SECTION "Trainer Parties 5 TEMPORARY", ROMX[$5320],BANK[$E] +BlueGroup:: -SECTION "Trainer Parties 11 TEMPORARY", ROMX[$57F5],BANK[$E] -TeacherFGroup:: +SECTION "Trainer Parties 6 TEMPORARY", ROMX[$533D],BANK[$E] +GamaGroup:: -SECTION "Trainer Parties 12 TEMPORARY", ROMX[$57FB],BANK[$E] -ManchildGroup:: +SECTION "Trainer Parties 7 TEMPORARY", ROMX[$5375],BANK[$E] +RivalGroup:: + db 5, DEX_KURUSU, 0 + db 5, DEX_HAPPA, 0 + db 5, DEX_HONOGUMA, 0 -SECTION "Trainer Parties 13 TEMPORARY", ROMX[$58CC],BANK[$E] -RockerGroup:: +SECTION "Trainer Parties 8 TEMPORARY", ROMX[$53BC],BANK[$E] +OkidoGroup:: -SECTION "Trainer Parties 14 TEMPORARY", ROMX[$58FB],BANK[$E] -HikerGroup:: +SECTION "Trainer Parties 9 TEMPORARY", ROMX[$5404],BANK[$E] +SakakiGroup:: -SECTION "Trainer Parties 15 TEMPORARY", ROMX[$59A2],BANK[$E] -KimonoGirlGroup:: - ; KIMONO_GIRL_TAMAO - db "たまお@", TRAINERTYPE_ITEM_MOVES - db 12, DEX_PURIN, ITEM_NONE, MOVE_CHARM, MOVE_ENCORE, MOVE_POUND, MOVE_NONE - db -1 ; end +SECTION "Trainer Parties 10 TEMPORARY", ROMX[$5427],BANK[$E] +ProtagonistGroup:: - ; KIMONO_GIRL_KOUME - db "こうめ@", TRAINERTYPE_ITEM_MOVES - db 10, DEX_PIPPI, ITEM_NONE, MOVE_CHARM, MOVE_SWEET_KISS, MOVE_POUND, MOVE_NONE +SECTION "Trainer Parties 11 TEMPORARY", ROMX[$5433],BANK[$E] +SibaGroup:: +KasumiGroup:: +FisherGroup:: + ; FISHER_HISASHI + db "ひさし@", TRAINERTYPE_ITEM_MOVES + db 8, DEX_PUKU, ITEM_NONE + ; No moves? db -1 ; end -SECTION "Trainer Parties 16 TEMPORARY", ROMX[$518A],BANK[$E] -HayatoGroup:: - -SECTION "Trainer Parties 17 TEMPORARY", ROMX[$521A],BANK[$E] -TsukishiGroup:: -LassGroup:: +SECTION "Trainer Parties 12 TEMPORARY", ROMX[$5472],BANK[$E] +KannaGroup:: -SECTION "Trainer Parties 18 TEMPORARY", ROMX[$526F],BANK[$E] -EnokiGroup:: +SECTION "Trainer Parties 13 TEMPORARY", ROMX[$54B6],BANK[$E] +WataruGroup:: -SECTION "Trainer Parties 19 TEMPORARY", ROMX[$528F],BANK[$E] -OkeraGroup:: +SECTION "Trainer Parties 14 TEMPORARY", ROMX[$54DC],BANK[$E] +GerugeMemberMGroup:: -SECTION "Trainer Parties 20 TEMPORARY", ROMX[$533D],BANK[$E] -GamaGroup:: +SECTION "Trainer Parties 15 TEMPORARY", ROMX[$54FA],BANK[$E] +Trio1Group:: +BeautyGroup:: + ; BEAUTY_MEGUMI + db "めぐみ@", TRAINERTYPE_ITEM_MOVES + db 10, DEX_NYARTH, ITEM_NONE, MOVE_PAY_DAY, MOVE_GROWL, MOVE_NONE, MOVE_NONE + db -1 ; end -SECTION "Trainer Parties 21 TEMPORARY", ROMX[$554B],BANK[$E] +SECTION "Trainer Parties 16 TEMPORARY", ROMX[$554B],BANK[$E] Trio2Group:: -SECTION "Trainer Parties 22 TEMPORARY", ROMX[$555D],BANK[$E] +SECTION "Trainer Parties 17 TEMPORARY", ROMX[$555D],BANK[$E] Trio3Group:: -SECTION "Trainer Parties 23 TEMPORARY", ROMX[$567C],BANK[$E] -ProfessionalMGroup:: -ProfessionalFGroup:: +SECTION "Trainer Parties 18 TEMPORARY", ROMX[$5566],BANK[$E] +RocketFGroup:: -SECTION "Trainer Parties 24 TEMPORARY", ROMX[$581B],BANK[$E] -SwimmerMGroup:: +SECTION "Trainer Parties 19 TEMPORARY", ROMX[$5587],BANK[$E] +YoungsterGroup:: -SECTION "Trainer Parties 25 TEMPORARY", ROMX[$582A],BANK[$E] -SuperNerdGroup:: +SECTION "Trainer Parties 20 TEMPORARY", ROMX[$55F4],BANK[$E] +FledglingGroup:: -SECTION "Trainer Parties 26 TEMPORARY", ROMX[$583C],BANK[$E] -EngineerGroup:: +SECTION "Trainer Parties 21 TEMPORARY", ROMX[$5658],BANK[$E] +ProdigyGroup:: -SECTION "Trainer Parties 27 TEMPORARY", ROMX[$596E],BANK[$E] -JugglerGroup:: +SECTION "Trainer Parties 22 TEMPORARY", ROMX[$567C],BANK[$E] +ProfessionalMGroup:: +ProfessionalFGroup:: -SECTION "Trainer Parties 28 TEMPORARY", ROMX[$597A],BANK[$E] -TwinsGroup:: +SECTION "Trainer Parties 23 TEMPORARY", ROMX[$56D7],BANK[$E] +PokeManiacGroup:: -SECTION "Trainer Parties 29 TEMPORARY", ROMX[$597F],BANK[$E] -SchoolboyGroup:: - ; SCHOOLBOY_TETSUYA - db "てつや@", TRAINERTYPE_ITEM_MOVES - db 9, DEX_YADOKING, ITEM_NONE, MOVE_DISABLE, MOVE_CONFUSION, MOVE_NONE, MOVE_NONE - db -1 ; end +SECTION "Trainer Parties 24 TEMPORARY", ROMX[$5795],BANK[$E] +RocketMGroup:: -SECTION "Trainer Parties 30 TEMPORARY", ROMX[$598C],BANK[$E] -FirebreatherGroup:: - ; FIREBREATHER_AKITO - db "あきと@", TRAINERTYPE_ITEM_MOVES - db 10, DEX_BOOBY, ITEM_NONE, MOVE_SCRATCH, MOVE_SMOG, MOVE_NONE, MOVE_NONE - db -1 ; end +SECTION "Trainer Parties 25 TEMPORARY", ROMX[$57C5],BANK[$E] +GentlemanGroup:: -SECTION "Trainer Parties 31 TEMPORARY", ROMX[$5320],BANK[$E] -BlueGroup:: +SECTION "Trainer Parties 26 TEMPORARY", ROMX[$57E9],BANK[$E] +TeacherMGroup:: +; Leftover Bruno data from Red/Blue + db -1, 53, MON_IWARK, 55, MON_EBIWALAR, 55, MON_SAWAMULAR, 56, MON_IWARK, 58, MON_KAIRIKY, 0 -SECTION "Trainer Parties 32 TEMPORARY", ROMX[$5375],BANK[$E] -RivalGroup:: +TeacherFGroup:: +; Leftover Brock data from Red/Blue + db -1, 12, MON_ISITSUBUTE, 14, MON_IWARK, 0 -SECTION "Trainer Parties 33 TEMPORARY", ROMX[$5404],BANK[$E] -SakakiGroup:: +ManchildGroup:: +; Leftover Misty data from Red/Blue + db -1, 18, MON_HITODEMAN, 21, MON_STARMIE, 0 -SECTION "Trainer Parties 34 TEMPORARY", ROMX[$5427],BANK[$E] -ProtagonistGroup:: +; Leftover Lt.Surge data from Red/Blue + db -1, 21, MON_BIRIRIDAMA, 18, MON_PIKACHU, 24, MON_RAICHU, 0 -SECTION "Trainer Parties 35 TEMPORARY", ROMX[$5433],BANK[$E] -SibaGroup:: -KasumiGroup:: -FisherGroup:: +; Leftover Erika data from Red/Blue + db -1, 29, MON_UTSUBOT, 24, MON_MONJARA, 29, MON_RUFFRESIA, 0 -SECTION "Trainer Parties 36 TEMPORARY", ROMX[$5472],BANK[$E] -KannaGroup:: +SwimmerFGroup:: +; Leftover Koga data from Red/Blue + db -1, 37, MON_DOGARS, 39, MON_BETBETON, 37, MON_DOGARS, 43, MON_MATADOGAS, 0 -SECTION "Trainer Parties 37 TEMPORARY", ROMX[$5566],BANK[$E] -RocketFGroup:: +SwimmerMGroup:: + db 10, DEX_BARIRINA, DEX_KIRINRIKI, DEX_PUCHICORN, 0 -SECTION "Trainer Parties 38 TEMPORARY", ROMX[$5587],BANK[$E] -YoungsterGroup:: +SailorGroup:: +; Leftover Sabrina data from Red/Blue + db -1, 38, MON_YUNGERER, 37, MON_BARRIERD, 38, MON_MORPHON, 43, MON_FOODIN, 0 -SECTION "Trainer Parties 39 TEMPORARY", ROMX[$5658],BANK[$E] -ProdigyGroup:: +SuperNerdGroup:: -SECTION "Trainer Parties 40 TEMPORARY", ROMX[$5795],BANK[$E] -RocketMGroup:: +SECTION "Trainer Parties 27 TEMPORARY", ROMX[$583C],BANK[$E] +EngineerGroup:: -SECTION "Trainer Parties 41 TEMPORARY", ROMX[$5811],BANK[$E] -SwimmerFGroup:: +SECTION "Trainer Parties 28 TEMPORARY", ROMX[$58CC],BANK[$E] +RockerGroup:: -SECTION "Trainer Parties 42 TEMPORARY", ROMX[$5820],BANK[$E] -SailorGroup:: +SECTION "Trainer Parties 29 TEMPORARY", ROMX[$58FB],BANK[$E] +HikerGroup:: -SECTION "Trainer Parties 43 TEMPORARY", ROMX[$5907],BANK[$E] +SECTION "Trainer Parties 30 TEMPORARY", ROMX[$5907],BANK[$E] BikerGroup:: - -SECTION "Trainer Parties 44 TEMPORARY", ROMX[$5956],BANK[$E] +; Leftover Channeler data from Red/Blue + db 22, MON_GHOS, 0 + db 24, MON_GHOS, 0 + db 23, MON_GHOS, MON_GHOS, 0 + db 24, MON_GHOS, 0 + db 23, MON_GHOS, 0 + db 24, MON_GHOS, 0 + db 24, MON_GHOST, 0 + db 22, MON_GHOS, 0 + db 24, MON_GHOS, 0 + db 23, MON_GHOS, MON_GHOS, 0 + db 24, MON_GHOS, 0 + db 22, MON_GHOS, 0 + db 24, MON_GHOS, 0 + db 23, MON_GHOST, 0 + db 24, MON_GHOS, 0 + db 22, MON_GHOS, 0 + db 24, MON_GHOS, 0 + db 22, MON_GHOST, 0 + db 22, MON_GHOS, MON_GHOS, MON_GHOS, 0 + db 24, MON_GHOS, 0 + db 24, MON_GHOS, 0 + db 34, MON_GHOS, MON_GHOST, 0 + db 38, MON_GHOST, 0 + db 33, MON_GHOS, MON_GHOS, MON_GHOST, 0 + +SECTION "Trainer Parties 31 TEMPORARY", ROMX[$5956],BANK[$E] RockClimberGroup:: +; Leftover Agatha data from Red/Blue + db -1, 56, MON_GANGAR, 56, MON_GOLBAT, 55, MON_GHOST, 58, MON_ARBOK, 60, MON_GANGAR, 0 -SECTION "Trainer Parties 45 TEMPORARY", ROMX[$5962],BANK[$E] BurglarGroup:: +; Leftover Lance data from Red/Blue + db -1, 58, MON_GYARADOS, 56, MON_HAKURYU, 56, MON_HAKURYU, 60, MON_PTERA, 62, MON_KAIRYU, 0 + +JugglerGroup:: + db 6, DEX_MARIL, DEX_GYOPIN, 0 -SECTION "Trainer Parties 46 TEMPORARY", ROMX[$5972],BANK[$E] BlackbeltGroup:: + db 6, DEX_PY, DEX_GYOPIN, 0 -SECTION "Trainer Parties 47 TEMPORARY", ROMX[$5976],BANK[$E] PsychicGroup:: KungFuMasterGroup:: FortuneTellerGroup:: @@ -199,14 +272,39 @@ SageGroup:: MediumGroup:: SoldierGroup:: GerugeMemberFGroup:: + db 12, DEX_SHIBIREFUGU, DEX_MADAME, 0 + +TwinsGroup:: + db 13, DEX_MADAME, DEX_ELEBABY, DEX_MIZUUO, 0 + +SchoolboyGroup:: + ; SCHOOLBOY_TETSUYA + db "てつや@", TRAINERTYPE_ITEM_MOVES + db 9, DEX_YADOKING, ITEM_NONE, MOVE_DISABLE, MOVE_CONFUSION, MOVE_NONE, MOVE_NONE + db -1 ; end + +FirebreatherGroup:: + ; FIREBREATHER_AKITO + db "あきと@", TRAINERTYPE_ITEM_MOVES + db 10, DEX_BOOBY, ITEM_NONE, MOVE_SCRATCH, MOVE_SMOG, MOVE_NONE, MOVE_NONE + db -1 ; end -SECTION "Trainer Parties 48 TEMPORARY", ROMX[$5999],BANK[$E] SportsmanGroup:: ; SPORTSMAN_SHIGEKI db "しげき@", TRAINERTYPE_ITEM db 8, DEX_DONPHAN, ITEM_NONE db -1 ; end +KimonoGirlGroup:: + ; KIMONO_GIRL_TAMAO + db "たまお@", TRAINERTYPE_ITEM_MOVES + db 12, DEX_PURIN, ITEM_NONE, MOVE_CHARM, MOVE_ENCORE, MOVE_POUND, MOVE_NONE + db -1 ; end + + ; KIMONO_GIRL_KOUME + db "こうめ@", TRAINERTYPE_ITEM_MOVES + db 10, DEX_PIPPI, ITEM_NONE, MOVE_CHARM, MOVE_SWEET_KISS, MOVE_POUND, MOVE_NONE + db -1 ; end else diff --git a/data/wild.asm b/data/wild.asm new file mode 100644 index 0000000..515985d --- /dev/null +++ b/data/wild.asm @@ -0,0 +1,645 @@ +INCLUDE "constants.asm" + +SECTION "Wild Pokémon", ROMX[$6A3C], BANK[$0F] + +GrassWildMons:: ; f:6a3c + + db $01, $01 ; map group, map id + db 8 percent, 8 percent, 8 percent ; encounter rates: morn/day/nite + ; morn +if def(GOLD) + db 7, DEX_SUNNY + db 3, DEX_SUNNY + db 5, DEX_SUNNY +else + db 8, DEX_POPPO + db 8, DEX_POPPO + db 7, DEX_POPPO +endc + db 5, DEX_PIKACHU + db 5, DEX_POPPO + db 5, DEX_POPPO + ; day + db 4, DEX_KORATTA + db 6, DEX_KIRINRIKI + db 4, DEX_KIRINRIKI +if def(GOLD) + db 4, DEX_HANEKO +else + db 4, DEX_MARIL +endc + db 4, DEX_POPPO + db 8, DEX_KORATTA + ; nite + db 7, DEX_KORATTA + db 5, DEX_KORATTA + db 5, DEX_KORATTA +if def(GOLD) + db 7, DEX_KORATTA + db 8, DEX_KORATTA +else + db 5, DEX_HOHO + db 3, DEX_HOHO +endc + db 5, DEX_PIKACHU + + db $01, $02 ; map group, map id + db 8 percent, 8 percent, 8 percent ; encounter rates: morn/day/nite + ; morn +if def(GOLD) + db 6, DEX_SUNNY + db 6, DEX_SUNNY + db 6, DEX_SUNNY +else + db 8, DEX_POPPO + db 8, DEX_POPPO + db 6, DEX_POPPO +endc + db 5, DEX_PIKACHU + db 4, DEX_ARBO + db 5, DEX_KORATTA + ; day + db 5, DEX_POPPO + db 7, DEX_YOROIDORI + db 5, DEX_KORATTA +if def(GOLD) + db 8, DEX_HANEKO +else + db 8, DEX_MARIL +endc + db 4, DEX_POPPO + db 7, DEX_KORATTA + ; nite + db 7, DEX_KORATTA + db 6, DEX_ARBO +if def(GOLD) + db 6, DEX_KORATTA +else + db 6, DEX_HOHO +endc + db 7, DEX_ARBO + db 8, DEX_KORATTA + db 5, DEX_PIKACHU + + db $02, $01 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 9, DEX_CATERPIE + db 9, DEX_TRANSEL + db 8, DEX_CATERPIE + db 7, DEX_TRANSEL + db 10, DEX_POPPO + db 7, DEX_CATERPIE + ; day + db 8, DEX_CATERPIE + db 9, DEX_POPPO + db 11, DEX_KORATTA + db 9, DEX_KORATTA + db 10, DEX_KORATTA + db 8, DEX_CATERPIE + ; nite + db 9, DEX_KORATTA + db 10, DEX_HOHO + db 11, DEX_NAZONOKUSA + db 12, DEX_HOHO + db 11, DEX_NAZONOKUSA + db 13, DEX_NAZONOKUSA + + db $06, $01 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 19, DEX_METAMON + db 20, DEX_ONIDRILL + db 18, DEX_METAMON + db 17, DEX_TRANSEL + db 21, DEX_ONIDRILL + db 17, DEX_METAMON + ; day + db 17, DEX_ONISUZUME + db 18, DEX_ONISUZUME + db 21, DEX_DODO + db 19, DEX_DODO + db 20, DEX_DODO + db 18, DEX_METAMON + ; nite + db 19, DEX_SLEEPE + db 20, DEX_SLEEPE + db 21, DEX_SLEEPE + db 22, DEX_SLEEPE + db 23, DEX_SLEEPE + db 23, DEX_SLEEPE + + db $04, $01 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 12, DEX_TAMATAMA + db 12, DEX_KONGPANG + db 11, DEX_TAMATAMA + db 10, DEX_KONGPANG + db 13, DEX_ONISUZUME + db 10, DEX_TAMATAMA + ; day + db 11, DEX_ONISUZUME + db 12, DEX_ONISUZUME + db 14, DEX_ISITSUBUTE + db 12, DEX_ISITSUBUTE + db 13, DEX_ISITSUBUTE + db 11, DEX_TAMATAMA + ; nite + db 12, DEX_ARBO + db 13, DEX_ARBO + db 14, DEX_ARBO + db 15, DEX_ARBO + db 16, DEX_ARBO + db 16, DEX_ARBO + + db $04, $02 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 25, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 20, DEX_MENOKURAGE + db 15, DEX_MENOKURAGE + db 35, DEX_HANEEI + db 15, DEX_MENOKURAGE + ; day + db 20, DEX_MENOKURAGE + db 35, DEX_DOKUKURAGE + db 35, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + ; nite + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 35, DEX_MENOKURAGE + db 40, DEX_MENOKURAGE + db 35, DEX_HANEEI + db 45, DEX_MENOKURAGE + + db $05, $01 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 25, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 20, DEX_MENOKURAGE + db 15, DEX_MENOKURAGE + db 35, DEX_HANEEI + db 15, DEX_MENOKURAGE + ; day + db 20, DEX_MENOKURAGE + db 35, DEX_DOKUKURAGE + db 35, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + ; nite + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 35, DEX_MENOKURAGE + db 40, DEX_MENOKURAGE + db 35, DEX_HANEEI + db 45, DEX_MENOKURAGE + + db $05, $02 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 25, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 20, DEX_MENOKURAGE + db 15, DEX_MENOKURAGE + db 35, DEX_HANEEI + db 15, DEX_MENOKURAGE + ; day + db 20, DEX_MENOKURAGE + db 35, DEX_DOKUKURAGE + db 35, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + ; nite + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 35, DEX_MENOKURAGE + db 40, DEX_MENOKURAGE + db 35, DEX_HANEEI + db 45, DEX_MENOKURAGE + + db $05, $03 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 16, DEX_WANRIKY + db 16, DEX_WANRIKY + db 15, DEX_WANRIKY + db 14, DEX_WANRIKY + db 17, DEX_ONISUZUME + db 14, DEX_WANRIKY + ; day + db 15, DEX_ONISUZUME + db 16, DEX_ONISUZUME + db 18, DEX_KORATTA + db 16, DEX_KORATTA + db 17, DEX_KORATTA + db 15, DEX_ONISUZUME + ; nite + db 16, DEX_SLEEPE + db 17, DEX_SLEEPE + db 18, DEX_SLEEPE + db 19, DEX_SLEEPE + db 20, DEX_SLEEPE + db 20, DEX_SLEEPE + + db $05, $04 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 17, DEX_ONISUZUME + db 17, DEX_ONISUZUME + db 16, DEX_ONISUZUME + db 15, DEX_ONISUZUME + db 18, DEX_DODO + db 15, DEX_ONISUZUME + ; day + db 16, DEX_DODO + db 17, DEX_DONPHAN + db 19, DEX_SAND + db 17, DEX_SAND + db 18, DEX_SAND + db 16, DEX_DODO + ; nite + db 17, DEX_DODO + db 18, DEX_DODO + db 19, DEX_DODO + db 20, DEX_DODO + db 21, DEX_BULU + db 21, DEX_BULU + + db $06, $02 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 21, DEX_ONISUZUME + db 21, DEX_ONISUZUME + db 20, DEX_ONIDRILL + db 19, DEX_ONIDRILL + db 22, DEX_ONIDRILL + db 19, DEX_ONISUZUME + ; day + db 20, DEX_DODO + db 22, DEX_SANDPAN + db 21, DEX_DONPHAN + db 21, DEX_SAND + db 23, DEX_SAND + db 20, DEX_DODO + ; nite + db 21, DEX_DODO + db 22, DEX_DODO + db 23, DEX_DODO + db 24, DEX_DODO + db 25, DEX_BULU + db 25, DEX_BULU + + db $06, $03 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 23, DEX_HANEKO + db 23, DEX_POPONEKO + db 22, DEX_HANEKO + db 25, DEX_POPONEKO + db 24, DEX_SAND + db 21, DEX_HANEKO + ; day + db 22, DEX_SAND + db 23, DEX_SANDPAN + db 25, DEX_ROKON + db 23, DEX_ROKON + db 21, DEX_MIKON + db 22, DEX_HANEKO + ; nite + db 23, DEX_HOHO + db 24, DEX_HOHO + db 25, DEX_HOHO + db 26, DEX_HOHO + db 27, DEX_BULU + db 27, DEX_BULU + + db $07, $01 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 24, DEX_HANEKO + db 24, DEX_POPONEKO + db 23, DEX_HANEKO + db 22, DEX_POPONEKO + db 25, DEX_POPONEKO + db 22, DEX_HANEKO + ; day + db 23, DEX_POPPO + db 24, DEX_PIGEON + db 26, DEX_ROKON + db 24, DEX_ROKON + db 25, DEX_ROKON + db 23, DEX_HANEKO + ; nite + db 24, DEX_HOHO + db 25, DEX_HOHO + db 26, DEX_SLEEPE + db 27, DEX_SLEEPE + db 28, DEX_SLEEPER + db 28, DEX_SLEEPER + + db $08, $01 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 25, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 20, DEX_MENOKURAGE + db 15, DEX_MENOKURAGE + db 35, DEX_IKARI + db 15, DEX_MENOKURAGE + ; day + db 20, DEX_MENOKURAGE + db 35, DEX_DOKUKURAGE + db 35, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + ; nite + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 35, DEX_MENOKURAGE + db 40, DEX_MENOKURAGE + db 35, DEX_IKARI + db 45, DEX_MENOKURAGE + + db $07, $02 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 28, DEX_HANEKO + db 28, DEX_POPONEKO + db 27, DEX_HANEKO + db 27, DEX_POPONEKO + db 30, DEX_POPONEKO + db 27, DEX_HANEKO + ; day + db 28, DEX_POPPO + db 29, DEX_PIGEON + db 31, DEX_ROKON + db 29, DEX_ROKON + db 30, DEX_ROKON + db 28, DEX_HANEKO + ; nite + db 29, DEX_HOHO + db 31, DEX_HOHO + db 32, DEX_SLEEPE + db 33, DEX_SLEEPE + db 34, DEX_SLEEPER + db 34, DEX_SLEEPER + + db $07, $03 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 28, DEX_REDIBA + db 28, DEX_MANKEY + db 27, DEX_REDIBA + db 28, DEX_MANKEY + db 31, DEX_MANKEY + db 28, DEX_POPPO + ; day + db 29, DEX_MANKEY + db 30, DEX_PIGEON + db 32, DEX_ROKON + db 30, DEX_WOLFMAN + db 31, DEX_WOLFMAN + db 29, DEX_REDIBA + ; nite + db 30, DEX_WOLFMAN + db 33, DEX_WOLFMAN + db 34, DEX_SLEEPE + db 35, DEX_WOLFMAN + db 36, DEX_SLEEPER + db 36, DEX_WOLFMAN + + db $09, $01 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 29, DEX_REDIBA + db 29, DEX_MILTANK + db 28, DEX_REDIBA + db 29, DEX_MILTANK + db 32, DEX_MANKEY + db 29, DEX_REDIBA + ; day + db 30, DEX_MANKEY + db 31, DEX_OKORIZARU + db 33, DEX_NYOROMO + db 31, DEX_NYOROZO + db 32, DEX_NYOROMO + db 30, DEX_REDIBA + ; nite + db 31, DEX_WOLFMAN + db 34, DEX_WOLFMAN + db 35, DEX_WOLFMAN + db 36, DEX_WOLFMAN + db 37, DEX_WOLFMAN + db 37, DEX_WOLFMAN + + db $09, $02 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 32, DEX_MILTANK + db 32, DEX_MILTANK + db 31, DEX_MILTANK + db 32, DEX_MILTANK + db 35, DEX_OKORIZARU + db 32, DEX_REDIBA + ; day + db 33, DEX_MANKEY + db 34, DEX_OKORIZARU + db 36, DEX_NYOROMO + db 34, DEX_NYOROZO + db 35, DEX_NYOROZO + db 33, DEX_REDIBA + ; nite + db 34, DEX_WOLFMAN + db 37, DEX_WOLFMAN + db 38, DEX_WOLFMAN + db 39, DEX_WOLFMAN + db 40, DEX_WARWOLF + db 40, DEX_WARWOLF + + db $0a, $01 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 29, DEX_KARAKARA + db 29, DEX_GARAGARA + db 28, DEX_KARAKARA + db 29, DEX_GARAGARA + db 32, DEX_SIHORN + db 29, DEX_KARAKARA + ; day + db 30, DEX_SIHORN + db 31, DEX_SIHORN + db 33, DEX_YOROIDORI + db 31, DEX_YOROIDORI + db 32, DEX_YOROIDORI + db 30, DEX_KARAKARA + ; nite + db 31, DEX_ARBO + db 34, DEX_ARBO + db 35, DEX_ARBOK + db 36, DEX_ARBOK + db 37, DEX_ARBO + db 37, DEX_ARBOK + + db $0b, $01 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 28, DEX_PICHU + db 28, DEX_PICHU + db 27, DEX_PIKACHU + db 28, DEX_NAZONOKUSA + db 31, DEX_KUSAIHANA + db 28, DEX_PIKACHU + ; day + db 29, DEX_NAZONOKUSA + db 30, DEX_PAINTER + db 32, DEX_NYARTH + db 32, DEX_RATTA + db 31, DEX_NYARTH + db 29, DEX_NAZONOKUSA + ; nite + db 31, DEX_RATTA + db 33, DEX_ARBO + db 34, DEX_ARBOK + db 35, DEX_ARBOK + db 36, DEX_ARBO + db 36, DEX_ARBOK + + db $01, $03 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 29, DEX_PICHU + db 29, DEX_PICHU + db 28, DEX_PIKACHU + db 29, DEX_NAZONOKUSA + db 32, DEX_KUSAIHANA + db 27, DEX_PIKACHU + ; day + db 28, DEX_NAZONOKUSA + db 29, DEX_PAINTER + db 32, DEX_NYARTH + db 32, DEX_RATTA + db 30, DEX_NYARTH + db 28, DEX_NAZONOKUSA + ; nite + db 30, DEX_RATTA + db 32, DEX_HOHO + db 33, DEX_ARBO + db 34, DEX_HOHO + db 35, DEX_ARBOK + db 35, DEX_HOHO + + db $05, $05 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 25, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 20, DEX_MENOKURAGE + db 15, DEX_MENOKURAGE + db 35, DEX_HANEEI + db 15, DEX_MENOKURAGE + ; day + db 20, DEX_MENOKURAGE + db 35, DEX_DOKUKURAGE + db 35, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + ; nite + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 35, DEX_MENOKURAGE + db 40, DEX_MENOKURAGE + db 35, DEX_HANEEI + db 45, DEX_MENOKURAGE + + db $05, $06 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 25, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 20, DEX_MENOKURAGE + db 15, DEX_MENOKURAGE + db 35, DEX_HANEEI + db 15, DEX_MENOKURAGE + ; day + db 20, DEX_MENOKURAGE + db 35, DEX_DOKUKURAGE + db 35, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + ; nite + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 35, DEX_MENOKURAGE + db 40, DEX_MENOKURAGE + db 35, DEX_HANEEI + db 45, DEX_MENOKURAGE + + db $09, $03 ; map group, map id + db 6 percent, 10 percent, 14 percent ; encounter rates: morn/day/nite + ; morn + db 25, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 20, DEX_MENOKURAGE + db 15, DEX_MENOKURAGE + db 35, DEX_DOKUKURAGE + db 15, DEX_MENOKURAGE + ; day + db 20, DEX_MENOKURAGE + db 35, DEX_DOKUKURAGE + db 35, DEX_MENOKURAGE + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + ; nite + db 25, DEX_MENOKURAGE + db 30, DEX_MENOKURAGE + db 35, DEX_MENOKURAGE + db 40, DEX_MENOKURAGE + db 35, DEX_DOKUKURAGE + db 45, DEX_MENOKURAGE + + db $01, $0F ; map group, map id + db 8 percent, 8 percent, 8 percent ; encounter rates: morn/day/nite + ; morn + db 7, DEX_REDIBA + db 7, DEX_REDIBA + db 5, DEX_TRANSEL + db 5, DEX_PIKACHU + db 7, DEX_POPPO + db 5, DEX_POPPO + ; day + db 6, DEX_POPPO + db 4, DEX_CATERPIE + db 6, DEX_CATERPIE +if def(GOLD) + db 6, DEX_HANEKO +else + db 6, DEX_MARIL +endc + db 5, DEX_CATERPIE + db 8, DEX_REDIBA + ; nite + db 4, DEX_TRANSEL + db 6, DEX_KORATTA +if def(GOLD) + db 6, DEX_CATERPIE +else + db 5, DEX_HOHO +endc + db 6, DEX_REDIBA + db 5, DEX_TRANSEL + db 5, DEX_PIKACHU + + db $FF +; f:6e3e diff --git a/engine/landmarks.asm b/engine/landmarks.asm new file mode 100644 index 0000000..9e3c95d --- /dev/null +++ b/engine/landmarks.asm @@ -0,0 +1,11 @@ +INCLUDE "constants.asm" + +SECTION "GetLandmarkName", ROMX[$4AA5], BANK[$3F] + +GetLandmarkName:: + dec a + ld hl, LandmarkNames + call GetNthString + ld d, h + ld e, l + ret diff --git a/engine/link/place_waiting_text.asm b/engine/link/place_waiting_text.asm index c617dec..bfe9d7e 100644 --- a/engine/link/place_waiting_text.asm +++ b/engine/link/place_waiting_text.asm @@ -15,7 +15,7 @@ PlaceWaitingText:: ; 1:4000 .link_textbox ; TODO ; predef Predef_LinkTextbox - ld a, $1C + ld a, $1c call Predef .textbox_done hlcoord 4, 11 diff --git a/engine/menu/main_menu.asm b/engine/menu/main_menu.asm index 5701eba..536123f 100644 --- a/engine/menu/main_menu.asm +++ b/engine/menu/main_menu.asm @@ -4,7 +4,7 @@ SECTION "Main Menu Definition", ROMX[$5418], BANK[$01] MainMenuHeader: db $40 - db 0, 0, 7, 13 + db $00, $00, $07, $0d dw .data db 1 ; default option @@ -26,7 +26,7 @@ PokegearGFX:: INCBIN "gfx/pokegear/pokegear.2bpp" SECTION "Super Palettes", ROMX[$5B4C], BANK[$02] -INCLUDE "data/pokemon_palettes.inc" +INCLUDE "data/pokemon/palettes.inc" INCLUDE "data/super_palettes.inc" SECTION "Unused SGB Border GFX", ROMX[$62CC], BANK[$02] @@ -156,6 +156,49 @@ INCBIN "gfx/pokedex/cursors.2bpp" PokedexSearchGFX:: INCBIN "gfx/pokedex/search.2bpp" +SECTION "Trainer Battle Sprites", ROMX[$4000], BANK[$12] +HayatoPic:: INCBIN "gfx/trainer/hayato.pic" +AkanePic:: INCBIN "gfx/trainer/akane.pic" ; Gen 1 Bug Catcher +TsukushiPic:: INCBIN "gfx/trainer/tsukushi.pic" +EnokiPic:: INCBIN "gfx/trainer/enoki.pic" +OkeraPic:: INCBIN "gfx/trainer/okera.pic" ; Gen 1 Police Female +MikanPic:: INCBIN "gfx/trainer/mikan.pic" +BluePic:: INCBIN "gfx/trainer/blue.pic" ; Gen 1 Pokemaniac +GamaPic:: INCBIN "gfx/trainer/gama.pic" ; Gen 1 Super Nerd +RivalPic:: INCBIN "gfx/trainer/rival.pic" +OakPic:: INCBIN "gfx/trainer/oak.pic" +ProtagonistPic:: INCBIN "/gfx/trainer/protagonist.pic" +KurtPic:: INCBIN "/gfx/trainer/kurt.pic" +YoungsterPic:: INCBIN "gfx/trainer/youngster.pic" +SchoolboyPic:: INCBIN "gfx/trainer/schoolboy.pic" +FledglingPic:: INCBIN "gfx/trainer/fledgling.pic" +LassPic:: INCBIN "gfx/trainer/lass.pic" +ProfessionalMPic:: INCBIN "gfx/trainer/professional_m.pic" +ProfessionalFPic:: INCBIN "gfx/trainer/professional_f.pic" +BeautyPic:: INCBIN "gfx/trainer/beauty.pic" +PokemaniacPic:: INCBIN "gfx/trainer/pokemaniac.pic" +RocketMPic:: INCBIN "gfx/trainer/rocket_m.pic" +TeacherMPic:: INCBIN "gfx/trainer/teacher_m.pic" +TeacherFPic:: INCBIN "gfx/trainer/teacher_f.pic" +BugCatcherBoyPic:: INCBIN "gfx/trainer/bug_catcher_boy.pic" +FisherPic:: INCBIN "gfx/trainer/fisher.pic" +SwimmerMPic:: INCBIN "gfx/trainer/swimmer_m.pic" +SwimmerFPic:: INCBIN "gfx/trainer/swimmer_f.pic" +SuperNerdPic:: INCBIN "gfx/trainer/supernerd.pic" +EngineerPic:: INCBIN "gfx/trainer/engineer.pic" +GreenPic:: INCBIN "gfx/trainer/green.pic" ; Gen 1 Green +BikerPic:: INCBIN "gfx/trainer/biker.pic" +BurglarPic:: INCBIN "gfx/trainer/burglar.pic" +FirebreatherPic:: INCBIN "gfx/trainer/firebreather.pic" +JugglerPic:: INCBIN "gfx/trainer/juggler.pic" +BlackbeltPic:: INCBIN "gfx/trainer/blackbelt.pic" +SportsmanPic:: INCBIN "gfx/trainer/sportsman.pic" +MediumPic:: INCBIN "gfx/trainer/medium.pic" +SoldierPic:: INCBIN "gfx/trainer/soldier.pic" +KimonoGirlPic:: INCBIN "gfx/trainer/kimonogirl.pic" +TwinsPic:: INCBIN "gfx/trainer/twins.pic" + + SECTION "Bank 13 Tilesets 0a", ROMX[$4000], BANK[$13] Tileset_0a_GFX: INCBIN "gfx/tilesets/tileset_0a.2bpp" @@ -177,6 +220,7 @@ INCLUDE "gfx/pokemon/pkmn_pic_banks.asm" INCLUDE "gfx/pokemon/pkmn_pics.asm" + SECTION "Annon Pic Ptrs and Pics", ROMX[$4d6a], BANK[$1f] INCLUDE "gfx/pokemon/annon_pic_ptrs.asm" INCLUDE "gfx/pokemon/annon_pics.asm" @@ -187,70 +231,38 @@ SECTION "Attack Animation GFX", ROMX[$4000], BANK[$21] INCBIN "gfx/battle_anims/attack_animations.2bpp" SECTION "Pokemon Party Sprites", ROMX[$60CC], BANK[$23] -NyoromoIcon:: -INCBIN "gfx/icons/nyoromo.2bpp" -PurinIcon:: -INCBIN "gfx/icons/purin.2bpp" -DigdaIcon:: -INCBIN "gfx/icons/digda.2bpp" -PikachuIcon:: -INCBIN "gfx/icons/pikachu.2bpp" -HitodemanIcon:: -INCBIN "gfx/icons/hitodeman.2bpp" -KoikingIcon:: -INCBIN "gfx/icons/koiking.2bpp" -PoppoIcon:: -INCBIN "gfx/icons/poppo.2bpp" -SidonIcon:: -INCBIN "gfx/icons/sidon.2bpp" -PippiIcon:: -INCBIN "gfx/icons/pippi.2bpp" -NazonokusaIcon:: -INCBIN "gfx/icons/nazonokusa.2bpp" -MushiIcon:: -INCBIN "gfx/icons/mushi.2bpp" -GangarIcon:: -INCBIN "gfx/icons/gangar.2bpp" -LaplaceIcon:: -INCBIN "gfx/icons/laplace.2bpp" -BarrierdIcon:: -INCBIN "gfx/icons/barrierd.2bpp" -LokonIcon:: -INCBIN "gfx/icons/lokon.2bpp" -KentaurosIcon:: -INCBIN "gfx/icons/kentauros.2bpp" -ShellderIcon:: -INCBIN "gfx/icons/shellder.2bpp" -MetamonIcon:: -INCBIN "gfx/icons/metamon.2bpp" -IwarkIcon:: -INCBIN "gfx/icons/iwark.2bpp" -BiriridamaIcon:: -INCBIN "gfx/icons/biriridama.2bpp" -ZenigameIcon:: -INCBIN "gfx/icons/zenigame.2bpp" -FushigidaneIcon:: -INCBIN "gfx/icons/fushigidane.2bpp" -HitokageIcon:: -INCBIN "gfx/icons/hitokage.2bpp" -BeedleIcon:: -INCBIN "gfx/icons/beedle.2bpp" -AnnonIcon:: -INCBIN "gfx/icons/annon.2bpp" -IsitsubuteIcon:: -INCBIN "gfx/icons/isitsubute.2bpp" -WanrikyIcon:: -INCBIN "gfx/icons/wanriky.2bpp" -TamagoIcon:: -INCBIN "gfx/icons/tamago.2bpp" -MenokurageIcon:: -INCBIN "gfx/icons/menokurage.2bpp" -ButterfreeIcon:: -INCBIN "gfx/icons/butterfree.2bpp" -ZubatIcon:: -INCBIN "gfx/icons/zubat.2bpp" -KabigonIcon:: -INCBIN "gfx/icons/kabigon.2bpp" +NyoromoIcon:: INCBIN "gfx/icons/nyoromo.2bpp" +PurinIcon:: INCBIN "gfx/icons/purin.2bpp" +DigdaIcon:: INCBIN "gfx/icons/digda.2bpp" +PikachuIcon:: INCBIN "gfx/icons/pikachu.2bpp" +HitodemanIcon:: INCBIN "gfx/icons/hitodeman.2bpp" +KoikingIcon:: INCBIN "gfx/icons/koiking.2bpp" +PoppoIcon:: INCBIN "gfx/icons/poppo.2bpp" +SidonIcon:: INCBIN "gfx/icons/sidon.2bpp" +PippiIcon:: INCBIN "gfx/icons/pippi.2bpp" +NazonokusaIcon:: INCBIN "gfx/icons/nazonokusa.2bpp" +MushiIcon:: INCBIN "gfx/icons/mushi.2bpp" +GangarIcon:: INCBIN "gfx/icons/gangar.2bpp" +LaplaceIcon:: INCBIN "gfx/icons/laplace.2bpp" +BarrierdIcon:: INCBIN "gfx/icons/barrierd.2bpp" +LokonIcon:: INCBIN "gfx/icons/lokon.2bpp" +KentaurosIcon:: INCBIN "gfx/icons/kentauros.2bpp" +ShellderIcon:: INCBIN "gfx/icons/shellder.2bpp" +MetamonIcon:: INCBIN "gfx/icons/metamon.2bpp" +IwarkIcon:: INCBIN "gfx/icons/iwark.2bpp" +BiriridamaIcon:: INCBIN "gfx/icons/biriridama.2bpp" +ZenigameIcon:: INCBIN "gfx/icons/zenigame.2bpp" +FushigidaneIcon:: INCBIN "gfx/icons/fushigidane.2bpp" +HitokageIcon:: INCBIN "gfx/icons/hitokage.2bpp" +BeedleIcon:: INCBIN "gfx/icons/beedle.2bpp" +AnnonIcon:: INCBIN "gfx/icons/annon.2bpp" +IsitsubuteIcon:: INCBIN "gfx/icons/isitsubute.2bpp" +WanrikyIcon:: INCBIN "gfx/icons/wanriky.2bpp" +EggIcon:: INCBIN "gfx/icons/egg.2bpp" +MenokurageIcon:: INCBIN "gfx/icons/menokurage.2bpp" +ButterfreeIcon:: INCBIN "gfx/icons/butterfree.2bpp" +ZubatIcon:: INCBIN "gfx/icons/zubat.2bpp" +KabigonIcon:: INCBIN "gfx/icons/kabigon.2bpp" SECTION "Slot Machine GFX", ROMX[$4FDB], BANK[$24] SlotMachineGFX:: @@ -258,6 +270,82 @@ INCBIN "gfx/minigames/slots.2bpp" SlotMachine2GFX:: INCBIN "gfx/minigames/slots_2.2bpp" +SECTION "Bank 30 Sprites 1", ROMX[$4000], BANK[$30] +GoldSpriteGFX:: INCBIN "gfx/sprites/gold.2bpp" ; 30:4000 +GoldBikeSpriteGFX:: INCBIN "gfx/sprites/gold_bike.2bpp" ; 30:4180 +GoldSkateboardSpriteGFX:: INCBIN "gfx/sprites/gold_skateboard.2bpp" ; 30:4300 +SilverSpriteGFX:: INCBIN "gfx/sprites/silver.2bpp" ; 30:4480 +OkidoSpriteGFX:: INCBIN "gfx/sprites/okido.2bpp" ; 30:4600 +RedSpriteGFX:: INCBIN "gfx/sprites/red.2bpp" ; 30:4780 +BlueSpriteGFX:: INCBIN "gfx/sprites/blue.2bpp" ; 30:4900 +MasakiSpriteGFX:: INCBIN "gfx/sprites/masaki.2bpp" ; 30:4a80 +ElderSpriteGFX:: INCBIN "gfx/sprites/elder.2bpp" ; 30:4c00 +SakakiSpriteGFX:: INCBIN "gfx/sprites/sakaki.2bpp" ; 30:4d80 +GantetsuSpriteGFX:: INCBIN "gfx/sprites/gantetsu.2bpp" ; 30:4f00 +MomSpriteGFX:: INCBIN "gfx/sprites/mom.2bpp" ; 30:5080 +SilversMomSpriteGFX:: INCBIN "gfx/sprites/silvers_mom.2bpp" ; 30:5200 +RedsMomSpriteGFX:: INCBIN "gfx/sprites/reds_mom.2bpp" ; 30:5380 +NanamiSpriteGFX:: INCBIN "gfx/sprites/nanami.2bpp" ; 30:5500 +EvilOkidoSpriteGFX:: INCBIN "gfx/sprites/evil_okido.2bpp" ; 30:5680 +KikukoSpriteGFX:: INCBIN "gfx/sprites/kikuko.2bpp" ; 30:5800 +HayatoSpriteGFX:: INCBIN "gfx/sprites/hayato.2bpp" ; 30:5980 +TsukushiSpriteGFX:: INCBIN "gfx/sprites/tsukushi.2bpp" ; 30:5a40 +EnokiSpriteGFX:: INCBIN "gfx/sprites/enoki.2bpp" ; 30:5b00 +MikanSpriteGFX:: INCBIN "gfx/sprites/mikan.2bpp" ; 30:5bc0 +CooltrainerMSpriteGFX:: INCBIN "gfx/sprites/cooltrainer_m.2bpp" ; 30:5d40 +CooltrainerFSpriteGFX:: INCBIN "gfx/sprites/cooltrainer_f.2bpp" ; 30:5ec0 +BugCatcherBoySpriteGFX:: INCBIN "gfx/sprites/bug_catcher_boy.2bpp" ; 30:6040 +TwinSpriteGFX:: INCBIN "gfx/sprites/twin.2bpp" ; 30:61c0 +YoungsterSpriteGFX:: INCBIN "gfx/sprites/youngster.2bpp" ; 30:6340 +LassSpriteGFX:: INCBIN "gfx/sprites/lass.2bpp" ; 30:64c0 +TeacherSpriteGFX:: INCBIN "gfx/sprites/teacher.2bpp" ; 30:6640 +GirlSpriteGFX:: INCBIN "gfx/sprites/girl.2bpp" ; 30:67c0 +SuperNerdSpriteGFX:: INCBIN "gfx/sprites/super_nerd.2bpp" ; 30:6940 +RockerSpriteGFX:: INCBIN "gfx/sprites/rocker.2bpp" ; 30:6ac0 +PokefanMSpriteGFX:: INCBIN "gfx/sprites/pokefan_m.2bpp" ; 30:6c40 +PokefanFSpriteGFX:: INCBIN "gfx/sprites/pokefan_f.2bpp" ; 30:6dc0 +GrampsSpriteGFX:: INCBIN "gfx/sprites/gramps.2bpp" ; 30:6f40 +GrannySpriteGFX:: INCBIN "gfx/sprites/granny.2bpp" ; 30:70c0 +SwimmerMSpriteGFX:: INCBIN "gfx/sprites/swimmer_m.2bpp" ; 30:7240 +SwimmerFSpriteGFX:: INCBIN "gfx/sprites/swimmer_f.2bpp" ; 30:73c0 +RocketMSpriteGFX:: INCBIN "gfx/sprites/rocket_m.2bpp" ; 30:7540 +RocketFSpriteGFX:: INCBIN "gfx/sprites/rocket_f.2bpp" ; 30:76c0 +NurseSpriteGFX:: INCBIN "gfx/sprites/nurse.2bpp" ; 30:7840 +LinkReceptionistSpriteGFX:: INCBIN "gfx/sprites/link_receptionist.2bpp" ; 30:7900 +ClerkSpriteGFX:: INCBIN "gfx/sprites/clerk.2bpp" ; 30:79c0 +FisherSpriteGFX:: INCBIN "gfx/sprites/fisher.2bpp" ; 30:7b40 +FishingGuruSpriteGFX:: INCBIN "gfx/sprites/fishing_guru.2bpp" ; 30:7cc0 + +SECTION "Bank 31 Sprites 2", ROMX[$4000], BANK[$31] +ScientistSpriteGFX:: INCBIN "gfx/sprites/scientist.2bpp" ; 31:4000 +MediumSpriteGFX:: INCBIN "gfx/sprites/medium.2bpp" ; 31:4180 +SageSpriteGFX:: INCBIN "gfx/sprites/sage.2bpp" ; 31:4300 +FrowningManSpriteGFX:: INCBIN "gfx/sprites/frowning_man.2bpp" ; 31:4480 +GentlemanSpriteGFX:: INCBIN "gfx/sprites/gentleman.2bpp" ; 31:4600 +BlackbeltSpriteGFX:: INCBIN "gfx/sprites/blackbelt.2bpp" ; 31:4780 +ReceptionistSpriteGFX:: INCBIN "gfx/sprites/receptionist.2bpp" ; 31:4900 +OfficerSpriteGFX:: INCBIN "gfx/sprites/officer.2bpp" ; 31:4a80 +CaptainSpriteGFX:: INCBIN "gfx/sprites/captain.2bpp" ; 31:4c00 +MohawkSpriteGFX:: INCBIN "gfx/sprites/mohawk.2bpp" ; 31:4d80 +GymGuySpriteGFX:: INCBIN "gfx/sprites/gym_guy.2bpp" ; 31:4f00 +SailorSpriteGFX:: INCBIN "gfx/sprites/sailor.2bpp" ; 31:5080 +HelmetSpriteGFX:: INCBIN "gfx/sprites/helmet.2bpp" ; 31:5200 +BurglarSpriteGFX:: INCBIN "gfx/sprites/burglar.2bpp" ; 31:5380 +SidonSpriteGFX:: INCBIN "gfx/sprites/sidon.2bpp" ; 31:5500 +PippiSpriteGFX:: INCBIN "gfx/sprites/pippi.2bpp" ; 31:5680 +PoppoSpriteGFX:: INCBIN "gfx/sprites/poppo.2bpp" ; 31:5800 +LizardonSpriteGFX:: INCBIN "gfx/sprites/lizardon.2bpp" ; 31:5980 +KabigonSpriteGFX:: INCBIN "gfx/sprites/kabigon.2bpp" ; 31:5b00 +PawouSpriteGFX:: INCBIN "gfx/sprites/pawou.2bpp" ; 31:5c80 +NyorobonSpriteGFX:: INCBIN "gfx/sprites/nyorobon.2bpp" ; 31:5e00 +LaplaceSpriteGFX:: INCBIN "gfx/sprites/laplace.2bpp" ; 31:5f80 +PokeBallSpriteGFX:: INCBIN "gfx/sprites/poke_ball.2bpp" ; 31:6100 +PokedexSpriteGFX:: INCBIN "gfx/sprites/pokedex.2bpp" ; 31:6280 +PaperSpriteGFX:: INCBIN "gfx/sprites/paper.2bpp" ; 31:6400 +OldLinkReceptionistSpriteGFX:: INCBIN "gfx/sprites/old_link_receptionist.2bpp" ; 31:6580 +EggSpriteGFX:: INCBIN "gfx/sprites/egg.2bpp" ; 31:65c0 +BoulderSpriteGFX:: INCBIN "gfx/sprites/boulder.2bpp" ; 31:6600 + SECTION "Bank 37 Tilesets 10", ROMX[$4000], BANK[$37] Tileset_10_GFX: INCBIN "gfx/tilesets/tileset_10.2bpp" diff --git a/gfx/icons/tamago.png b/gfx/icons/egg.png Binary files differindex 364fadf..364fadf 100644 --- a/gfx/icons/tamago.png +++ b/gfx/icons/egg.png diff --git a/gfx/pokemon/annon_pics.asm b/gfx/pokemon/annon_pics.asm index 86aca48..4999071 100644 --- a/gfx/pokemon/annon_pics.asm +++ b/gfx/pokemon/annon_pics.asm @@ -1,53 +1,53 @@ AnnonPics::
-AnnonAPicFront:: INCBIN "gfx/pokemon/annon_a/front.pic"
-AnnonAPicBack:: INCBIN "gfx/pokemon/annon_a/back.pic"
-AnnonBPicFront:: INCBIN "gfx/pokemon/annon_b/front.pic"
-AnnonBPicBack:: INCBIN "gfx/pokemon/annon_b/back.pic"
-AnnonCPicFront:: INCBIN "gfx/pokemon/annon_c/front.pic"
-AnnonCPicBack:: INCBIN "gfx/pokemon/annon_c/back.pic"
-AnnonDPicFront:: INCBIN "gfx/pokemon/annon_d/front.pic"
-AnnonDPicBack:: INCBIN "gfx/pokemon/annon_d/back.pic"
-AnnonEPicFront:: INCBIN "gfx/pokemon/annon_e/front.pic"
-AnnonEPicBack:: INCBIN "gfx/pokemon/annon_e/back.pic"
-AnnonFPicFront:: INCBIN "gfx/pokemon/annon_f/front.pic"
-AnnonFPicBack:: INCBIN "gfx/pokemon/annon_f/back.pic"
-AnnonGPicFront:: INCBIN "gfx/pokemon/annon_g/front.pic"
-AnnonGPicBack:: INCBIN "gfx/pokemon/annon_g/back.pic"
-AnnonHPicFront:: INCBIN "gfx/pokemon/annon_h/front.pic"
-AnnonHPicBack:: INCBIN "gfx/pokemon/annon_h/back.pic"
-AnnonIPicFront:: INCBIN "gfx/pokemon/annon_i/front.pic"
-AnnonIPicBack:: INCBIN "gfx/pokemon/annon_i/back.pic"
-AnnonJPicFront:: INCBIN "gfx/pokemon/annon_j/front.pic"
-AnnonJPicBack:: INCBIN "gfx/pokemon/annon_j/back.pic"
-AnnonKPicFront:: INCBIN "gfx/pokemon/annon_k/front.pic"
-AnnonKPicBack:: INCBIN "gfx/pokemon/annon_k/back.pic"
-AnnonLPicFront:: INCBIN "gfx/pokemon/annon_l/front.pic"
-AnnonLPicBack:: INCBIN "gfx/pokemon/annon_l/back.pic"
-AnnonMPicFront:: INCBIN "gfx/pokemon/annon_m/front.pic"
-AnnonMPicBack:: INCBIN "gfx/pokemon/annon_m/back.pic"
-AnnonNPicFront:: INCBIN "gfx/pokemon/annon_n/front.pic"
-AnnonNPicBack:: INCBIN "gfx/pokemon/annon_n/back.pic"
-AnnonOPicFront:: INCBIN "gfx/pokemon/annon_o/front.pic"
-AnnonOPicBack:: INCBIN "gfx/pokemon/annon_o/back.pic"
-AnnonPPicFront:: INCBIN "gfx/pokemon/annon_p/front.pic"
-AnnonPPicBack:: INCBIN "gfx/pokemon/annon_p/back.pic"
-AnnonQPicFront:: INCBIN "gfx/pokemon/annon_q/front.pic"
-AnnonQPicBack:: INCBIN "gfx/pokemon/annon_q/back.pic"
-AnnonRPicFront:: INCBIN "gfx/pokemon/annon_r/front.pic"
-AnnonRPicBack:: INCBIN "gfx/pokemon/annon_r/back.pic"
-AnnonSPicFront:: INCBIN "gfx/pokemon/annon_s/front.pic"
-AnnonSPicBack:: INCBIN "gfx/pokemon/annon_s/back.pic"
-AnnonTPicFront:: INCBIN "gfx/pokemon/annon_t/front.pic"
-AnnonTPicBack:: INCBIN "gfx/pokemon/annon_t/back.pic"
-AnnonUPicFront:: INCBIN "gfx/pokemon/annon_u/front.pic"
-AnnonUPicBack:: INCBIN "gfx/pokemon/annon_u/back.pic"
-AnnonVPicFront:: INCBIN "gfx/pokemon/annon_v/front.pic"
-AnnonVPicBack:: INCBIN "gfx/pokemon/annon_v/back.pic"
-AnnonWPicFront:: INCBIN "gfx/pokemon/annon_w/front.pic"
-AnnonWPicBack:: INCBIN "gfx/pokemon/annon_w/back.pic"
-AnnonXPicFront:: INCBIN "gfx/pokemon/annon_x/front.pic"
-AnnonXPicBack:: INCBIN "gfx/pokemon/annon_x/back.pic"
-AnnonYPicFront:: INCBIN "gfx/pokemon/annon_y/front.pic"
-AnnonYPicBack:: INCBIN "gfx/pokemon/annon_y/back.pic"
-AnnonZPicFront:: INCBIN "gfx/pokemon/annon_z/front.pic"
-AnnonZPicBack:: INCBIN "gfx/pokemon/annon_z/back.pic"
+AnnonAPicFront:: INCBIN "gfx/pokemon/annon_a/front.pic" ; 0x07cdd2--0x07ce57
+AnnonAPicBack:: INCBIN "gfx/pokemon/annon_a/back.pic" ; 0x07ce57--0x07ced0
+AnnonBPicFront:: INCBIN "gfx/pokemon/annon_b/front.pic" ; 0x07ced0--0x07cf64
+AnnonBPicBack:: INCBIN "gfx/pokemon/annon_b/back.pic" ; 0x07cf64--0x07cfed
+AnnonCPicFront:: INCBIN "gfx/pokemon/annon_c/front.pic" ; 0x07cfed--0x07d0a1
+AnnonCPicBack:: INCBIN "gfx/pokemon/annon_c/back.pic" ; 0x07d0a1--0x07d147
+AnnonDPicFront:: INCBIN "gfx/pokemon/annon_d/front.pic" ; 0x07d147--0x07d1ec
+AnnonDPicBack:: INCBIN "gfx/pokemon/annon_d/back.pic" ; 0x07d1ec--0x07d285
+AnnonEPicFront:: INCBIN "gfx/pokemon/annon_e/front.pic" ; 0x07d285--0x07d30e
+AnnonEPicBack:: INCBIN "gfx/pokemon/annon_e/back.pic" ; 0x07d30e--0x07d38b
+AnnonFPicFront:: INCBIN "gfx/pokemon/annon_f/front.pic" ; 0x07d38b--0x07d425
+AnnonFPicBack:: INCBIN "gfx/pokemon/annon_f/back.pic" ; 0x07d425--0x07d4ae
+AnnonGPicFront:: INCBIN "gfx/pokemon/annon_g/front.pic" ; 0x07d4ae--0x07d53f
+AnnonGPicBack:: INCBIN "gfx/pokemon/annon_g/back.pic" ; 0x07d53f--0x07d5c4
+AnnonHPicFront:: INCBIN "gfx/pokemon/annon_h/front.pic" ; 0x07d5c4--0x07d693
+AnnonHPicBack:: INCBIN "gfx/pokemon/annon_h/back.pic" ; 0x07d693--0x07d757
+AnnonIPicFront:: INCBIN "gfx/pokemon/annon_i/front.pic" ; 0x07d757--0x07d7c0
+AnnonIPicBack:: INCBIN "gfx/pokemon/annon_i/back.pic" ; 0x07d7c0--0x07d81f
+AnnonJPicFront:: INCBIN "gfx/pokemon/annon_j/front.pic" ; 0x07d81f--0x07d89b
+AnnonJPicBack:: INCBIN "gfx/pokemon/annon_j/back.pic" ; 0x07d89b--0x07d909
+AnnonKPicFront:: INCBIN "gfx/pokemon/annon_k/front.pic" ; 0x07d909--0x07d98d
+AnnonKPicBack:: INCBIN "gfx/pokemon/annon_k/back.pic" ; 0x07d98d--0x07da06
+AnnonLPicFront:: INCBIN "gfx/pokemon/annon_l/front.pic" ; 0x07da06--0x07da7a
+AnnonLPicBack:: INCBIN "gfx/pokemon/annon_l/back.pic" ; 0x07da7a--0x07dade
+AnnonMPicFront:: INCBIN "gfx/pokemon/annon_m/front.pic" ; 0x07dade--0x07dba1
+AnnonMPicBack:: INCBIN "gfx/pokemon/annon_m/back.pic" ; 0x07dba1--0x07dc57
+AnnonNPicFront:: INCBIN "gfx/pokemon/annon_n/front.pic" ; 0x07dc57--0x07dcf4
+AnnonNPicBack:: INCBIN "gfx/pokemon/annon_n/back.pic" ; 0x07dcf4--0x07dd8b
+AnnonOPicFront:: INCBIN "gfx/pokemon/annon_o/front.pic" ; 0x07dd8b--0x07de55
+AnnonOPicBack:: INCBIN "gfx/pokemon/annon_o/back.pic" ; 0x07de55--0x07df15
+AnnonPPicFront:: INCBIN "gfx/pokemon/annon_p/front.pic" ; 0x07df15--0x07df7d
+AnnonPPicBack:: INCBIN "gfx/pokemon/annon_p/back.pic" ; 0x07df7d--0x07dfd6
+AnnonQPicFront:: INCBIN "gfx/pokemon/annon_q/front.pic" ; 0x07dfd6--0x07e03d
+AnnonQPicBack:: INCBIN "gfx/pokemon/annon_q/back.pic" ; 0x07e03d--0x07e099
+AnnonRPicFront:: INCBIN "gfx/pokemon/annon_r/front.pic" ; 0x07e099--0x07e0ff
+AnnonRPicBack:: INCBIN "gfx/pokemon/annon_r/back.pic" ; 0x07e0ff--0x07e159
+AnnonSPicFront:: INCBIN "gfx/pokemon/annon_s/front.pic" ; 0x07e159--0x07e1f0
+AnnonSPicBack:: INCBIN "gfx/pokemon/annon_s/back.pic" ; 0x07e1f0--0x07e27a
+AnnonTPicFront:: INCBIN "gfx/pokemon/annon_t/front.pic" ; 0x07e27a--0x07e2e8
+AnnonTPicBack:: INCBIN "gfx/pokemon/annon_t/back.pic" ; 0x07e2e8--0x07e348
+AnnonUPicFront:: INCBIN "gfx/pokemon/annon_u/front.pic" ; 0x07e348--0x07e3e7
+AnnonUPicBack:: INCBIN "gfx/pokemon/annon_u/back.pic" ; 0x07e3e7--0x07e47a
+AnnonVPicFront:: INCBIN "gfx/pokemon/annon_v/front.pic" ; 0x07e47a--0x07e50a
+AnnonVPicBack:: INCBIN "gfx/pokemon/annon_v/back.pic" ; 0x07e50a--0x07e589
+AnnonWPicFront:: INCBIN "gfx/pokemon/annon_w/front.pic" ; 0x07e589--0x07e60d
+AnnonWPicBack:: INCBIN "gfx/pokemon/annon_w/back.pic" ; 0x07e60d--0x07e681
+AnnonXPicFront:: INCBIN "gfx/pokemon/annon_x/front.pic" ; 0x07e681--0x07e705
+AnnonXPicBack:: INCBIN "gfx/pokemon/annon_x/back.pic" ; 0x07e705--0x07e77b
+AnnonYPicFront:: INCBIN "gfx/pokemon/annon_y/front.pic" ; 0x07e77b--0x07e801
+AnnonYPicBack:: INCBIN "gfx/pokemon/annon_y/back.pic" ; 0x07e801--0x07e87c
+AnnonZPicFront:: INCBIN "gfx/pokemon/annon_z/front.pic" ; 0x07e87c--0x07e8fa
+AnnonZPicBack:: INCBIN "gfx/pokemon/annon_z/back.pic" ; 0x07e8fa--0x07e96a
diff --git a/gfx/sprites/blackbelt.png b/gfx/sprites/blackbelt.png Binary files differnew file mode 100644 index 0000000..9aec228 --- /dev/null +++ b/gfx/sprites/blackbelt.png diff --git a/gfx/sprites/blue.png b/gfx/sprites/blue.png Binary files differnew file mode 100644 index 0000000..17fc2fd --- /dev/null +++ b/gfx/sprites/blue.png diff --git a/gfx/sprites/boulder.png b/gfx/sprites/boulder.png Binary files differnew file mode 100644 index 0000000..4c4fd7a --- /dev/null +++ b/gfx/sprites/boulder.png diff --git a/gfx/sprites/bug_catcher_boy.png b/gfx/sprites/bug_catcher_boy.png Binary files differnew file mode 100644 index 0000000..e1306b6 --- /dev/null +++ b/gfx/sprites/bug_catcher_boy.png diff --git a/gfx/sprites/burglar.png b/gfx/sprites/burglar.png Binary files differnew file mode 100644 index 0000000..ed0fa1d --- /dev/null +++ b/gfx/sprites/burglar.png diff --git a/gfx/sprites/captain.png b/gfx/sprites/captain.png Binary files differnew file mode 100644 index 0000000..7408cbb --- /dev/null +++ b/gfx/sprites/captain.png diff --git a/gfx/sprites/clerk.png b/gfx/sprites/clerk.png Binary files differnew file mode 100644 index 0000000..77a5fb9 --- /dev/null +++ b/gfx/sprites/clerk.png diff --git a/gfx/sprites/cooltrainer_f.png b/gfx/sprites/cooltrainer_f.png Binary files differnew file mode 100644 index 0000000..53bf81b --- /dev/null +++ b/gfx/sprites/cooltrainer_f.png diff --git a/gfx/sprites/cooltrainer_m.png b/gfx/sprites/cooltrainer_m.png Binary files differnew file mode 100644 index 0000000..ffd94f4 --- /dev/null +++ b/gfx/sprites/cooltrainer_m.png diff --git a/gfx/sprites/egg.png b/gfx/sprites/egg.png Binary files differnew file mode 100644 index 0000000..0b5c54c --- /dev/null +++ b/gfx/sprites/egg.png diff --git a/gfx/sprites/elder.png b/gfx/sprites/elder.png Binary files differnew file mode 100644 index 0000000..90b499f --- /dev/null +++ b/gfx/sprites/elder.png diff --git a/gfx/sprites/enoki.png b/gfx/sprites/enoki.png Binary files differnew file mode 100644 index 0000000..a926851 --- /dev/null +++ b/gfx/sprites/enoki.png diff --git a/gfx/sprites/evil_okido.png b/gfx/sprites/evil_okido.png Binary files differnew file mode 100644 index 0000000..b2af757 --- /dev/null +++ b/gfx/sprites/evil_okido.png diff --git a/gfx/sprites/fisher.png b/gfx/sprites/fisher.png Binary files differnew file mode 100644 index 0000000..a84a2e3 --- /dev/null +++ b/gfx/sprites/fisher.png diff --git a/gfx/sprites/fishing_guru.png b/gfx/sprites/fishing_guru.png Binary files differnew file mode 100644 index 0000000..748444f --- /dev/null +++ b/gfx/sprites/fishing_guru.png diff --git a/gfx/sprites/frowning_man.png b/gfx/sprites/frowning_man.png Binary files differnew file mode 100644 index 0000000..a6300e1 --- /dev/null +++ b/gfx/sprites/frowning_man.png diff --git a/gfx/sprites/gantetsu.png b/gfx/sprites/gantetsu.png Binary files differnew file mode 100644 index 0000000..bd7fc20 --- /dev/null +++ b/gfx/sprites/gantetsu.png diff --git a/gfx/sprites/gentleman.png b/gfx/sprites/gentleman.png Binary files differnew file mode 100644 index 0000000..38a6125 --- /dev/null +++ b/gfx/sprites/gentleman.png diff --git a/gfx/sprites/girl.png b/gfx/sprites/girl.png Binary files differnew file mode 100644 index 0000000..66c1455 --- /dev/null +++ b/gfx/sprites/girl.png diff --git a/gfx/sprites/gold.png b/gfx/sprites/gold.png Binary files differnew file mode 100644 index 0000000..9dfe77f --- /dev/null +++ b/gfx/sprites/gold.png diff --git a/gfx/sprites/gold_bike.png b/gfx/sprites/gold_bike.png Binary files differnew file mode 100644 index 0000000..552d58f --- /dev/null +++ b/gfx/sprites/gold_bike.png diff --git a/gfx/sprites/gold_skateboard.png b/gfx/sprites/gold_skateboard.png Binary files differnew file mode 100644 index 0000000..35b4da1 --- /dev/null +++ b/gfx/sprites/gold_skateboard.png diff --git a/gfx/sprites/gramps.png b/gfx/sprites/gramps.png Binary files differnew file mode 100644 index 0000000..abe61a3 --- /dev/null +++ b/gfx/sprites/gramps.png diff --git a/gfx/sprites/granny.png b/gfx/sprites/granny.png Binary files differnew file mode 100644 index 0000000..763b2a2 --- /dev/null +++ b/gfx/sprites/granny.png diff --git a/gfx/sprites/gym_guy.png b/gfx/sprites/gym_guy.png Binary files differnew file mode 100644 index 0000000..a1f74da --- /dev/null +++ b/gfx/sprites/gym_guy.png diff --git a/gfx/sprites/hayato.png b/gfx/sprites/hayato.png Binary files differnew file mode 100644 index 0000000..00ee47b --- /dev/null +++ b/gfx/sprites/hayato.png diff --git a/gfx/sprites/helmet.png b/gfx/sprites/helmet.png Binary files differnew file mode 100644 index 0000000..f905a7a --- /dev/null +++ b/gfx/sprites/helmet.png diff --git a/gfx/sprites/kabigon.png b/gfx/sprites/kabigon.png Binary files differnew file mode 100644 index 0000000..7a2f70c --- /dev/null +++ b/gfx/sprites/kabigon.png diff --git a/gfx/sprites/kikuko.png b/gfx/sprites/kikuko.png Binary files differnew file mode 100644 index 0000000..e454197 --- /dev/null +++ b/gfx/sprites/kikuko.png diff --git a/gfx/sprites/laplace.png b/gfx/sprites/laplace.png Binary files differnew file mode 100644 index 0000000..d124616 --- /dev/null +++ b/gfx/sprites/laplace.png diff --git a/gfx/sprites/lass.png b/gfx/sprites/lass.png Binary files differnew file mode 100644 index 0000000..762108a --- /dev/null +++ b/gfx/sprites/lass.png diff --git a/gfx/sprites/link_receptionist.png b/gfx/sprites/link_receptionist.png Binary files differnew file mode 100644 index 0000000..42050ff --- /dev/null +++ b/gfx/sprites/link_receptionist.png diff --git a/gfx/sprites/lizardon.png b/gfx/sprites/lizardon.png Binary files differnew file mode 100644 index 0000000..3b6c621 --- /dev/null +++ b/gfx/sprites/lizardon.png diff --git a/gfx/sprites/masaki.png b/gfx/sprites/masaki.png Binary files differnew file mode 100644 index 0000000..d72bb7b --- /dev/null +++ b/gfx/sprites/masaki.png diff --git a/gfx/sprites/medium.png b/gfx/sprites/medium.png Binary files differnew file mode 100644 index 0000000..62be06b --- /dev/null +++ b/gfx/sprites/medium.png diff --git a/gfx/sprites/mikan.png b/gfx/sprites/mikan.png Binary files differnew file mode 100644 index 0000000..cb58ae9 --- /dev/null +++ b/gfx/sprites/mikan.png diff --git a/gfx/sprites/mohawk.png b/gfx/sprites/mohawk.png Binary files differnew file mode 100644 index 0000000..9634d31 --- /dev/null +++ b/gfx/sprites/mohawk.png diff --git a/gfx/sprites/mom.png b/gfx/sprites/mom.png Binary files differnew file mode 100644 index 0000000..5ea9e6e --- /dev/null +++ b/gfx/sprites/mom.png diff --git a/gfx/sprites/nanami.png b/gfx/sprites/nanami.png Binary files differnew file mode 100644 index 0000000..84f330f --- /dev/null +++ b/gfx/sprites/nanami.png diff --git a/gfx/sprites/nurse.png b/gfx/sprites/nurse.png Binary files differnew file mode 100644 index 0000000..5984b44 --- /dev/null +++ b/gfx/sprites/nurse.png diff --git a/gfx/sprites/nyorobon.png b/gfx/sprites/nyorobon.png Binary files differnew file mode 100644 index 0000000..058461c --- /dev/null +++ b/gfx/sprites/nyorobon.png diff --git a/gfx/sprites/officer.png b/gfx/sprites/officer.png Binary files differnew file mode 100644 index 0000000..f622520 --- /dev/null +++ b/gfx/sprites/officer.png diff --git a/gfx/sprites/okido.png b/gfx/sprites/okido.png Binary files differnew file mode 100644 index 0000000..7a76574 --- /dev/null +++ b/gfx/sprites/okido.png diff --git a/gfx/sprites/old_link_receptionist.png b/gfx/sprites/old_link_receptionist.png Binary files differnew file mode 100644 index 0000000..a03cae7 --- /dev/null +++ b/gfx/sprites/old_link_receptionist.png diff --git a/gfx/sprites/paper.png b/gfx/sprites/paper.png Binary files differnew file mode 100644 index 0000000..ede44e8 --- /dev/null +++ b/gfx/sprites/paper.png diff --git a/gfx/sprites/pawou.png b/gfx/sprites/pawou.png Binary files differnew file mode 100644 index 0000000..dbd4c07 --- /dev/null +++ b/gfx/sprites/pawou.png diff --git a/gfx/sprites/pippi.png b/gfx/sprites/pippi.png Binary files differnew file mode 100644 index 0000000..06fe007 --- /dev/null +++ b/gfx/sprites/pippi.png diff --git a/gfx/sprites/poke_ball.png b/gfx/sprites/poke_ball.png Binary files differnew file mode 100644 index 0000000..dec0cd8 --- /dev/null +++ b/gfx/sprites/poke_ball.png diff --git a/gfx/sprites/pokedex.png b/gfx/sprites/pokedex.png Binary files differnew file mode 100644 index 0000000..4af7be4 --- /dev/null +++ b/gfx/sprites/pokedex.png diff --git a/gfx/sprites/pokefan_f.png b/gfx/sprites/pokefan_f.png Binary files differnew file mode 100644 index 0000000..aa1fbc0 --- /dev/null +++ b/gfx/sprites/pokefan_f.png diff --git a/gfx/sprites/pokefan_m.png b/gfx/sprites/pokefan_m.png Binary files differnew file mode 100644 index 0000000..fea7979 --- /dev/null +++ b/gfx/sprites/pokefan_m.png diff --git a/gfx/sprites/poppo.png b/gfx/sprites/poppo.png Binary files differnew file mode 100644 index 0000000..9e20099 --- /dev/null +++ b/gfx/sprites/poppo.png diff --git a/gfx/sprites/receptionist.png b/gfx/sprites/receptionist.png Binary files differnew file mode 100644 index 0000000..0d102b0 --- /dev/null +++ b/gfx/sprites/receptionist.png diff --git a/gfx/sprites/red.png b/gfx/sprites/red.png Binary files differnew file mode 100644 index 0000000..018b676 --- /dev/null +++ b/gfx/sprites/red.png diff --git a/gfx/sprites/reds_mom.png b/gfx/sprites/reds_mom.png Binary files differnew file mode 100644 index 0000000..5644764 --- /dev/null +++ b/gfx/sprites/reds_mom.png diff --git a/gfx/sprites/rocker.png b/gfx/sprites/rocker.png Binary files differnew file mode 100644 index 0000000..50ac208 --- /dev/null +++ b/gfx/sprites/rocker.png diff --git a/gfx/sprites/rocket_f.png b/gfx/sprites/rocket_f.png Binary files differnew file mode 100644 index 0000000..b8714ba --- /dev/null +++ b/gfx/sprites/rocket_f.png diff --git a/gfx/sprites/rocket_m.png b/gfx/sprites/rocket_m.png Binary files differnew file mode 100644 index 0000000..43a71bd --- /dev/null +++ b/gfx/sprites/rocket_m.png diff --git a/gfx/sprites/sage.png b/gfx/sprites/sage.png Binary files differnew file mode 100644 index 0000000..8022304 --- /dev/null +++ b/gfx/sprites/sage.png diff --git a/gfx/sprites/sailor.png b/gfx/sprites/sailor.png Binary files differnew file mode 100644 index 0000000..b4d3b5f --- /dev/null +++ b/gfx/sprites/sailor.png diff --git a/gfx/sprites/sakaki.png b/gfx/sprites/sakaki.png Binary files differnew file mode 100644 index 0000000..2e625e1 --- /dev/null +++ b/gfx/sprites/sakaki.png diff --git a/gfx/sprites/scientist.png b/gfx/sprites/scientist.png Binary files differnew file mode 100644 index 0000000..39c4429 --- /dev/null +++ b/gfx/sprites/scientist.png diff --git a/gfx/sprites/sidon.png b/gfx/sprites/sidon.png Binary files differnew file mode 100644 index 0000000..80d615b --- /dev/null +++ b/gfx/sprites/sidon.png diff --git a/gfx/sprites/silver.png b/gfx/sprites/silver.png Binary files differnew file mode 100644 index 0000000..7d82d40 --- /dev/null +++ b/gfx/sprites/silver.png diff --git a/gfx/sprites/silvers_mom.png b/gfx/sprites/silvers_mom.png Binary files differnew file mode 100644 index 0000000..b8e9464 --- /dev/null +++ b/gfx/sprites/silvers_mom.png diff --git a/gfx/sprites/super_nerd.png b/gfx/sprites/super_nerd.png Binary files differnew file mode 100644 index 0000000..6866c7b --- /dev/null +++ b/gfx/sprites/super_nerd.png diff --git a/gfx/sprites/swimmer_f.png b/gfx/sprites/swimmer_f.png Binary files differnew file mode 100644 index 0000000..eed753a --- /dev/null +++ b/gfx/sprites/swimmer_f.png diff --git a/gfx/sprites/swimmer_m.png b/gfx/sprites/swimmer_m.png Binary files differnew file mode 100644 index 0000000..4c1818b --- /dev/null +++ b/gfx/sprites/swimmer_m.png diff --git a/gfx/sprites/teacher.png b/gfx/sprites/teacher.png Binary files differnew file mode 100644 index 0000000..2107159 --- /dev/null +++ b/gfx/sprites/teacher.png diff --git a/gfx/sprites/tsukushi.png b/gfx/sprites/tsukushi.png Binary files differnew file mode 100644 index 0000000..99a36a2 --- /dev/null +++ b/gfx/sprites/tsukushi.png diff --git a/gfx/sprites/twin.png b/gfx/sprites/twin.png Binary files differnew file mode 100644 index 0000000..caa9f43 --- /dev/null +++ b/gfx/sprites/twin.png diff --git a/gfx/sprites/youngster.png b/gfx/sprites/youngster.png Binary files differnew file mode 100644 index 0000000..5c0d339 --- /dev/null +++ b/gfx/sprites/youngster.png diff --git a/gfx/trainer/akane.png b/gfx/trainer/akane.png Binary files differnew file mode 100644 index 0000000..0d108f4 --- /dev/null +++ b/gfx/trainer/akane.png diff --git a/gfx/trainer/beauty.png b/gfx/trainer/beauty.png Binary files differnew file mode 100644 index 0000000..eaa70e6 --- /dev/null +++ b/gfx/trainer/beauty.png diff --git a/gfx/trainer/biker.png b/gfx/trainer/biker.png Binary files differnew file mode 100644 index 0000000..1c95eea --- /dev/null +++ b/gfx/trainer/biker.png diff --git a/gfx/trainer/blackbelt.png b/gfx/trainer/blackbelt.png Binary files differnew file mode 100644 index 0000000..205fa08 --- /dev/null +++ b/gfx/trainer/blackbelt.png diff --git a/gfx/trainer/blue.png b/gfx/trainer/blue.png Binary files differnew file mode 100644 index 0000000..954bbc4 --- /dev/null +++ b/gfx/trainer/blue.png diff --git a/gfx/trainer/bug_catcher_boy.png b/gfx/trainer/bug_catcher_boy.png Binary files differnew file mode 100644 index 0000000..36c80c7 --- /dev/null +++ b/gfx/trainer/bug_catcher_boy.png diff --git a/gfx/trainer/burglar.png b/gfx/trainer/burglar.png Binary files differnew file mode 100644 index 0000000..9142e8d --- /dev/null +++ b/gfx/trainer/burglar.png diff --git a/gfx/trainer/engineer.png b/gfx/trainer/engineer.png Binary files differnew file mode 100644 index 0000000..1a1944e --- /dev/null +++ b/gfx/trainer/engineer.png diff --git a/gfx/trainer/enoki.png b/gfx/trainer/enoki.png Binary files differnew file mode 100644 index 0000000..77ba390 --- /dev/null +++ b/gfx/trainer/enoki.png diff --git a/gfx/trainer/firebreather.png b/gfx/trainer/firebreather.png Binary files differnew file mode 100644 index 0000000..ac1148a --- /dev/null +++ b/gfx/trainer/firebreather.png diff --git a/gfx/trainer/fisher.png b/gfx/trainer/fisher.png Binary files differnew file mode 100644 index 0000000..c845d9d --- /dev/null +++ b/gfx/trainer/fisher.png diff --git a/gfx/trainer/fledgling.png b/gfx/trainer/fledgling.png Binary files differnew file mode 100644 index 0000000..52c58b2 --- /dev/null +++ b/gfx/trainer/fledgling.png diff --git a/gfx/trainer/gama.png b/gfx/trainer/gama.png Binary files differnew file mode 100644 index 0000000..37ef663 --- /dev/null +++ b/gfx/trainer/gama.png diff --git a/gfx/trainer/green.png b/gfx/trainer/green.png Binary files differnew file mode 100644 index 0000000..6b94fd2 --- /dev/null +++ b/gfx/trainer/green.png diff --git a/gfx/trainer/hayato.png b/gfx/trainer/hayato.png Binary files differnew file mode 100644 index 0000000..2d93a75 --- /dev/null +++ b/gfx/trainer/hayato.png diff --git a/gfx/trainer/juggler.png b/gfx/trainer/juggler.png Binary files differnew file mode 100644 index 0000000..4a4f8a0 --- /dev/null +++ b/gfx/trainer/juggler.png diff --git a/gfx/trainer/kimonogirl.png b/gfx/trainer/kimonogirl.png Binary files differnew file mode 100644 index 0000000..184c226 --- /dev/null +++ b/gfx/trainer/kimonogirl.png diff --git a/gfx/trainer/kurt.png b/gfx/trainer/kurt.png Binary files differnew file mode 100644 index 0000000..b881214 --- /dev/null +++ b/gfx/trainer/kurt.png diff --git a/gfx/trainer/lass.png b/gfx/trainer/lass.png Binary files differnew file mode 100644 index 0000000..ef5781c --- /dev/null +++ b/gfx/trainer/lass.png diff --git a/gfx/trainer/medium.png b/gfx/trainer/medium.png Binary files differnew file mode 100644 index 0000000..49b29c7 --- /dev/null +++ b/gfx/trainer/medium.png diff --git a/gfx/trainer/mikan.png b/gfx/trainer/mikan.png Binary files differnew file mode 100644 index 0000000..e8150cf --- /dev/null +++ b/gfx/trainer/mikan.png diff --git a/gfx/trainer/oak.png b/gfx/trainer/oak.png Binary files differnew file mode 100644 index 0000000..7c7452f --- /dev/null +++ b/gfx/trainer/oak.png diff --git a/gfx/trainer/okera.png b/gfx/trainer/okera.png Binary files differnew file mode 100644 index 0000000..48392bf --- /dev/null +++ b/gfx/trainer/okera.png diff --git a/gfx/trainer/pokemaniac.png b/gfx/trainer/pokemaniac.png Binary files differnew file mode 100644 index 0000000..e0d7957 --- /dev/null +++ b/gfx/trainer/pokemaniac.png diff --git a/gfx/trainer/professional_f.png b/gfx/trainer/professional_f.png Binary files differnew file mode 100644 index 0000000..3075251 --- /dev/null +++ b/gfx/trainer/professional_f.png diff --git a/gfx/trainer/professional_m.png b/gfx/trainer/professional_m.png Binary files differnew file mode 100644 index 0000000..610dad5 --- /dev/null +++ b/gfx/trainer/professional_m.png diff --git a/gfx/trainer/protagonist.png b/gfx/trainer/protagonist.png Binary files differnew file mode 100644 index 0000000..5215e15 --- /dev/null +++ b/gfx/trainer/protagonist.png diff --git a/gfx/trainer/rival.png b/gfx/trainer/rival.png Binary files differnew file mode 100644 index 0000000..9514cb9 --- /dev/null +++ b/gfx/trainer/rival.png diff --git a/gfx/trainer/rocket_m.png b/gfx/trainer/rocket_m.png Binary files differnew file mode 100644 index 0000000..257ad50 --- /dev/null +++ b/gfx/trainer/rocket_m.png diff --git a/gfx/trainer/schoolboy.png b/gfx/trainer/schoolboy.png Binary files differnew file mode 100644 index 0000000..ab8b8d4 --- /dev/null +++ b/gfx/trainer/schoolboy.png diff --git a/gfx/trainer/soldier.png b/gfx/trainer/soldier.png Binary files differnew file mode 100644 index 0000000..3dd9d4f --- /dev/null +++ b/gfx/trainer/soldier.png diff --git a/gfx/trainer/sportsman.png b/gfx/trainer/sportsman.png Binary files differnew file mode 100644 index 0000000..0d1f02d --- /dev/null +++ b/gfx/trainer/sportsman.png diff --git a/gfx/trainer/supernerd.png b/gfx/trainer/supernerd.png Binary files differnew file mode 100644 index 0000000..5034203 --- /dev/null +++ b/gfx/trainer/supernerd.png diff --git a/gfx/trainer/swimmer_f.png b/gfx/trainer/swimmer_f.png Binary files differnew file mode 100644 index 0000000..53d040a --- /dev/null +++ b/gfx/trainer/swimmer_f.png diff --git a/gfx/trainer/swimmer_m.png b/gfx/trainer/swimmer_m.png Binary files differnew file mode 100644 index 0000000..e143f9b --- /dev/null +++ b/gfx/trainer/swimmer_m.png diff --git a/gfx/trainer/teacher_f.png b/gfx/trainer/teacher_f.png Binary files differnew file mode 100644 index 0000000..8ba703b --- /dev/null +++ b/gfx/trainer/teacher_f.png diff --git a/gfx/trainer/teacher_m.png b/gfx/trainer/teacher_m.png Binary files differnew file mode 100644 index 0000000..66c1710 --- /dev/null +++ b/gfx/trainer/teacher_m.png diff --git a/gfx/trainer/tsukushi.png b/gfx/trainer/tsukushi.png Binary files differnew file mode 100644 index 0000000..b898a86 --- /dev/null +++ b/gfx/trainer/tsukushi.png diff --git a/gfx/trainer/twins.png b/gfx/trainer/twins.png Binary files differnew file mode 100644 index 0000000..0f8d4ed --- /dev/null +++ b/gfx/trainer/twins.png diff --git a/gfx/trainer/youngster.png b/gfx/trainer/youngster.png Binary files differnew file mode 100644 index 0000000..00ba41b --- /dev/null +++ b/gfx/trainer/youngster.png diff --git a/home/audio.asm b/home/audio.asm index ede88d4..bf3a6c5 100644 --- a/home/audio.asm +++ b/home/audio.asm @@ -7,143 +7,136 @@ SECTION "Audio interface", ROM0[$3C83] endc DisableAudio:: ; 3cbf - push hl - push de - push bc - push af - ldh a, [hROMBank] - push af - ld a, BANK(_DisableAudio) - ld [MBC3RomBank], a ; Unsafe - ldh [hROMBank], a - call _DisableAudio - pop af - ld [MBC3RomBank], a ; Unsafe - ldh [hROMBank], a - pop af - pop bc - pop de - pop hl - ret - + push hl + push de + push bc + push af + ldh a, [hROMBank] + push af + ld a, BANK(_DisableAudio) + ld [MBC3RomBank], a ; Unsafe + ldh [hROMBank], a + call _DisableAudio + pop af + ld [MBC3RomBank], a ; Unsafe + ldh [hROMBank], a + pop af + pop bc + pop de + pop hl + ret UpdateSound:: ; 3cdb - push hl - push de - push bc - push af - ldh a, [hROMBank] - push af - ld a, BANK(_UpdateSound) - ld [MBC3RomBank], a ; Unsafe - ldh [hROMBank], a - call _UpdateSound - pop af - ld [MBC3RomBank], a ; Unsafe - ldh [hROMBank], a - pop af - pop bc - pop de - pop hl - ret - + push hl + push de + push bc + push af + ldh a, [hROMBank] + push af + ld a, BANK(_UpdateSound) + ld [MBC3RomBank], a ; Unsafe + ldh [hROMBank], a + call _UpdateSound + pop af + ld [MBC3RomBank], a ; Unsafe + ldh [hROMBank], a + pop af + pop bc + pop de + pop hl + ret _LoadMusicByte:: ; 3cf7 - ld [MBC3RomBank], a ; Unsafe - ldh [hROMBank], a - ld a, [de] - push af - ld a, BANK(_UpdateSound) - ld [MBC3RomBank], a ; Unsafe - ldh [hROMBank], a - pop af - ret - + ld [MBC3RomBank], a ; Unsafe + ldh [hROMBank], a + ld a, [de] + push af + ld a, BANK(_UpdateSound) + ld [MBC3RomBank], a ; Unsafe + ldh [hROMBank], a + pop af + ret PlayMusic:: ; 3d07 - push hl - push de - push bc - push af - ldh a, [hROMBank] - push af - ld a, BANK(_PlayMusic) - ld [MBC3RomBank], a ; Unsafe - ldh [hROMBank], a - call _PlayMusic - pop af - ld [MBC3RomBank], a ; Unsafe - ldh [hROMBank], a - pop af - pop bc - pop de - pop hl - ret - + push hl + push de + push bc + push af + ldh a, [hROMBank] + push af + ld a, BANK(_PlayMusic) + ld [MBC3RomBank], a ; Unsafe + ldh [hROMBank], a + call _PlayMusic + pop af + ld [MBC3RomBank], a ; Unsafe + ldh [hROMBank], a + pop af + pop bc + pop de + pop hl + ret PlayCryHeader:: ; 3d23 - push hl - push de - push bc - push af - ldh a, [hROMBank] - push af - - ld a, BANK(CryHeaders) - ld [MBC3RomBank], a ; Unsafe - ldh [hROMBank], a - ld hl, CryHeaders -REPT 6 - add hl, de -ENDR - ld e, [hl] - inc hl - ld d, [hl] - inc hl - ld a, [hli] - ld [wCryPitch], a - ld a, [hli] - ld [wCryPitch + 1], a - ld a, [hli] - ld [wCryLength], a - ld a, [hl] - ld [wCryLength + 1], a - - ld a, BANK(_PlayCryHeader) - ld [MBC3RomBank], a ; Unsafe - ldh [hROMBank], a - call _PlayCryHeader + push hl + push de + push bc + push af + ldh a, [hROMBank] + push af + + ld a, BANK(CryHeaders) + ld [MBC3RomBank], a ; Unsafe + ldh [hROMBank], a + ld hl, CryHeaders +rept 6 + add hl, de +endr + ld e, [hl] + inc hl + ld d, [hl] + inc hl + ld a, [hli] + ld [wCryPitch], a + ld a, [hli] + ld [wCryPitch + 1], a + ld a, [hli] + ld [wCryLength], a + ld a, [hl] + ld [wCryLength + 1], a + + ld a, BANK(_PlayCryHeader) + ld [MBC3RomBank], a ; Unsafe + ldh [hROMBank], a + call _PlayCryHeader - pop af - ld [MBC3RomBank], a ; Unsafe - ldh [hROMBank], a - pop af - pop bc - pop de - pop hl - ret - - - + pop af + ld [MBC3RomBank], a ; Unsafe + ldh [hROMBank], a + pop af + pop bc + pop de + pop hl + ret PlaySFX:: ; 3d63 - push hl - push de - push bc - push af - ldh a, [hROMBank] - push af - ld a, BANK(_PlaySFX) - ld [MBC3RomBank], a ; Unsafe - ldh [hROMBank], a - call _PlaySFX - pop af - ld [MBC3RomBank], a ; Unsafe - ldh [hROMBank], a - pop af - pop bc - pop de - pop hl - ret + push hl + push de + push bc + push af + ldh a, [hROMBank] + push af + ld a, BANK(_PlaySFX) + ld [MBC3RomBank], a ; Unsafe + ldh [hROMBank], a + call _PlaySFX + pop af + ld [MBC3RomBank], a ; Unsafe + ldh [hROMBank], a + pop af + pop bc + pop de + pop hl + ret WaitPlaySFX:: ; 3d7f diff --git a/home/bankswitch.asm b/home/bankswitch.asm index 574fa64..278013c 100644 --- a/home/bankswitch.asm +++ b/home/bankswitch.asm @@ -9,6 +9,6 @@ endc ; Moved to a rst vector in final US releases (not sure about JP) ; All rst vectors are unused at this point in development Bankswitch:: ; 32c2 - ldh [hROMBank], a - ld [MBC3RomBank], a - ret + ldh [hROMBank], a + ld [MBC3RomBank], a + ret diff --git a/home/clear_sprites.asm b/home/clear_sprites.asm index 90e8f38..489b375 100644 --- a/home/clear_sprites.asm +++ b/home/clear_sprites.asm @@ -7,23 +7,23 @@ SECTION "Sprite clearing", ROM0[$32A0] endc ClearSprites:: ; 32dc - ld hl, wVirtualOAM - ld b, wVirtualOAMEnd - wVirtualOAM - xor a + ld hl, wVirtualOAM + ld b, wVirtualOAMEnd - wVirtualOAM + xor a .loop - ld [hli], a - dec b - jr nz, .loop - ret + ld [hli], a + dec b + jr nz, .loop + ret HideSprites:: ; 32e7 - ld hl, wVirtualOAM - ld de, SPRITEOAMSTRUCT_LENGTH - ld b, NUM_SPRITE_OAM_STRUCTS - ld a, $A0 + ld hl, wVirtualOAM + ld de, SPRITEOAMSTRUCT_LENGTH + ld b, NUM_SPRITE_OAM_STRUCTS + ld a, SPRITEOAMSTRUCT_LENGTH * NUM_SPRITE_OAM_STRUCTS .loop - ld [hl], a - add hl, de - dec b - jr nz, .loop - ret + ld [hl], a + add hl, de + dec b + jr nz, .loop + ret diff --git a/home/copy.asm b/home/copy.asm index 757da0d..c916cbd 100644 --- a/home/copy.asm +++ b/home/copy.asm @@ -6,72 +6,109 @@ else SECTION "Copy functions", ROM0[$32BB] endc -; Copy bc bytes from a:hl to de. FarCopyBytes:: ; 32f7 - ld [wBuffer], a - ldh a, [hROMBank] - push af - ld a, [wBuffer] - call Bankswitch - call CopyBytes - pop af - jp Bankswitch +; Copy bc bytes from a:hl to de. + ld [wBuffer], a + ldh a, [hROMBank] + push af + ld a, [wBuffer] + call Bankswitch + call CopyBytes + pop af + jp Bankswitch -; Copy bc bytes from hl to de CopyBytes:: ; 330a - ld a, b - and a - jr z, CopyBytesSmall - ld a, c - and a - jr z, .next - inc b +; Copy bc bytes from hl to de + ld a, b + and a + jr z, CopyBytesSmall + ld a, c + and a + jr z, .next + inc b .next - call CopyBytesSmall - dec b - jr nz, .next - ret + call CopyBytesSmall + dec b + jr nz, .next + ret -; Copy c bytes from hl to de CopyBytesSmall:: ; 331a - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, CopyBytesSmall - ret - +; Copy c bytes from hl to de + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, CopyBytesSmall + ret GetFarByte:: ; 3321 - ld [wBuffer], a - ldh a, [hROMBank] - push af - ld a, [wBuffer] - call Bankswitch - ld a, [hl] - ld [wBuffer], a - pop af - call Bankswitch - ld a, [wBuffer] - ret - + ld [wBuffer], a + ldh a, [hROMBank] + push af + ld a, [wBuffer] + call Bankswitch + ld a, [hl] + ld [wBuffer], a + pop af + call Bankswitch + ld a, [wBuffer] + ret ByteFill:: ; 3339 - push af - ld a, b - and a - jr z, .small_fill - ld a, c - and a - jr z, .start_filling + push af + ld a, b + and a + jr z, .small_fill + ld a, c + and a + jr z, .start_filling .small_fill - inc b + inc b .start_filling - pop af + pop af .loop - ld [hli], a - dec c - jr nz, .loop - dec b - jr nz, .loop - ret + ld [hli], a + dec c + jr nz, .loop + dec b + jr nz, .loop + ret + +UncompressSpriteFromDE:: +; Decompress pic at a:de. + ld hl, wSpriteInputPtr + ld [hl], e + inc hl + ld [hl], d + jp UncompressSpriteData + +BackUpTilesToBuffer:: ; 3355 + hlcoord 0, 0 + decoord 0, 0, wTileMapBackup + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + jp CopyBytes + +ReloadTilesFromBuffer:: ; 3361 + xor a + ldh [hBGMapMode], a + hlcoord 0, 0, wTileMapBackup + decoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + call CopyBytes + ld a, 1 + ldh [hBGMapMode], a + ret + +CopyStringToCD31:: +; copies a string from [de] to [wcd31] + ld hl, wcd31 + ; fallthrough + +CopyString:: +; copies a string from [de] to [hl] + ld a, [de] + inc de + ld [hli], a + cp "@" + jr nz, CopyString + ret diff --git a/home/copy2.asm b/home/copy2.asm index 27abf08..0a0ee54 100644 --- a/home/copy2.asm +++ b/home/copy2.asm @@ -2,9 +2,9 @@ INCLUDE "constants.asm" SECTION "Video Copy functions", ROM0[$0D2A] +FarCopyData: ; d2a (0:d2a) ; Identical to FarCopyBytes except for tail call optimization ; Copy bc 2bpp bytes from a:hl to de. -FarCopyData: ; d2a (0:d2a) ld [wBuffer], a ldh a, [hROMBank] push af @@ -15,8 +15,8 @@ FarCopyData: ; d2a (0:d2a) call Bankswitch ret -; Copy and expand bc 1bpp bytes from a:hl to de. FarCopyDataDouble: ; d3e (0:d3e) +; Copy and expand bc 1bpp bytes from a:hl to de. ld [wBuffer], a ldh a, [hROMBank] push af @@ -49,10 +49,10 @@ FarCopyDataDouble: ; d3e (0:d3e) call Bankswitch ret +CopyVideoData:: ; d68 (0:d68) ; Wait for the next VBlank, then copy c 2bpp ; tiles from b:de to hl, 8 tiles at a time. ; This takes c/8 frames. -CopyVideoData:: ; d68 (0:d68) ldh a, [hBGMapMode] push af xor a ; disable auto-transfer while copying @@ -71,7 +71,7 @@ CopyVideoData:: ; d68 (0:d68) ld [wVBCopyDst + 1], a .loop ld a, c - cp $08 + cp $8 jr nc, .keepgoing ld [wVBCopySize], a call DelayFrame @@ -81,18 +81,18 @@ CopyVideoData:: ; d68 (0:d68) ldh [hBGMapMode], a ret .keepgoing - ld a, $08 + ld a, $8 ld [wVBCopySize], a call DelayFrame ld a, c - sub $08 + sub $8 ld c, a jr .loop +CopyVideoDataDouble:: ; da6 (0:da6) ; Wait for the next VBlank, then copy c 1bpp ; tiles from b:de to hl, 8 tiles at a time. ; This takes c/8 frames. -CopyVideoDataDouble:: ; da6 (0:da6) ldh a, [hBGMapMode] push af xor a @@ -111,7 +111,7 @@ CopyVideoDataDouble:: ; da6 (0:da6) ld [wVBCopyDoubleDst + 1], a .loop ld a, c - cp $08 + cp $8 jr nc, .keepgoing ld [wVBCopyDoubleSize], a call DelayFrame @@ -121,18 +121,18 @@ CopyVideoDataDouble:: ; da6 (0:da6) ldh [hBGMapMode], a ret .keepgoing - ld a, $08 + ld a, $8 ld [wVBCopyDoubleSize], a call DelayFrame ld a, c - sub $08 + sub $8 ld c, a jr .loop +CopyVideoDataOptimized:: ; de4 (0:de4) ; Copy c 2bpp tiles from b:de to hl in VRAM ; using VBlank service or direct copy in ; case LCD is off -CopyVideoDataOptimized:: ; de4 (0:de4) ldh a, [rLCDC] bit rLCDC_ENABLE, a jp nz, CopyVideoData ; copy video data during vblank while screen is on @@ -152,10 +152,10 @@ CopyVideoDataOptimized:: ; de4 (0:de4) pop af jp FarCopyData +CopyVideoDataDoubleOptimized: ; dff (0:dff) ; Copy c 1bpp tiles from b:de to hl in VRAM ; using VBlank service or direct copy in ; case LCD is off -CopyVideoDataDoubleOptimized: ; dff (0:dff) ldh a, [rLCDC] bit rLCDC_ENABLE, a jp nz, CopyVideoDataDouble @@ -164,7 +164,7 @@ CopyVideoDataDoubleOptimized: ; dff (0:dff) ld e, l ld a, b push af - ld h, $00 + ld h, 0 ld l, c add hl, hl add hl, hl @@ -174,4 +174,4 @@ CopyVideoDataDoubleOptimized: ; dff (0:dff) pop af pop hl jp FarCopyDataDouble -; 0xe18
\ No newline at end of file +; 0xe18 diff --git a/home/copy_tilemap.asm b/home/copy_tilemap.asm deleted file mode 100644 index 27c33c0..0000000 --- a/home/copy_tilemap.asm +++ /dev/null @@ -1,24 +0,0 @@ -INCLUDE "constants.asm" - -if DEBUG -SECTION "Tilemap copy/restore funcs", ROM0[$3355] -else -SECTION "Tilemap copy/restore funcs", ROM0[$3319] -endc - -BackUpTilesToBuffer:: ; 3355 - hlcoord 0, 0 - decoord 0, 0, wTileMapBackup - ld bc, SCREEN_HEIGHT * SCREEN_WIDTH - jp CopyBytes - -ReloadTilesFromBuffer:: ; 3361 - xor a - ldh [hBGMapMode], a - hlcoord 0, 0, wTileMapBackup - decoord 0, 0 - ld bc, SCREEN_HEIGHT * SCREEN_WIDTH - call CopyBytes - ld a, 1 - ldh [hBGMapMode], a - ret diff --git a/home/delay.asm b/home/delay.asm index dc3ad40..286cc0c 100644 --- a/home/delay.asm +++ b/home/delay.asm @@ -4,23 +4,19 @@ SECTION "Delay", ROM0[$0317] DelayFrame:: ; Wait for one frame - ld a, 1 - ld [wVBlankOccurred], a - -; Wait for the next VBlank, halting to conserve battery + ld a, 1 + ld [wVBlankOccurred], a .halt - halt ; rgbasm adds a nop after this instruction by default - ld a, [wVBlankOccurred] - and a - jr nz, .halt - - ret - +; Wait for the next VBlank, halting to conserve battery + halt ; rgbasm adds a nop after this instruction by default + ld a, [wVBlankOccurred] + and a + jr nz, .halt + ret DelayFrames:: ; Wait c frames - call DelayFrame - dec c - jr nz, DelayFrames - - ret + call DelayFrame + dec c + jr nz, DelayFrames + ret diff --git a/home/farcall.asm b/home/farcall.asm index 32fcce5..3fcf37f 100644 --- a/home/farcall.asm +++ b/home/farcall.asm @@ -7,36 +7,36 @@ SECTION "FarCall", ROM0[$2F6C] endc FarCall_hl:: ; 2fa8 - push af - ld a, b - ld [wFarCallBCBuffer], a - ld a, c - ld [wFarCallBCBuffer + 1], a - pop af - ld b, a - ldh a, [hROMBank] - push af - ld a, b - call Bankswitch - ld bc, .return - push bc - push hl - ld a, [wFarCallBCBuffer] - ld b, a - ld a, [wFarCallBCBuffer + 1] - ld c, a - ret + push af + ld a, b + ld [wFarCallBCBuffer], a + ld a, c + ld [wFarCallBCBuffer + 1], a + pop af + ld b, a + ldh a, [hROMBank] + push af + ld a, b + call Bankswitch + ld bc, .return + push bc + push hl + ld a, [wFarCallBCBuffer] + ld b, a + ld a, [wFarCallBCBuffer + 1] + ld c, a + ret .return - ld a, b - ld [wFarCallBCBuffer], a - ld a, c - ld [wFarCallBCBuffer + 1], a - pop bc - ld a, b - call Bankswitch - ld a, [wFarCallBCBuffer] - ld b, a - ld a, [wFarCallBCBuffer + 1] - ld c, a - ret + ld a, b + ld [wFarCallBCBuffer], a + ld a, c + ld [wFarCallBCBuffer + 1], a + pop bc + ld a, b + call Bankswitch + ld a, [wFarCallBCBuffer] + ld b, a + ld a, [wFarCallBCBuffer + 1] + ld c, a + ret diff --git a/home/init.asm b/home/init.asm index 5498b35..ef4b745 100644 --- a/home/init.asm +++ b/home/init.asm @@ -1,8 +1,8 @@ INCLUDE "constants.asm" SECTION "Entry point", ROM0[$100] - nop - jp Init + nop + jp Init SECTION "Global check value", ROM0[$14E] ; The ROM has an incorrect global check, so set it here @@ -25,121 +25,122 @@ endc SECTION "Init", ROM0[$52F] Init: ; 052f - di - xor a - ld [rIF], a - ld [rIE], a - ld [rSCX], a - ld [rSCY], a - ld [rSB], a - ld [rSC], a - ld [rWX], a - ld [rWY], a - ld [rBGP], a - ld [rOBP0], a - ld [rOBP1], a - ld [rTMA], a - ld [rTAC], a - ld [wcc38], a ; Useless, since WRAM gets cleared right after - ld a, 1 << rTAC_ON | rTAC_4096_HZ - ld [rTAC], a - ld a, 1 << rLCDC_ENABLE - ld [rLCDC], a - call DisableLCD - - ld sp, wStackBottom - call ClearVRAM - ld hl, WRAM0_Begin - ld bc, WRAM1_End - WRAM0_Begin + di + xor a + ld [rIF], a + ld [rIE], a + ld [rSCX], a + ld [rSCY], a + ld [rSB], a + ld [rSC], a + ld [rWX], a + ld [rWY], a + ld [rBGP], a + ld [rOBP0], a + ld [rOBP1], a + ld [rTMA], a + ld [rTAC], a + ld [wcc38], a ; Useless, since WRAM gets cleared right after + ld a, 1 << rTAC_ON | rTAC_4096_HZ + ld [rTAC], a + ld a, 1 << rLCDC_ENABLE + ld [rLCDC], a + call DisableLCD + + ld sp, wStackBottom + call ClearVRAM + ld hl, WRAM0_Begin + ld bc, WRAM1_End - WRAM0_Begin .ByteFill ; 0565 - ld [hl], 0 - inc hl - dec bc - ld a, b - or c - jr nz, .ByteFill - ld hl, HRAM_Begin - ld bc, HRAM_End - HRAM_Begin - call ByteFill - call ClearSprites - - ld a, BANK(WriteOAMDMACodeToHRAM) - call Bankswitch - call WriteOAMDMACodeToHRAM - - xor a - ldh [hMapAnims], a - ldh [hSCX], a - ldh [hSCY], a - ldh [rJOYP], a - ld a, 1 << rSTAT_HBLANK - ld [rSTAT], a - ld a, SCREEN_HEIGHT_PX - ldh [hWY], a - ld [rWY], a - ld a, 7 - ldh [hWX], a - ld [rWX], a - - ld a, $FF - ldh [hLinkPlayerNumber], a - ld h, HIGH($9800) - call BlankBGMap - ld h, HIGH($9C00) - call BlankBGMap - ld a, LCDC_DEFAULT - ld [rLCDC], a - - call DisableAudio - call _2007 - ; predef ??? - ld a, $4B ; TODO: add predefs so the line above can be uncommented - call Predef - ld a, $1F - ld [rIE], a - ld a, HIGH($9C00) - ldh [hBGMapAddress + 1], a - xor a - ldh [hBGMapAddress], a - - call DisableLCD - call ClearVRAM - ld a, LCDC_DEFAULT - ld [rLCDC], a - ei - - ld a, SRAM_ENABLE - ld [MBC3SRamEnable], a - ld a, RTC_DH - ld [MBC3SRamBank], a - xor a - ld [SRAM_Begin], a - ld a, 0 ; Useless - ld [MBC3LatchClock], a - ld [MBC3SRamEnable], a - jp GameInit + ld [hl], 0 + inc hl + dec bc + ld a, b + or c + jr nz, .ByteFill + ld hl, HRAM_Begin + ld bc, HRAM_End - HRAM_Begin + call ByteFill + call ClearSprites + + ld a, BANK(WriteOAMDMACodeToHRAM) + call Bankswitch + call WriteOAMDMACodeToHRAM + + xor a + ldh [hMapAnims], a + ldh [hSCX], a + ldh [hSCY], a + ldh [rJOYP], a + ld a, 1 << rSTAT_HBLANK + ld [rSTAT], a + ld a, SCREEN_HEIGHT_PX + ldh [hWY], a + ld [rWY], a + ld a, 7 + ldh [hWX], a + ld [rWX], a + + ld a, $ff + ldh [hLinkPlayerNumber], a + ld h, HIGH($9800) + call BlankBGMap + ld h, HIGH($9C00) + call BlankBGMap + ld a, LCDC_DEFAULT + ld [rLCDC], a + + call DisableAudio + call _2007 + ; predef ??? + ld a, $4B ; TODO: add predefs so the line above can be uncommented + call Predef + ld a, $1F + ld [rIE], a + ld a, HIGH($9C00) + ldh [hBGMapAddress + 1], a + xor a + ldh [hBGMapAddress], a + + call DisableLCD + call ClearVRAM + ld a, LCDC_DEFAULT + ld [rLCDC], a + ei + + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a + ld a, RTC_DH + ld [MBC3SRamBank], a + xor a + ld [SRAM_Begin], a + ld a, 0 ; Useless + ld [MBC3LatchClock], a + ld [MBC3SRamEnable], a + jp GameInit ClearVRAM: ; 05e6 - ld hl, VRAM_Begin - ld bc, VRAM_End - VRAM_Begin - xor a - call ByteFill - ret + ld hl, VRAM_Begin + ld bc, VRAM_End - VRAM_Begin + xor a + call ByteFill + ret BlankBGMap: - ld a, $7F - jr _FillBGMap + ld a, $7f + jr _FillBGMap FillBGMap: - ld a, l + ld a, l + ; fallthrough _FillBGMap: - ld de, $400 - ld l, e + ld de, BG_MAP_WIDTH * BG_MAP_HEIGHT + ld l, e .loop - ld [hli], a - dec e - jr nz, .loop - dec d - jr nz, .loop - ret + ld [hli], a + dec e + jr nz, .loop + dec d + jr nz, .loop + ret diff --git a/home/interrupts.asm b/home/interrupts.asm index b7800f1..f9d8ba1 100644 --- a/home/interrupts.asm +++ b/home/interrupts.asm @@ -1,28 +1,28 @@ INCLUDE "constants.asm" SECTION "VBlank interrupt vector", ROM0[$040] - jp VBlank + jp VBlank SECTION "LCD interrupt vector", ROM0[$048] - jp LCD + jp LCD SECTION "Timer interrupt vector", ROM0[$050] - jp TimerDummy + jp TimerDummy SECTION "Serial interrupt vector", ROM0[$058] - jp Serial + jp Serial SECTION "Joypad interrupt vector", ROM0[$060] - jp JoypadDummy + jp JoypadDummy SECTION "Timer dummy interrupt", ROM0[$42A] TimerDummy: ; 042a - reti + reti SECTION "Joypad dummy interrupt", ROM0[$7F7] JoypadDummy: ; 07f7 - reti + reti diff --git a/home/items.asm b/home/items.asm new file mode 100755 index 0000000..496b685 --- /dev/null +++ b/home/items.asm @@ -0,0 +1,145 @@ +INCLUDE "constants.asm"
+
+if DEBUG
+SECTION "AddItemToInventory", ROM0[$3259]
+else
+SECTION "AddItemToInventory", ROM0[$321D]
+endc
+
+AddItemToInventory:: ; 3259
+; function to add an item (in varying quantities) to the player's bag or PC box
+; INPUT:
+; HL = address of inventory (either wNumBagItems or wNumBoxItems)
+; [wcd76] = item ID
+; [wItemQuantity] = item quantity
+; sets carry flag if successful, unsets carry flag if unsuccessful
+ push bc
+ ldh a, [hROMBank]
+ push af
+ ld a, BANK(AddItemToInventory_)
+ call Bankswitch
+ push hl
+ push de
+ call AddItemToInventory_
+ pop de
+ pop hl
+ pop bc
+ ld a, b
+ call Bankswitch
+ pop bc
+ ret
+
+if DEBUG
+SECTION "GiveItem", ROM0[$366C]
+else
+SECTION "GiveItem", ROM0[$3630]
+endc
+
+GiveItem::
+; Give player quantity c of item b,
+; and copy the item's name to wcf4b.
+; Return carry on success.
+ ld a, b
+ ld [wce37], a
+ ld [wcd76], a
+ ld a, c
+ ld [wItemQuantity], a
+ ld hl, wNumBagItems
+ call AddItemToInventory
+ ret nc
+ call GetItemName
+ call CopyStringToCD31
+ scf
+ ret
+
+if DEBUG
+SECTION "GetItemName", ROM0[$376F]
+else
+SECTION "GetItemName", ROM0[$3733]
+endc
+
+GetItemName:: ; 376F
+; given an item ID at [wce37], store the name of the item into a string
+; starting at wcd26
+ push hl
+ push bc
+ ld a, [wce37]
+ cp ITEM_HM01_RED
+ jr nc, .machine
+
+ ld [wcb5b], a
+ ld a, ITEM_NAME
+ ld [wNameCategory], a
+ call GetName
+ jr .finish
+
+.machine
+ call GetMachineName
+.finish
+ ld de, wcd26 ; pointer to where item name is stored in RAM
+ pop bc
+ pop hl
+ ret
+
+if DEBUG
+SECTION "GetMachineName", ROM0[$378E]
+else
+SECTION "GetMachineName", ROM0[$3752]
+endc
+
+GetMachineName::
+; copies the name of the TM/HM in [wce37] to wcd26
+ push hl
+ push de
+ push bc
+ ld a, [wce37]
+ push af
+ cp ITEM_TM01_RED
+ jr nc, .WriteTM
+; if HM, then write "HM" and add 5 to the item ID, so we can reuse the
+; TM printing code
+ add 5
+ ld [wce37], a
+ ld hl, HiddenPrefix
+ ld bc, 6
+ jr .WriteMachinePrefix
+.WriteTM
+ ld hl, TechnicalPrefix
+ ld bc, 5
+.WriteMachinePrefix
+ ld de, wcd26
+ call CopyBytes
+; now get the machine number and convert it to text
+ ld a, [wce37]
+ sub ITEM_TM01_RED - 1
+ ld b, "0"
+.FirstDigit
+ sub 10
+ jr c, .SecondDigit
+ inc b
+ jr .FirstDigit
+.SecondDigit
+ add 10
+ push af
+ ld a, b
+ ld [de], a
+ inc de
+ pop af
+ ld b, "0"
+ add b
+ ld [de], a
+ inc de
+ ld a, "@"
+ ld [de], a
+ pop af
+ ld [wce37], a
+ pop bc
+ pop de
+ pop hl
+ ret
+
+TechnicalPrefix:
+ db "わざマシン@"
+
+HiddenPrefix:
+ db "ひでんマシン@"
diff --git a/home/joypad.asm b/home/joypad.asm new file mode 100644 index 0000000..e0740f2 --- /dev/null +++ b/home/joypad.asm @@ -0,0 +1,285 @@ +INCLUDE "constants.asm" + +SECTION "Joypad functions", ROM0[$07FE] + +Joypad:: ; 7fe (0:7fe) +; Read the joypad register and translate it to something more +; workable for use in-game. There are 8 buttons, so we can use +; one byte to contain all player input. + +; Updates: + +; hJoypadUp: released this frame (delta) +; hJoypadDown: pressed this frame (delta) +; hJoypadState: currently pressed +; hJoypadSum: pressed so far + ld a, [$d4ab] + and $d0 + ret nz + ld a, 1 << 5 ; select direction keys + ldh [rJOYP], a + ldh a, [rJOYP] + ldh a, [rJOYP] + cpl + and $0f + swap a + ld b, a + ld a, 1 << 4 ; select button keys + ldh [rJOYP], a + ldh a, [rJOYP] + ldh a, [rJOYP] + ldh a, [rJOYP] + ldh a, [rJOYP] + ldh a, [rJOYP] + ldh a, [rJOYP] + cpl + and $0f + or b + ld b, a + ld a, (1 << 5 | 1 << 4) ; port reset + ldh [rJOYP], a + ldh a, [hJoypadState] + ld e, a + xor b + ld d, a + and e + ldh [hJoypadUp], a + ld a, d + and b + ldh [hJoypadDown], a + ld c, a + ldh a, [hJoypadSum] + or c + ldh [hJoypadSum], a + ld a, b + ldh [hJoypadState], a + ldh [hJoypadState2], a + ; Soft-Reset by holding A+B+SELECT+START + and (A_BUTTON | B_BUTTON | SELECT | START) + cp (A_BUTTON | B_BUTTON | SELECT | START) + jp z, Reset + ret + +GetJoypad:: ; 84a (0:84a) +; Update mirror joypad input from hJoypadState (real input) + +; hJoyReleased, hJoyDown and hJoyState are synchronized +; copies of their hJoypad* counterparts. + +; bit 0 A +; 1 B +; 2 SELECT +; 3 START +; 4 RIGHT +; 5 LEFT +; 6 UP +; 7 DOWN + push af + push hl + push de + ld hl, wJoypadFlags + set 6, [hl] ; mutex + ld hl, hJoypadDown + ld de, hJoyDown + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + ld hl, wJoypadFlags + res 6, [hl] + pop de + pop hl + pop af + ret + +JoyTitleScreenInput:: ; 869 (0:869) +; Check if any of the following conditions +; is met for c frames +; - B, Select and Up keys are pressed in same frame +; - A is pressed +; - START is pressed +; +; Inputs: c - number of frames to check for +; Return: carry set if condition met, else reset +.loop + call DelayFrame + push bc + call GetJoypadDebounced + pop bc + ldh a, [hJoyState] + cp (D_UP | SELECT | B_BUTTON) + jr z, .done + ldh a, [hJoySum] + and (START | A_BUTTON) + jr nz, .done + dec c + jr nz, .loop + and a + ret +.done + scf + ret + +GetJoypadDebounced:: ; 884 (0:884) +; Update hJoySum joypad input from either hJoyDown or +; hJoyState depending on hJoyDebounceSrc. +; hJoyState is only updated every 5 frames and +; the update is delayed by 15 frames after any button +; press. + call GetJoypad + ldh a, [hJoyDebounceSrc] + and a + ldh a, [hJoyDown] + jr z, .joyDownSrc +.joyStateSrc + ldh a, [hJoyState] +.joyDownSrc + ldh [hJoySum], a + ldh a, [hJoyDown] + and a + jr z, .sampleAfterPress + ld a, $0f + ld [wVBlankJoyFrameCounter], a + ret +.sampleAfterPress + ld a, [wVBlankJoyFrameCounter] + and a + jr z, .sampleRegular + xor a + ldh [hJoySum], a + ret +.sampleRegular + ld a, $05 + ld [wVBlankJoyFrameCounter], a + ret +; 0x8ad + +TextboxWaitPressAorB_BlinkCursor: ; 8ad (0:8ad) +; Show a blinking cursor in the lower right-hand +; corner of a textbox and wait until A or B is +; pressed. +; +; CAUTION: The cursor has to be shown when calling +; this function or no cursor will be shown at all. +; Waiting on button presses is unaffected by this. + ldh a, [hSpriteWidth] ; hTextBoxCursorBlinkInterval is shared with + push af ; hSpriteWidth and hSpriteHeight, so we need + ldh a, [hSpriteHeight] ; to back them up + push af + xor a + ldh [hTextBoxCursorBlinkInterval], a + ld a, $06 + ldh [hTextBoxCursorBlinkInterval + 1], a ; initially, 0x600 iterations +.loop + push hl + coord hl, (TEXTBOX_WIDTH - 2), (TEXTBOX_Y + TEXTBOX_HEIGHT - 1) + call TextboxBlinkCursor + pop hl + call GetJoypadDebounced + ldh a, [hJoySum] + and (A_BUTTON | B_BUTTON) + jr z, .loop + pop af + ldh [hSpriteHeight], a + pop af + ldh [hSpriteWidth], a + ret + +ButtonSound:: ; 8d2 (0:8d2) + ld a, [wLinkMode] + cp $03 + jr z, .link + call WaitAorB_BlinkCursor + push de + ld de, $5 + call PlaySFX + pop de + ret +.link + ld c, $41 + jp DelayFrames + +WaitAorB_BlinkCursor:: ; 8ea (0:8ea) +.loop + call BlinkCursor + call GetJoypadDebounced + ldh a, [hJoySum] + and (A_BUTTON | B_BUTTON) + ret nz + call RTC + call UpdateTimeOfDayPalettes + ld a, $01 + ldh [hBGMapMode], a + call DelayFrame + jr .loop + +BlinkCursor: ; 904 (0:904) +; Show a blinking cursor in the lower right-hand +; corner of the screen +; Will toggle between cursor and blank every +; 16 frames. + ldh a, [hVBlankCounter] + and $10 + jr z, .cursor_off + ld a, "▼" + jr .save_cursor_state +.cursor_off + ld a, " " +.save_cursor_state + ldcoord_a (SCREEN_WIDTH - 2), (SCREEN_HEIGHT - 1) + ret + +TextboxBlinkCursor:: ; 914 (0:914) +; Show a blinking cursor at the specified position +; that toggles between down arrow and horizontal textbox +; frame tile. +; hl - address of cursor +; hTextBoxCursorBlinkInterval - initial delay between toggling +; subsequent delays will be 0x6FF +; calls of this function +; CAUTION: if the cursor is not shown initially, even initial +; hTextBoxCursorBlinkInterval values will cause no cursor +; to be shown at all. + ld a, [hl] + ld b, a + ld a, "▼" + cp b + jr nz, .showCursorCountdown +.showTextboxFrameCountdown + ldh a, [hTextBoxCursorBlinkInterval] + dec a + ldh [hTextBoxCursorBlinkInterval], a + ret nz + ldh a, [hTextBoxCursorBlinkInterval + 1] + dec a + ldh [hTextBoxCursorBlinkInterval + 1], a + ret nz + ld a, "─" + ld [hl], a + ld a, $ff + ldh [hTextBoxCursorBlinkInterval], a + ld a, $06 + ldh [hTextBoxCursorBlinkInterval + 1], a ; reset to 0x6FF iterations + ret +.showCursorCountdown + ldh a, [hTextBoxCursorBlinkInterval] + and a + ret z + dec a + ldh [hTextBoxCursorBlinkInterval], a + ret nz + dec a + ldh [hTextBoxCursorBlinkInterval], a + ldh a, [hTextBoxCursorBlinkInterval + 1] + dec a + ldh [hTextBoxCursorBlinkInterval + 1], a + ret nz + ld a, $06 + ldh [hTextBoxCursorBlinkInterval + 1], a ; reset to 0x6FF iterations + ld a, "▼" + ld [hl], a + ret diff --git a/home/lcd.asm b/home/lcd.asm index 6641f05..e915806 100644 --- a/home/lcd.asm +++ b/home/lcd.asm @@ -3,78 +3,78 @@ INCLUDE "constants.asm" SECTION "LCD functions", ROM0[$3AE] LCD:: ; 03ae - push af - ldh a, [hLCDCPointer] - and a - jr z, .done - push hl - rla - jr c, .try_hide_sprites - ld a, [rLY] - ld l, a - ld h, HIGH(wLYOverrides) - ld h, [hl] - ldh a, [hLCDCPointer] - ld l, a - ld a, h - ld h, $FF - ld [hl], a - pop hl - pop af - reti + push af + ldh a, [hLCDCPointer] + and a + jr z, .done + push hl + rla + jr c, .try_hide_sprites + ld a, [rLY] + ld l, a + ld h, HIGH(wLYOverrides) + ld h, [hl] + ldh a, [hLCDCPointer] + ld l, a + ld a, h + ld h, $FF + ld [hl], a + pop hl + pop af + reti .try_hide_sprites - ld a, [rLY] - cp $80 - jr nz, .dont_hide - ld hl, rLCDC - res 1, [hl] + ld a, [rLY] + cp $80 + jr nz, .dont_hide + ld hl, rLCDC + res 1, [hl] .dont_hide - pop hl - pop af - reti + pop hl + pop af + reti - ; Seems unused? - ldh a, [hSCX] - ld [rSCX], a - ldh a, [hSCY] - ld [rSCY], a - pop hl + ; Seems unused? + ldh a, [hSCX] + ld [rSCX], a + ldh a, [hSCY] + ld [rSCY], a + pop hl .done - pop af - reti + pop af + reti ; 0:3e1 ; TODO: can this be done using `sine_table`? - db 0, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 3, 3, 2, 2, 1, 0, -1, -2, -2, -3, -3, -4, -4, -4, -4, -4, -3, -3, -2, -2, -1 + db 0, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 3, 3, 2, 2, 1, 0, -1, -2, -2, -3, -3, -4, -4, -4, -4, -4, -3, -3, -2, -2, -1 DisableLCD:: ; 0401 - ld a, [rLCDC] - bit 7, a - ret z - xor a - ld [rIF], a - ld a, [rIE] - ld b, a - res 0, a - ld [rIE], a + ld a, [rLCDC] + bit 7, a + ret z + xor a + ld [rIF], a + ld a, [rIE] + ld b, a + res 0, a + ld [rIE], a .wait - ld a, [rLY] - cp LY_VBLANK + 1 - jr nz, .wait - ld a, [rLCDC] - and $7F ; Shut LCD down - ld [rLCDC], a - xor a - ld [rIF], a - ld a, b - ld [rIE], a - ret + ld a, [rLY] + cp LY_VBLANK + 1 + jr nz, .wait + ld a, [rLCDC] + and $7f ; Shut LCD down + ld [rLCDC], a + xor a + ld [rIF], a + ld a, b + ld [rIE], a + ret EnableLCD:: ; 0423 - ld a, [rLCDC] - set 7, a - ld [rLCDC], a - ret + ld a, [rLCDC] + set 7, a + ld [rLCDC], a + ret diff --git a/home/names.asm b/home/names.asm new file mode 100644 index 0000000..7ce5767 --- /dev/null +++ b/home/names.asm @@ -0,0 +1,23 @@ +INCLUDE "constants.asm" + +if DEBUG +SECTION "GetNthString", ROM0[$3732] +else +SECTION "GetNthString", ROM0[$36F6] +endc + +GetNthString:: +; Return the address of the ath string starting from hl. + and a + ret z + push bc + ld b, a + ld c, "@" +.readChar: + ld a, [hli] + cp c + jr nz, .readChar + dec b + jr nz, .readChar + pop bc + ret diff --git a/home/oam_dma.asm b/home/oam_dma.asm index d76df89..42ecaaf 100644 --- a/home/oam_dma.asm +++ b/home/oam_dma.asm @@ -3,23 +3,23 @@ INCLUDE "constants.asm" SECTION "OAM DMA", ROMX[$4153],BANK[1] WriteOAMDMACodeToHRAM:: ; 4153 - ld c, LOW(hOAMDMA) - ld b, .OAMDMAEnd - .OAMDMA - ld hl, .OAMDMA + ld c, LOW(hOAMDMA) + ld b, .OAMDMAEnd - .OAMDMA + ld hl, .OAMDMA .loop - ld a, [hli] - ld [$ff00+c], a - inc c - dec b - jr nz, .loop - ret + ld a, [hli] + ld [$ff00+c], a + inc c + dec b + jr nz, .loop + ret .OAMDMA ; 4161 - ld a, HIGH(wVirtualOAM) - ldh [rDMA], a - ld a, $28 + ld a, HIGH(wVirtualOAM) + ldh [rDMA], a + ld a, $28 .wait - dec a - jr nz, .wait - ret + dec a + jr nz, .wait + ret .OAMDMAEnd ; 416b diff --git a/home/pic.asm b/home/pic.asm index 60dd6a3..04cf7bb 100644 --- a/home/pic.asm +++ b/home/pic.asm @@ -2,9 +2,9 @@ INCLUDE "constants.asm" SECTION "Decompression Functions", ROM0[$095E] +UncompressSpriteData:: ; 95e (0:95e) ; bankswitches and runs _UncompressSpriteData ; bank is given in a, sprite input stream is pointed to in wSpriteInputPtr -UncompressSpriteData:: ; 95e (0:95e) ld b, a ldh a, [hROMBank] push af @@ -18,11 +18,11 @@ UncompressSpriteData:: ; 95e (0:95e) call Bankswitch ret -; initializes necessary data to load a sprite and runs UncompressSpriteDataLoop _UncompressSpriteData:: ; 976 (0:976) +; initializes necessary data to load a sprite and runs UncompressSpriteDataLoop ld hl, sSpriteBuffer1 - ld c, (2*SPRITEBUFFERSIZE) % $100 - ld b, (2*SPRITEBUFFERSIZE) / $100 + ld c, (2 * SPRITEBUFFERSIZE) % $100 + ld b, (2 * SPRITEBUFFERSIZE) / $100 xor a call ByteFill ld a, $01 ; next call to ReadNextInputBit will read byte @@ -51,12 +51,12 @@ _UncompressSpriteData:: ; 976 (0:976) ld [wSpriteLoadFlags], a ; initialite bit1 to 0 and bit0 to the first input bit ; this will load two chunks of data to sSpriteBuffer1 and sSpriteBuffer2 ; bit 0 decides in which one the first chunk is placed - ; fall through + ; fallthrough +UncompressSpriteDataLoop:: ; uncompresses a chunk from the sprite input data stream (pointed to at wSpriteInputPtr) into sSpriteBuffer1 or sSpriteBuffer2 ; each chunk is a 1bpp sprite. A 2bpp sprite consist of two chunks which are merged afterwards ; note that this is an endless loop which is terminated during a call to MoveToNextBufferPosition by manipulating the stack -UncompressSpriteDataLoop:: ld hl, sSpriteBuffer1 ld a, [wSpriteLoadFlags] bit 0, a @@ -143,10 +143,10 @@ UncompressSpriteDataLoop:: jr nz, .writeZerosLoop jr .readNextInput +MoveToNextBufferPosition:: ; a34 (0:a34) ; moves output pointer to next position ; also cancels the calling function if the all output is done (by removing the return pointer from stack) ; and calls postprocessing functions according to the unpack mode -MoveToNextBufferPosition:: ; a34 (0:a34) ld a, [wSpriteHeight] ld b, a ld a, [wSpriteCurPosY] @@ -206,8 +206,8 @@ MoveToNextBufferPosition:: ; a34 (0:a34) .done jp UnpackSprite -; writes 2 bits (from a) to the output buffer (pointed to from wSpriteOutputPtr) WriteSpriteBitsToBuffer:: ; aa5 (0:aa5) +; writes 2 bits (from a) to the output buffer (pointed to from wSpriteOutputPtr) ld e, a ld a, [wSpriteOutputBitOffset] and a @@ -234,8 +234,8 @@ WriteSpriteBitsToBuffer:: ; aa5 (0:aa5) ld [hl], a ret -; reads next bit from input stream and returns it in a ReadNextInputBit:: ; acc (0:acc) +; reads next bit from input stream and returns it in a ld a, [wSpriteInputBitCounter] dec a jr nz, .curByteHasMoreBitsToRead @@ -250,8 +250,8 @@ ReadNextInputBit:: ; acc (0:acc) and $01 ret -; reads next byte from input stream and returns it in a ReadNextInputByte: ; ae7 (0:ae7) +; reads next byte from input stream and returns it in a ld a, [wSpriteInputPtr] ld l, a ld a, [wSpriteInputPtr + 1] @@ -265,8 +265,8 @@ ReadNextInputByte: ; ae7 (0:ae7) ld a, b ret -; the nth item is 2^n - 1 LengthEncodingOffsetList:: +; the nth item is 2^n - 1 dw %0000000000000001 dw %0000000000000011 dw %0000000000000111 @@ -284,8 +284,8 @@ LengthEncodingOffsetList:: dw %0111111111111111 dw %1111111111111111 -; unpacks the sprite data depending on the unpack mode UnpackSprite:: ; b1b (0:b1b) +; unpacks the sprite data depending on the unpack mode ld a, [wSpriteUnpackMode] cp $02 jp z, UnpackSpriteMode2 @@ -294,11 +294,11 @@ UnpackSprite:: ; b1b (0:b1b) ld hl, sSpriteBuffer1 call SpriteDifferentialDecode ld hl, sSpriteBuffer2 - ; fall through + ; fallthrough +SpriteDifferentialDecode:: ; decodes differential encoded sprite data ; input bit value 0 preserves the current bit value and input bit value 1 toggles it (starting from initial value 0). -SpriteDifferentialDecode:: xor a ld [wSpriteCurPosX], a ld [wSpriteCurPosY], a @@ -382,8 +382,8 @@ SpriteDifferentialDecode:: ld [wSpriteCurPosY], a ret -; decodes the nybble stored in a. Last decoded data is assumed to be in e (needed to determine if initial value is 0 or 1) DifferentialDecodeNybble:: ; bc9 (0:bc9) +; decodes the nybble stored in a. Last decoded data is assumed to be in e (needed to determine if initial value is 0 or 1) srl a ; c=a%2, a/=2 ld c, $00 jr nc, .evenNumber @@ -462,8 +462,8 @@ DecodeNybble1TableFlipped:: dn $e, $6 dn $2, $a -; combines the two loaded chunks with xor (the chunk loaded second is the destination). The source chunk is differentially decoded beforehand. XorSpriteChunks:: ; c23 (0:c23) +; combines the two loaded chunks with xor (the chunk loaded second is the destination). The source chunk is differentially decoded beforehand. xor a ld [wSpriteCurPosX], a ld [wSpriteCurPosY], a @@ -527,8 +527,8 @@ XorSpriteChunks:: ; c23 (0:c23) ld [wSpriteCurPosX], a ret -; reverses the bits in the nybble given in register a ReverseNybble:: ; c93 (0:c93) +; reverses the bits in the nybble given in register a ld de, NybbleReverseTable add e ld e, a @@ -538,8 +538,8 @@ ReverseNybble:: ; c93 (0:c93) ld a, [de] ret -; resets sprite buffer pointers to buffer 1 and 2, depending on wSpriteLoadFlags ResetSpriteBufferPointers:: ; c9d (0:c9d) +; resets sprite buffer pointers to buffer 1 and 2, depending on wSpriteLoadFlags ld a, [wSpriteLoadFlags] bit 0, a jr nz, .buffer2Selected @@ -564,8 +564,8 @@ ResetSpriteBufferPointers:: ; c9d (0:c9d) NybbleReverseTable:: db $0, $8, $4, $c, $2, $a, $6 ,$e, $1, $9, $5, $d, $3, $b, $7 ,$f -; combines the two loaded chunks with xor (the chunk loaded second is the destination). Both chunks are differentially decoded beforehand. UnpackSpriteMode2:: ; cd3 (0:cd3) +; combines the two loaded chunks with xor (the chunk loaded second is the destination). Both chunks are differentially decoded beforehand. call ResetSpriteBufferPointers ld a, [wSpriteFlipped] push af @@ -581,8 +581,8 @@ UnpackSpriteMode2:: ; cd3 (0:cd3) ld [wSpriteFlipped], a jp XorSpriteChunks -; stores hl into the output pointers StoreSpriteOutputPointer:: ; cf3 (0:cf3) +; stores hl into the output pointers ld a, l ld [wSpriteOutputPtr], a ld [wSpriteOutputPtrCached], a diff --git a/home/pokemon.asm b/home/pokemon.asm index 1f51f8e..f990393 100644 --- a/home/pokemon.asm +++ b/home/pokemon.asm @@ -5,10 +5,10 @@ SECTION "3A4B", ROM0[$3A4B] else SECTION "3A4B", ROM0[$3A0F] endc +GetMonHeader:: ; 3a4b (0:3a4b) ; copies the base stat data of a pokemon to wMonHeader ; INPUT: ; [wcb5b] = pokemon ID in dex order -GetMonHeader:: ; 3a4b (0:3a4b) push bc push de push hl @@ -29,7 +29,7 @@ GetMonHeader:: ; 3a4b (0:3a4b) jr .done .egg ld de, EggPicFront - ld b, $55 ; egg sprite dimension + ln b, 5, 5 ; egg sprite dimension ld hl, wMonHSpriteDim ld [hl], b ld hl, wMonHFrontSprite @@ -53,10 +53,10 @@ else SECTION "3AED", ROM0[$3AB1] endc +UncompressMonSprite:: ; 3aed (0:3aed) ; Uncompresses the front or back sprite of the specified mon ; assumes the corresponding mon header is already loaded ; hl contains offset to sprite pointer ($b for front or $d for back) -UncompressMonSprite:: ; 3aed (0:3aed) ld a, [wMonDexIndex] and a ret z @@ -104,12 +104,12 @@ UncompressMonSprite:: ; 3aed (0:3aed) ld a, BANK(AnnonPics) jp UncompressSpriteData -; Uncompress Pokémon Front Srite for +LoadMonFrontSprite:: ; 3b3f +; Uncompress Pokémon Front Sprite for ; mon currently loaded in wMonHeader ; to 0x9000 ; de: destination location ; returns the sprite dimension in c -LoadMonFrontSprite:: ; 3b3f push de ld hl, wMonHFrontSprite - wMonHeader call UncompressMonSprite @@ -117,13 +117,13 @@ LoadMonFrontSprite:: ; 3b3f ld a, [hl] ld c, a pop de - ; fall through - + ; fallthrough + +LoadUncompressedSpriteData:: ; 3b4c (0:3b4c) ; postprocesses uncompressed sprite chunks to a 2bpp sprite and loads it into video ram ; calculates alignment parameters to place both sprite chunks in the center of the 7*7 tile sprite buffers ; de: destination location ; a,c: sprite dimensions (in tiles of 8x8 each) -LoadUncompressedSpriteData:: ; 3b4c (0:3b4c) push de and $0f ldh [hSpriteWidth], a ; each byte contains 8 pixels (in 1bpp), so tiles=bytes for width @@ -172,15 +172,15 @@ LoadUncompressedSpriteData:: ; 3b4c (0:3b4c) call InterlaceMergeSpriteBuffers ret -; fills the sprite buffer (pointed to in hl) with zeros ZeroSpriteBuffer:: ; 3ba1 (0:3ba1) +; fills the sprite buffer (pointed to in hl) with zeros ld bc, SPRITEBUFFERSIZE xor a jp ByteFill +AlignSpriteDataCentered:: ; 3ba8 (0:3ba8) ; copies and aligns the sprite data properly inside the sprite buffer ; sprite buffers are 7*7 tiles in size, the loaded sprite is centered within this area -AlignSpriteDataCentered:: ; 3ba8 (0:3ba8) ldh a, [hSpriteOffset] ld c, a ld b, $00 @@ -206,28 +206,28 @@ AlignSpriteDataCentered:: ; 3ba8 (0:3ba8) jr nz, .columnLoop ret +InterlaceMergeSpriteBuffers:: ; 3bc6 (0:3bc6) ; combines the (7*7 tiles, 1bpp) sprite chunks in buffer 0 and 1 into a 2bpp sprite located in buffer 1 through 2 ; in the resulting sprite, the rows of the two source sprites are interlaced ; de: output address -InterlaceMergeSpriteBuffers:: ; 3bc6 (0:3bc6) ld a, $00 call OpenSRAM push de call _InterlaceMergeSpriteBuffers pop hl ld de, sSpriteBuffer1 - ld c, (2*SPRITEBUFFERSIZE)/16 ; $31, number of 16 byte chunks to be copied + ld c, (2 * SPRITEBUFFERSIZE) / 16 ; $31, number of 16 byte chunks to be copied ldh a, [hROMBank] ld b, a call CopyVideoDataOptimized call CloseSRAM ret +_InterlaceMergeSpriteBuffers:: ; 3bdf (0:3bdf) ; actual implementation of InterlaceMergeSpriteBuffers ; sprite flipping is now done during interlace merge loop ; and not as second loop after regular interlace merge ; to save time -_InterlaceMergeSpriteBuffers:: ; 3bdf (0:3bdf) ld a, [wSpriteFlipped] and a jr nz, .flipped @@ -271,7 +271,7 @@ _InterlaceMergeSpriteBuffers:: ; 3bdf (0:3bdf) ld hl, sSpriteBuffer2 + (SPRITEBUFFERSIZE - 1) ; destination: end of buffer 2 ld de, sSpriteBuffer1 + (SPRITEBUFFERSIZE - 1) ; source 2: end of buffer 1 ld bc, sSpriteBuffer0 + (SPRITEBUFFERSIZE - 1) ; source 1: end of buffer 0 - ld a, SPRITEBUFFERSIZE/2 ; $c4 + ld a, SPRITEBUFFERSIZE / 2 ; $c4 ldh [hSpriteInterlaceCounter], a .interlaceLoopFlipped ld a, [de] diff --git a/home/predef.asm b/home/predef.asm index a9ff091..e6d5019 100644 --- a/home/predef.asm +++ b/home/predef.asm @@ -7,43 +7,43 @@ SECTION "Predef", ROM0[$2FA2] endc Predef:: ; 2fde - ld [wPredefID], a - ldh a, [hROMBank] - push af - ld a, BANK(GetPredefPointer) - call Bankswitch - call GetPredefPointer - call Bankswitch - ld hl, .return - push hl - push de - jr .get_regs + ld [wPredefID], a + ldh a, [hROMBank] + push af + ld a, BANK(GetPredefPointer) + call Bankswitch + call GetPredefPointer + call Bankswitch + ld hl, .return + push hl + push de + jr .get_regs .return - ld a, h - ld [wPredefHL], a - ld a, l - ld [wPredefHL + 1], a - pop hl - ld a, h ; Could have used `pop af` instead - call Bankswitch - ld a, [wPredefHL] - ld h, a - ld a, [wPredefHL + 1] - ld l, a - ret + ld a, h + ld [wPredefHL], a + ld a, l + ld [wPredefHL + 1], a + pop hl + ld a, h ; Could have used `pop af` instead + call Bankswitch + ld a, [wPredefHL] + ld h, a + ld a, [wPredefHL + 1] + ld l, a + ret .get_regs - ld a, [wPredefHL] - ld h, a - ld a, [wPredefHL + 1] - ld l, a - ld a, [wPredefDE] - ld d, a - ld a, [wPredefDE + 1] - ld e, a - ld a, [wPredefBC] - ld b, a - ld a, [wPredefBC + 1] - ld c, a - ret + ld a, [wPredefHL] + ld h, a + ld a, [wPredefHL + 1] + ld l, a + ld a, [wPredefDE] + ld d, a + ld a, [wPredefDE + 1] + ld e, a + ld a, [wPredefBC] + ld b, a + ld a, [wPredefBC + 1] + ld c, a + ret diff --git a/home/print_bcd.asm b/home/print_bcd.asm new file mode 100644 index 0000000..4f647ff --- /dev/null +++ b/home/print_bcd.asm @@ -0,0 +1,113 @@ +INCLUDE "constants.asm" + +if DEBUG +SECTION "BCD Finalize", ROM0[$33a3] +else +SECTION "BCD Finalize", ROM0[$3367] +endc + +PrintLetterDelay:: ; 33a3 (0:33a3) + ld a, [wce5f] + bit 4, a + ret nz + ld a, [wTextBoxFlags] + bit 1, a + ret z + push hl + push de + push bc + ld a, [wTextBoxFlags] + bit 0, a + jr z, .waitOneFrame + ld a, [wce5f] + and $07 + jr .initFrameCnt +.waitOneFrame + ld a, $01 +.initFrameCnt + ld [wVBlankJoyFrameCounter], a +.checkButtons + call GetJoypad + ldh a, [hJoyState] +.checkAButton + bit 0, a ; is the A button pressed? + jr z, .checkBButton + jr .endWait +.checkBButton + bit 1, a ; is the B button pressed? + jr z, .buttonsNotPressed +.endWait + call DelayFrame + jr .done +.buttonsNotPressed ; if neither A nor B is pressed + ld a, [wVBlankJoyFrameCounter] + and a + jr nz, .checkButtons +.done + pop bc + pop de + pop hl + ret +; 0x33e3 + +if DEBUG +SECTION "BCD Functions", ROM0[$3AB2] +else +SECTION "BCD Functions", ROM0[$3A76] +endc + +; function to print a BCD (Binary-coded decimal) number +; de = address of BCD number +; hl = destination address +; c = flags and length +; bit 7: if set, do not print leading zeroes +; if unset, print leading zeroes +; bit 6: if set, left-align the string (do not pad empty digits with spaces) +; if unset, right-align the string +; bits 0-5: length of BCD number in bytes +; Note that bits 5 and 7 are modified during execution. The above reflects +; their meaning at the beginning of the functions's execution. +PrintBCDNumber:: ; 3ab2 (0:3ab2) + ld b, c ; save flags in b + res 7, c + res 6, c ; c now holds the length +.loop + ld a, [de] + swap a + call PrintBCDDigit + ld a, [de] + call PrintBCDDigit + inc de + dec c + jr nz, .loop + bit 7, b ; were any non-zero digits printed? + jr z, .done +.numberEqualsZero ; if every digit of the BCD number is zero + bit 6, b + jr nz, .skipRightAlignmentAdjustment + dec hl ; if the string is right-aligned, it needs +.skipRightAlignmentAdjustment ;to be moved back one space + ld [hl], "0" + call PrintLetterDelay + inc hl +.done + ret + +PrintBCDDigit:: ; 3ad5 (0:3ad5) + and $0f + and a + jr z, .zeroDigit + res 7, b ; unset 7 to indicate that a nonzero +.outputDigit ; digit has been reached + add "0" + ld [hli], a + jp PrintLetterDelay +.zeroDigit + bit 7, b ; either printing leading zeroes or + jr z, .outputDigit ; already reached a nonzero digit? + bit 6, b + ret nz ; left-align, don't pad with space + ld a, " " + ld [hli], a + ret +; 0x3aed
\ No newline at end of file diff --git a/home/print_hex.asm b/home/print_hex.asm new file mode 100644 index 0000000..993e210 --- /dev/null +++ b/home/print_hex.asm @@ -0,0 +1,42 @@ +INCLUDE "constants.asm" + +if DEBUG +SECTION "Print Hexadecimal functions", ROM0[$3597] +else +SECTION "Print Hexadecimal functions", ROM0[$355B] +endc + +PrintHexBytes: ; 3597 (0:3597) +.loop + push bc + call PrintHexByte + pop bc + dec c + jr nz, .loop + ret + +PrintHexByte:: ; 35a0 (0:35a0) + ld a, [de] + swap a + and $0f + call PrintHexDigit + ld [hli], a + ld a, [de] + and $0f + call PrintHexDigit + ld [hli], a + inc de + ret + +PrintHexDigit: ; 35b2 (0:35b2) + ld bc, .hexDigitTable + add c + ld c, a + ld a, $00 + adc b + ld b, a + ld a, [bc] + ret + +.hexDigitTable: + db "0123456789ABCDEF" diff --git a/home/print_num.asm b/home/print_num.asm new file mode 100644 index 0000000..3ae1c10 --- /dev/null +++ b/home/print_num.asm @@ -0,0 +1,252 @@ +INCLUDE "constants.asm" + +if DEBUG +SECTION "Number Printing Functions", ROM0[$3460] +else +SECTION "Number Printing Functions", ROM0[$3424] +endc + +PrintNumber:: ; 3460 (0:3460) +; function to print a number +; de = address of number in little-endian format +; hl = destination address +; b = flags and length +; bit 7: if set, do not print leading zeroes +; if unset, print leading zeroes +; bit 6: if set, left-align the string (do not pad empty digits with spaces) +; if unset, right-align the string +; bits 0-5: length of number in bytes +; 01 - 1 byte +; 02 - 2 bytes +; <> - 3 bytes +; c = number of digits from 2 to 7 +; For 1-digit numbers, add the value to char "0" +; instead of calling PrintNumber. +; This function works as follow +; There are three temporary registers +; - hPrintNumDividend, +; - hPrintNumDivisor, +; - hPrintNumTemp +; All are three bytes long and organized in big-endian order. +; To produce digits, PrintNumber is going to +; 1. Store Input in hPrintNumDividend +; 1a. Init hPrintNumLeadingDigit to zero (no prior leading digit) +; 2. Repeatedly call .PrintDigit for required digits 7 thru 3: +; 2a. Store divisor in hPrintNumDivisor +; 2b. Divide dividend by divisor to get digit +; 2c. hPrintNumTemp is used, because dividend < divisor might +; not be immediately visible in byte-wise division +; 2d. Update hPrintNumLeadingDigit in case digit > 0 +; 3. Perform the same operations for two digits as byte-wide operations +; as opposed to three-byte-wide operations +; 4. Check if at least one non-zero digit was printed, else print zero. +; 5. Done. + push bc + xor a + ldh [hPrintNumLeadingDigit], a + ldh [hPrintNumDividend], a + ldh [hPrintNumDividend + 1], a + ld a, b + and $0f + cp $01 + jr z, .byte + cp $02 + jr z, .word + ld a, [de] + ldh [hPrintNumDividend], a + inc de + ld a, [de] + ldh [hPrintNumDividend + 1], a + inc de + ld a, [de] + ldh [hPrintNumDividend + 2], a + jr .start +.word + ld a, [de] + ldh [hPrintNumDividend + 1], a + inc de + ld a, [de] + ldh [hPrintNumDividend + 2], a + jr .start +.byte + ld a, [de] + ldh [hPrintNumDividend + 2], a +.start + push de + ld d, b + ld a, c + ld b, a + xor a + ld c, a + ld a, b + cp $02 + jr z, .two_digits + cp $03 + jr z, .three_digits + cp $04 + jr z, .four_digits + cp $05 + jr z, .five_digits + cp $06 + jr z, .six_digits +.seven_digits + ld a, 1000000 / $10000 % $100 + ldh [hPrintNumDivisor], a + ld a, 1000000 / $100 % $100 + ldh [hPrintNumDivisor + 1], a + ld a, 1000000 % $100 + ldh [hPrintNumDivisor + 2], a + call .PrintDigit + call .AdvancePointer +.six_digits + ld a, 100000 / $10000 % $100 + ldh [hPrintNumDivisor], a + ld a, 100000 / $100 % $100 + ldh [hPrintNumDivisor + 1], a + ld a, 100000 % $100 + ldh [hPrintNumDivisor + 2], a + call .PrintDigit + call .AdvancePointer +.five_digits + xor a + ldh [hPrintNumDivisor], a + ld a, 10000 / $100 + ldh [hPrintNumDivisor + 1], a + ld a, 10000 % $100 + ldh [hPrintNumDivisor + 2], a + call .PrintDigit + call .AdvancePointer +.four_digits + xor a + ldh [hPrintNumDivisor], a + ld a, 1000 / $100 + ldh [hPrintNumDivisor + 1], a + ld a, 1000 % $100 + ldh [hPrintNumDivisor + 2], a + call .PrintDigit + call .AdvancePointer +.three_digits + xor a + ldh [hPrintNumDivisor], a + xor a + ldh [hPrintNumDivisor + 1], a + ld a, 100 + ldh [hPrintNumDivisor + 2], a + call .PrintDigit + call .AdvancePointer +.two_digits + ld c, $00 + ldh a, [hPrintNumDividend + 2] +.mod_10 + cp $0a + jr c, .modded_10 + sub $0a + inc c + jr .mod_10 +.modded_10 + ld b, a + ldh a, [hPrintNumLeadingDigit] + or c + ldh [hPrintNumLeadingDigit], a + jr nz, .LeadingNonZero + call .PrintLeadingZero + jr .PrintLeastSignificantDigit +.LeadingNonZero + ld a, "0" + add c + ld [hl], a +.PrintLeastSignificantDigit + call .AdvancePointer + ld a, "0" + add b + ld [hli], a + pop de + pop bc + ret + +.PrintDigit: ; 3525 (0:3525) + ld c, $00 +.loop + ldh a, [hPrintNumDivisor] + ld b, a + ldh a, [hPrintNumDividend] + ldh [hPrintNumTemp], a ; store high byte in case dividend < divisor + cp b ; in subsequent bytes + jr c, .DividendLessThanDivisor ; dividend < divisor --> the digit is zero + sub b + ldh [hPrintNumDividend], a + ldh a, [hPrintNumDivisor + 1] + ld b, a + ldh a, [hPrintNumDividend + 1] + ldh [hPrintNumTemp + 1], a ; store mid byte in case dividend < divisor + cp b ; in subsequent byte + jr nc, .SubtractMidNoBorrow + ldh a, [hPrintNumDividend] ; try to borrow from upper byte + or $00 + jr z, .DividendLessThanDivisorRestoreHigh ; can't borrow, because dividend < divisor + dec a + ldh [hPrintNumDividend], a + ldh a, [hPrintNumDividend + 1] +.SubtractMidNoBorrow + sub b + ldh [hPrintNumDividend + 1], a + ldh a, [hPrintNumDivisor + 2] + ld b, a + ldh a, [hPrintNumDividend + 2] + ldh [hPrintNumTemp + 2], a ; store low byte in case dividend < divisor, which + cp b ; goes unused, because the algorithm doesn't + jr nc, .SubtractLoNoBorrow ; clobber hPrintNumDividend + 2 in that case + ldh a, [hPrintNumDividend + 1] + and a + jr nz, .SubtractLoBorrow + ldh a, [hPrintNumDividend] ; if mid byte == zero, we need to borrow from high + and a + jr z, .DividendLessThanDivisorRestoreMid +.SubtractLoBorrowFromHigh + dec a + ldh [hPrintNumDividend], a + xor a +.SubtractLoBorrow + dec a + ldh [hPrintNumDividend + 1], a + ldh a, [hPrintNumDividend + 2] +.SubtractLoNoBorrow + sub b + ldh [hPrintNumDividend + 2], a + inc c + jr .loop +.DividendLessThanDivisorRestoreMid + ldh a, [hPrintNumTemp + 1] + ldh [hPrintNumDividend + 1], a +.DividendLessThanDivisorRestoreHigh + ldh a, [hPrintNumTemp] + ldh [hPrintNumDividend], a +.DividendLessThanDivisor + ldh a, [hPrintNumLeadingDigit] + or c + jr z, .PrintLeadingZero + ld a, "0" + add c + ld [hl], a + ldh [hPrintNumLeadingDigit], a + ret +.PrintLeadingZero: +; prints a leading zero unless they are turned off in the flags + bit 7, d + ret z + ld [hl], "0" + ret + +.AdvancePointer: ; 3589 (0:3589) +; increments the pointer unless leading zeroes are not being printed, +; the number is left-aligned, and no nonzero digits have been printed yet + bit 7, d ; print leading zeroes? + jr nz, .inc + bit 6, d ; left alignment or right alignment? + jr z, .inc + ldh a, [hPrintNumLeadingDigit] + and a + ret z ; don't advance if leading digit is zero +.inc + inc hl + ret diff --git a/home/serial.asm b/home/serial.asm index 61510b0..48d6832 100644 --- a/home/serial.asm +++ b/home/serial.asm @@ -3,53 +3,52 @@ INCLUDE "constants.asm" SECTION "Serial handler", ROM0[$602] Serial:: - push af - push bc - push de - push hl - ldh a, [hLinkPlayerNumber] - inc a - jr z, .init_player_number + push af + push bc + push de + push hl + ldh a, [hLinkPlayerNumber] + inc a + jr z, .init_player_number - ld a, [rSB] - ldh [hSerialReceive], a - ldh a, [hSerialSend] - ld [rSB], a - ldh a, [hLinkPlayerNumber] - cp 2 - jr z, .done - ld a, 1 << rSC_ON - ld [rSC], a - jr .done + ld a, [rSB] + ldh [hSerialReceive], a + ldh a, [hSerialSend] + ld [rSB], a + ldh a, [hLinkPlayerNumber] + cp 2 + jr z, .done + ld a, 1 << rSC_ON + ld [rSC], a + jr .done .init_player_number - ld a, [rSB] - ldh [hSerialReceive], a - ldh [hLinkPlayerNumber], a - cp 2 - jr z, .master - xor a - ld [rSB], a - ld a, 3 - ld [rDIV], a + ld a, [rSB] + ldh [hSerialReceive], a + ldh [hLinkPlayerNumber], a + cp 2 + jr z, .master + xor a + ld [rSB], a + ld a, 3 + ld [rDIV], a .wait - ld a, [rDIV] - bit 7, a - jr nz, .wait - ld a, 1 << rSC_ON - ld [rSC], a - jr .done + ld a, [rDIV] + bit 7, a + jr nz, .wait + ld a, 1 << rSC_ON + ld [rSC], a + jr .done .master - xor a - ld [rSB], a - + xor a + ld [rSB], a .done - ld a, 1 - ldh [hSerialReceived], a - ld a, SERIAL_NO_DATA_BYTE - ldh [hSerialSend], a - pop hl - pop de - pop bc - pop af - reti + ld a, 1 + ldh [hSerialReceived], a + ld a, SERIAL_NO_DATA_BYTE + ldh [hSerialSend], a + pop hl + pop de + pop bc + pop af + reti diff --git a/home/sram.asm b/home/sram.asm index 03d4411..87f2335 100644 --- a/home/sram.asm +++ b/home/sram.asm @@ -7,19 +7,19 @@ SECTION "SRAM functions", ROM0[$326B] endc OpenSRAM:: ; 32a7 - push af - ld a, 1 - ld [MBC3LatchClock], a - ld a, SRAM_ENABLE - ld [MBC3SRamEnable], a - pop af - ld [MBC3SRamBank], a - ret + push af + ld a, 1 + ld [MBC3LatchClock], a + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a + pop af + ld [MBC3SRamBank], a + ret CloseSRAM:: ; 32b7 - push af - ld a, SRAM_DISABLE - ld [MBC3LatchClock], a - ld [MBC3SRamEnable], a - pop af - ret + push af + ld a, SRAM_DISABLE + ld [MBC3LatchClock], a + ld [MBC3SRamEnable], a + pop af + ret diff --git a/home/text.asm b/home/text.asm new file mode 100644 index 0000000..83bbd42 --- /dev/null +++ b/home/text.asm @@ -0,0 +1,368 @@ +INCLUDE "constants.asm" + +SECTION "Text Commands", ROM0[$107e] + +ScrollTextUpOneLine:: ; 107e (0:107e) +; move both rows of text in the normal text box up one row +; always called twice in a row +; first time, copy the two rows of text to the "in between" rows that are usually emtpy +; second time, copy the bottom row of text into the top row of text + coord hl, TEXTBOX_X, TEXTBOX_INNERY ; top row of text + coord de, TEXTBOX_X, TEXTBOX_INNERY - 1 ; empty line above text + ld b, TEXTBOX_WIDTH * 3 +.copyText + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .copyText + coord hl, TEXTBOX_INNERX, TEXTBOX_INNERY + 2 + ld a, " " + ld b, TEXTBOX_INNERW +.clearText + ld [hli], a + dec b + jr nz, .clearText + ld b, $05 ; wait five frames +.waitFrame + call DelayFrame + dec b + jr nz, .waitFrame + ret + +ProtectedWaitBGMap:: ; 10a0 (0:10a0) + push bc + call WaitBGMap + pop bc + ret + +TextCommandProcessor:: ; 10a6 (0:10a6) +; Process a string of text commands +; at hl and write text to bc + ld a, [wTextBoxFlags] + push af + set 1, a + ld [wTextBoxFlags], a + ld a, c + ld [wTextDest], a + ld a, b + ld [wTextDest + 1], a + ; fall through + +NextTextCommand:: ; 10b7 (0:10b7) + ld a, [hli] + cp "@" ; terminator + jr nz, .doTextCommand + pop af + ld [wTextBoxFlags], a + ret +.doTextCommand + push hl + ld hl, TextCommands + push bc + add a + ld b, $00 + ld c, a + add hl, bc + pop bc + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +Text_TX_BOX:: ; 10d0 (0:10d0) +; TX_BOX +; draw a box +; little endian +; [$04][addr][height][width] + pop hl + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld b, a + ld a, [hli] + ld c, a + push hl + ld h, d + ld l, e + call DrawTextBox + pop hl + jr NextTextCommand + +Text_TX:: ; 10e2 (0:10e2) +; TX +; write text until "@" +; [$00]["...@"] + pop hl + ld d, h + ld e, l + ld h, b + ld l, c + call PlaceString + ld h, d + ld l, e + inc hl + jr NextTextCommand + +Text_TX_RAM:: ; 10ef (0:10ef) +; text_from_ram +; write text from a ram address +; little endian +; [$01][addr] + pop hl + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + push hl + ld h, b + ld l, c + call PlaceString + pop hl + jr NextTextCommand + +Text_TX_BCD:: ; 10fd (0:10fd) +; TX_BCD +; write bcd from address, typically ram +; [$02][addr][flags] +; flags: see PrintBCDNumber + pop hl + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + push hl + ld h, b + ld l, c + ld c, a + call PrintBCDNumber + ld b, h + ld c, l + pop hl + jr NextTextCommand + +Text_TX_MOVE:: ; 110f (0:110f) +; TX_MOVE +; move to a new tile +; [$03][addr] + pop hl + ld a, [hli] + ld [wTextDest], a + ld c, a + ld a, [hli] + ld [wTextDest + 1], a + ld b, a + jp NextTextCommand + +Text_TX_LOW:: ; 111d (0:111d) +; TX_LOW +; write text at (1,16) +; [$05] + pop hl + coord bc, TEXTBOX_INNERX, TEXTBOX_INNERY + 2 + jp NextTextCommand +; 0x1124 + +Text_WAIT_BUTTON:: ; 1124 (0:1124) +; TX_WAITBUTTON +; wait for button press +; show arrow +; [06] + ld a, [wLinkMode] + cp $03 + jp z, Text_TX_LINK_WAIT_BUTTON + ld a, "▼" + ldcoord_a TEXTBOX_WIDTH - 2, TEXTBOX_Y + TEXTBOX_HEIGHT - 1 + push bc + call ButtonSound + pop bc + ld a, "─" + ldcoord_a TEXTBOX_WIDTH - 2, TEXTBOX_Y + TEXTBOX_HEIGHT - 1 + pop hl + jp NextTextCommand + +Text_TX_SCROLL:: ; 113f (0:113f) +; TX_SCROLL +; pushes text up two lines and sets the BC cursor to the border tile +; below the first character column of the text box. +; [07] + ld a, "─" + ldcoord_a TEXTBOX_WIDTH - 2, TEXTBOX_Y + TEXTBOX_HEIGHT - 1 + call ScrollTextUpOneLine + call ScrollTextUpOneLine + pop hl + coord bc, TEXTBOX_INNERX, TEXTBOX_INNERY + 2 + jp NextTextCommand + +Text_START_ASM:: ; 1151 (0:1151) +; TX_ASM +; Executes code following this command. +; Text processing is resumed upon returning. +; [08][asm...ret] + pop hl + ld de, NextTextCommand + push de + jp hl + +Text_TX_NUM:: ; 1157 (0:1157) +; TX_NUM +; [$09][addr][hi:bytes lo:digits] + pop hl + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + push hl + ld h, b + ld l, c + ld b, a + and $0f + ld c, a + ld a, b + and $f0 + swap a + set 6, a + ld b, a + call PrintNumber + ld b, h + ld c, l + pop hl + jp NextTextCommand +; 0x1175 + +Text_TX_EXIT: ; 1175 (0:1175) +; TX_EXIT +; [$0A] + push bc + call GetJoypad + ldh a, [hJoyState] + and (A_BUTTON | B_BUTTON) + jr nz, .done + ld c, 30 + call DelayFrames +.done + pop bc + pop hl + jp NextTextCommand +; 0x1189 + +Text_PlaySound:: ; 1189 (0:1189) +; Text_PlaySound +; [0B|0E..13] Play Sound Effects +; [14..16] Play Pokémon Cries + pop hl + push bc + dec hl + ld a, [hli] + ld b, a + push hl + ld hl, .soundTable +.loop + ld a, [hli] + cp b + jr z, .found + inc hl + inc hl + jr .loop +.found + cp $14 + jr z, .playCry + cp $15 + jr z, .playCry + cp $16 + jr z, .playCry + push de + ld e, [hl] + inc hl + ld d, [hl] + call PlaySFX + call WaitSFX + pop de + pop hl + pop bc + jp NextTextCommand +.playCry + push de + ld e, [hl] + inc hl + ld d, [hl] + call PlayCry + pop de + pop hl + pop bc + jp NextTextCommand + +.soundTable: + dbw TX_SOUND_0B, $0063 + dbw TX_SOUND_12, $006B + dbw TX_SOUND_0E, $0066 + dbw TX_SOUND_0F, $0067 + dbw TX_SOUND_10, $0068 + dbw TX_SOUND_11, $0069 + dbw TX_SOUND_13, $0027 + dbw TX_CRY_14, MON_NIDORINA ; or MON_LEAFY? + dbw TX_CRY_15, MON_PIGEOT + dbw TX_CRY_16, MON_JUGON + +Text_TX_DOTS: ; 11e1 (0:11e1) + pop hl + ld a, [hli] + ld d, a + push hl + ld h, b + ld l, c +.loop + ld a, "…" + ld [hli], a + push de + call GetJoypad + pop de + ldh a, [hJoyState] + and (A_BUTTON | B_BUTTON) + jr nz, .next + ld c, 10 + call DelayFrames +.next + dec d + jr nz, .loop + ld b, h + ld c, l + pop hl + jp NextTextCommand + +Text_TX_LINK_WAIT_BUTTON:: ; 1203 (0:1203) + push bc + call ButtonSound + pop bc + pop hl + jp NextTextCommand +; 0x120c + +TextCommands:: ; 120c + dw Text_TX + dw Text_TX_RAM + dw Text_TX_BCD + dw Text_TX_MOVE + dw Text_TX_BOX + dw Text_TX_LOW + dw Text_WAIT_BUTTON + dw Text_TX_SCROLL + dw Text_START_ASM + dw Text_TX_NUM + dw Text_TX_EXIT + dw Text_PlaySound + dw Text_TX_DOTS + dw Text_TX_LINK_WAIT_BUTTON + dw Text_PlaySound + dw Text_PlaySound + dw Text_PlaySound + dw Text_PlaySound + dw Text_PlaySound + dw Text_PlaySound + dw Text_PlaySound + dw Text_PlaySound + dw Text_PlaySound diff --git a/home/unknown.asm b/home/unknown.asm index c216f62..5b9a6e1 100644 --- a/home/unknown.asm +++ b/home/unknown.asm @@ -7,10 +7,10 @@ SECTION "Empty function", ROM0[$2F5B] endc InexplicablyEmptyFunction:: ; 2f97 -REPT 16 - nop -ENDR - ret +rept 16 + nop +endr + ret ; TODO: @@ -21,14 +21,14 @@ ENDR SECTION "Unknown functions", ROM0[$1FF4] _1FF4:: ; 1ff4 - ld a, BANK(s0_a600) - call OpenSRAM - ld hl, s0_a600 ; TODO: label this. - ld bc, 7 - xor a - call ByteFill - call CloseSRAM - ret + ld a, BANK(s0_a600) + call OpenSRAM + ld hl, s0_a600 ; TODO: label this. + ld bc, 7 + xor a + call ByteFill + call CloseSRAM + ret _2007:: ; 2007 ld a, BANK(s0_a600) @@ -65,13 +65,13 @@ if DEBUG ._209e: endc - ld hl, hHours + ld hl, hRTCHours ld de, wcbd2 call _20DC - ld hl, hMinutes + ld hl, hRTCMinutes ld de, wcbd2 + 3 call _20DC - ldh a, [hDays] + ldh a, [hRTCDays] and 7 add $71 ; Sunday ld [wcbd2 + 6], a @@ -79,7 +79,7 @@ endc ld [wcbd2 + 9], a inc a ; mobile ld [wcbd2 + 11], a - ldh a, [hSeconds] + ldh a, [hRTCSeconds] and 1 ret z ld a, $70 ; : diff --git a/home/vblank.asm b/home/vblank.asm index 334cef4..33bbd40 100644 --- a/home/vblank.asm +++ b/home/vblank.asm @@ -3,29 +3,298 @@ INCLUDE "constants.asm" SECTION "VBlank handler", ROM0[$150] VBlank:: ; 0150 - push af - push bc - push de - push hl - ldh a, [hVBlank] - and 3 - ld e, a - ld d, 0 - ld hl, .blanks - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - ld de, .return - push de - jp hl + push af + push bc + push de + push hl + ldh a, [hVBlank] + and 3 + ld e, a + ld d, 0 + ld hl, .blanks + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ld de, .return + push de + jp hl .return - pop hl - pop de - pop bc - pop af - reti + pop hl + pop de + pop bc + pop af + reti .blanks - ; TODO + dw VBlank0 + dw VBlank1 + dw VBlank2 + dw VBlank3 + +VBlank0:: ; 175 (0:175) +; rng +; scx, scy, wy, wx +; bg map +; row/column redraw +; copy 2bpp +; copy 1bpp +; animate tileset +; copy far 2bpp +; enable oam sprites +; oam +; joypad +; sound / serial / lcd_stat + ldh a, [hVBlankCounter] + inc a + ldh [hVBlankCounter], a + bit 0, a + jr nz, .even_frame + ldh a, [hRTCRandom] + ld b, a + ldh a, [rLY] + adc b +.even_frame + ; advance random variables + ld b, a + ldh a, [hRandomAdd] + adc b + ldh [hRandomAdd], a + ld b, a + ldh a, [hRandomSub] + sbc b + ldh [hRandomSub], a + ldh a, [hRTCSeconds] + ldh [hRTCRandom], a + ldh a, [hROMBank] + ld [wVBlankSavedROMBank], a + ldh a, [hSCX] + ldh [rSCX], a + ldh a, [hSCY] + ldh [rSCY], a + ld a, [wDisableVBlankWYUpdate] + and a + jr nz, .ok + ldh a, [hWY] + ldh [rWY], a + ldh a, [hWX] + ldh [rWX], a +.ok + call AutoBgMapTransfer + call RedrawRowOrColumn + call VBlankCopy + call VBlankCopyDouble + call AnimateTileset + call VBlankCopyFar + call EnableSprites + call hOAMDMA + xor a + ld [wVBlankOccurred], a + ld a, [wVBlankJoyFrameCounter] + and a + jr z, .skipDec + dec a + ld [wVBlankJoyFrameCounter], a +.skipDec + call Joypad + xor a + ldh [rIF], a + ld a, (1 << SERIAL | 1 << LCD_STAT) + ldh [rIE], a + ld a, (1 << LCD_STAT) + ldh [rIF], a + ei + call UpdateSound + ld a, [wVBlankSavedROMBank] + call Bankswitch + di + xor a + ldh [rIF], a + ld a, (1 << JOYPAD | 1 << SERIAL | 1 << TIMER | 1 << LCD_STAT | 1 << VBLANK) + ldh [rIE], a + ret + +VBlank1:: ; 1f6 (0:1f6) +; Simple VBlank +; +; scx, scy +; dmg pals +; bg map +; copy 2bpp +; oam +; sound / lcd_stat +; no counters! + ldh a, [hROMBank] + ld [wVBlankSavedROMBank], a + ldh a, [hSCX] + ldh [rSCX], a + ldh a, [hSCY] + ldh [rSCY], a + ld a, [wBGP] + ldh [rBGP], a + ld a, [wOBP0] + ldh [rOBP0], a + ld a, [wOBP1] + ldh [rOBP1], a + call AutoBgMapTransfer + call VBlankCopy + ld a, [wDisableVBlankOAMUpdate] + and a + jr nz, .skip_oam + call hOAMDMA +.skip_oam + xor a + ld [wVBlankOccurred], a + xor a + ldh [rIF], a + ld a, (1 << LCD_STAT) + ldh [rIE], a + ldh [rIF], a + ei + call UpdateSound + ld a, [wVBlankSavedROMBank] + call Bankswitch + di + xor a + ldh [rIF], a + ld a, (1 << JOYPAD | 1 << SERIAL | 1 << TIMER | 1 << LCD_STAT | 1 << VBLANK) + ldh [rIE], a + ret + +VBlank2:: ; 241 (0:241) +; rng +; scx, scy, wy, wx +; joypad +; bg map +; row/column redraw +; copy 2bpp +; copy 1bpp +; copy far 2bpp +; oam +; sound + ldh a, [hVBlankCounter] + inc a + ldh [hVBlankCounter], a + bit 0, a + jr nz, .even_frame + ldh a, [rLY] +.even_frame + ; advance random variables + ld b, a + ldh a, [hRandomAdd] + adc b + ldh [hRandomAdd], a + ld b, a + ldh a, [hRandomSub] + sbc b + ldh [hRandomSub], a + call Joypad + ldh a, [hROMBank] + ld [wVBlankSavedROMBank], a + ldh a, [hSCX] + ldh [rSCX], a + ldh a, [hSCY] + ldh [rSCY], a + ld a, [wDisableVBlankWYUpdate] + and a + jr nz, .ok + ldh a, [hWY] + ldh [rWY], a + ldh a, [hWX] + ldh [rWX], a +.ok + call AutoBgMapTransfer + call RedrawRowOrColumn + call VBlankCopy + call VBlankCopyDouble + call VBlankCopyFar + call hOAMDMA + xor a + ld [wVBlankOccurred], a + ld a, [wVBlankJoyFrameCounter] + and a + jr z, .skipDec + dec a + ld [wVBlankJoyFrameCounter], a +.skipDec + call UpdateSound + ld a, [wVBlankSavedROMBank] + call Bankswitch + ret + +VBlank3:: ; 2a0 (0:2a0) +; rng +; joypad +; scx, scy, wy, wx +; bg map +; row/column redraw +; copy 2bpp +; copy 1bpp +; animate tileset +; copy far 2bpp +; enable oam sprites +; oam +; sound / lcd_stat + ldh a, [hVBlankCounter] + inc a + ldh [hVBlankCounter], a + bit 0, a + jr nz, .even_frame + ldh a, [rLY] +.even_frame + ld b, a + ldh a, [hRandomAdd] + adc b + ldh [hRandomAdd], a + ld b, a + ldh a, [hRandomSub] + sbc b + ldh [hRandomSub], a + call Joypad + ldh a, [hROMBank] + ld [wVBlankSavedROMBank], a + ldh a, [hSCX] + ldh [rSCX], a + ldh a, [hSCY] + ldh [rSCY], a + ld a, [wDisableVBlankWYUpdate] + and a + jr nz, .ok + ldh a, [hWY] + ldh [rWY], a + ldh a, [hWX] + ldh [rWX], a +.ok + call AutoBgMapTransfer + call RedrawRowOrColumn + call VBlankCopy + call VBlankCopyDouble + call AnimateTileset + call VBlankCopyFar + call EnableSprites + call hOAMDMA + xor a + ld [wVBlankOccurred], a + ld a, [wVBlankJoyFrameCounter] + and a + jr z, .skipDec + dec a + ld [wVBlankJoyFrameCounter], a +.skipDec + xor a + ldh [rIF], a + ld a, (1 << LCD_STAT) + ldh [rIE], a + ldh [rIF], a + ei + call UpdateSound + ld a, [wVBlankSavedROMBank] + call Bankswitch + di + xor a + ldh [rIF], a + ld a, (1 << JOYPAD | 1 << SERIAL | 1 << TIMER | 1 << LCD_STAT | 1 << VBLANK) + ldh [rIE], a + ret +; 0x317 diff --git a/home/vcopy.asm b/home/vcopy.asm new file mode 100644 index 0000000..a453da5 --- /dev/null +++ b/home/vcopy.asm @@ -0,0 +1,616 @@ +INCLUDE "constants.asm" +INCLUDE "vram.asm" + +SECTION "Copy Routines used by VBlank ISR", ROM0[$123a] + +RedrawRowOrColumn:: ; 123a (0:123a) +; This function redraws a BG row of height 2 or a BG column of width 2. +; One of its main uses is redrawing the row or column that will be exposed upon +; scrolling the BG when the player takes a step. Redrawing only the exposed +; row or column is more efficient than redrawing the entire screen. +; However, this function is also called repeatedly to redraw the whole screen +; when necessary. It is also used in trade animation and elevator code. +; This also implements the flashlight drawing distance effect, which takes +; multiple frames in either direction to complete + ldh a, [hRedrawRowOrColumnMode] + and a + ret z + cp $03 + jr nc, .flashlight_effect + ld b, a + xor a + ldh [hRedrawRowOrColumnMode], a + dec b + jr nz, .redrawRow +.redrawColumn + ld hl, wRedrawRowOrColumnSrcTiles + ldh a, [hRedrawRowOrColumnDest] + ld e, a + ldh a, [hRedrawRowOrColumnDest + 1] + ld d, a + ld c, SCREEN_HEIGHT +.col_loop + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + ld a, BG_MAP_WIDTH - 1 + add e + ld e, a + jr nc, .noCarry + inc d +.noCarry +; the following 4 lines wrap us from bottom to top if necessary + ld a, d + and HIGH(vBGMap1 - vBGMap0 - $01) + or HIGH(vBGMap0) + ld d, a + dec c + jr nz, .col_loop + xor a + ldh [hRedrawRowOrColumnMode], a + ret +.redrawRow + ld hl, wRedrawRowOrColumnSrcTiles + ldh a, [hRedrawRowOrColumnDest] + ld e, a + ldh a, [hRedrawRowOrColumnDest + 1] + ld d, a + push de + call .DrawHalf + pop de + ld a, BG_MAP_WIDTH ; width of VRAM background map + add e + ld e, a + ; fallthrough (draw lower half) + +.DrawHalf + ld c, SCREEN_WIDTH / 2 +.row_loop + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + ld a, e + inc a +; the following 6 lines wrap us from the right edge to the left edge if necessary + and BG_MAP_WIDTH - 1 ; mask lower address bits + ld b, a + ld a, e + and ($FF ^ (BG_MAP_WIDTH - 1)) ; mask upper address bits + or b + ld e, a + dec c + jr nz, .row_loop + ret +.flashlight_effect + dec a + dec a + dec a + ld c, a + ld b, $00 + ld hl, .flashlight_effect_table + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.flashlight_effect_table + dw RedrawFlashlightRow0 ; $1310 + dw RedrawFlashlightRow0 ; $1310 + dw RedrawFlashlightColumn0 ; $12C3 + dw RedrawFlashlightColumn0 ; $12C3 + dw RedrawFlashlightRow1 ; $1329 + dw RedrawFlashlightRow1 ; $1329 + dw RedrawFlashlightColumn1 ; $12DC + dw RedrawFlashlightColumn1 ; $12DC + dw RedrawFlashlightRow2 ; $1335 + dw RedrawFlashlightRow2 ; $1335 + dw RedrawFlashlightColumn2 ; $12E8 + dw RedrawFlashlightColumn2 ; $12E8 + dw RedrawFlashlightRow3 ; $134E + dw RedrawFlashlightRow3 ; $134E + dw RedrawFlashlightColumn3 ; $1301 + dw RedrawFlashlightColumn3 ; $1301 + +RedrawFlashlightColumn0:: ; 12c3 (0:12c3) + ldh a, [hSCX] + and $07 + ret nz ; wait till we moved one complete tile in X + ld a, [wRedrawFlashlightDst0] + ld e, a + ld a, [wRedrawFlashlightDst0 + 1] + ld d, a + ld a, [wRedrawFlashlightSrc0] + ld l, a + ld a, [wRedrawFlashlightSrc0 + 1] + ld h, a + call _RedrawFlashlightColumn + ret + +RedrawFlashlightColumn1:: ; 12dc (0:12dc) + ld a, [wRedrawFlashlightBlackDst0] + ld e, a + ld a, [wRedrawFlashlightBlackDst0 + 1] + ld d, a + call _RedrawFlashlightColumnBlack + ret +; 0x12e8 + +RedrawFlashlightColumn2:: ; 12e8 (0:12e8) + ldh a, [hSCX] + and $0f + ret nz ; wait till we moved two complete tiles in X + ld a, [wRedrawFlashlightDst1] + ld e, a + ld a, [wRedrawFlashlightDst1 + 1] + ld d, a + ld a, [wRedrawFlashlightSrc1] + ld l, a + ld a, [wRedrawFlashlightSrc1 + 1] + ld h, a + call _RedrawFlashlightColumn + ret + +RedrawFlashlightColumn3:: ; 1301 (0:1301) + ld a, [wRedrawFlashlightBlackDst1] + ld e, a + ld a, [wRedrawFlashlightBlackDst1 + 1] + ld d, a + call _RedrawFlashlightColumnBlack + xor a + ldh [hRedrawRowOrColumnMode], a ; end flashlight redraw + ret + +RedrawFlashlightRow0:: ; 1310 (0:1310) + ldh a, [hSCY] + and $07 + ret nz ; wait till we moved one complete tile in Y + ld a, [wRedrawFlashlightDst0] + ld e, a + ld a, [wRedrawFlashlightDst0 + 1] + ld d, a + ld a, [wRedrawFlashlightSrc0] + ld l, a + ld a, [wRedrawFlashlightSrc0 + 1] + ld h, a + call _RedrawFlashlightRow + ret + +RedrawFlashlightRow1:: ; 1329 (0:1329) + ld a, [wRedrawFlashlightBlackDst0] + ld e, a + ld a, [wRedrawFlashlightBlackDst0 + 1] + ld d, a + call _RedrawFlashlightRowBlack + ret +; 0x12e8 + +RedrawFlashlightRow2:: ; 1335 (0:1335) + ldh a, [hSCY] + and $0f + ret nz ; wait till we moved two complete tiles in Y + ld a, [wRedrawFlashlightDst1] + ld e, a + ld a, [wRedrawFlashlightDst1 + 1] + ld d, a + ld a, [wRedrawFlashlightSrc1] + ld l, a + ld a, [wRedrawFlashlightSrc1 + 1] + ld h, a + call _RedrawFlashlightRow + ret + +RedrawFlashlightRow3:: ; 134e (0:134e) + ld a, [wRedrawFlashlightBlackDst1] + ld e, a + ld a, [wRedrawFlashlightBlackDst1 + 1] + ld d, a + call _RedrawFlashlightRowBlack + xor a + ldh [hRedrawRowOrColumnMode], a ; end flashlight redraw + ret + +_RedrawFlashlightColumn:: ; 135d (0:135d) + ld a, [wRedrawFlashlightWidthHeight] + add a + ld c, a +.loop + ld a, [hli] + ld [de], a + ld a, SCREEN_WIDTH - 1 + add l + ld l, a + jr nc, .noCarryScreen + inc h +.noCarryScreen + ld a, BG_MAP_WIDTH + add e + ld e, a + jr nc, .noCarryBG + inc d +.noCarryBG +; the following 4 lines wrap us from bottom to top if necessary + ld a, d + and HIGH(vBGMap1 - vBGMap0 - $01) + or HIGH(vBGMap0) + ld d, a + dec c + jr nz, .loop + ldh a, [hRedrawRowOrColumnMode] + add $04 ; inc by 4, because flashlight redraw + ldh [hRedrawRowOrColumnMode], a ; has four directions + ret + +_RedrawFlashlightRow:: ; 1382 (0:1382) + ld a, [wRedrawFlashlightWidthHeight] + ld c, a +.loop + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + ld a, e + inc a +; the following 6 lines wrap us from the right edge to the left edge if necessary + and BG_MAP_WIDTH - 1 ; mask lower address bits + ld b, a + ld a, e + and ($FF ^ (BG_MAP_WIDTH - 1)) ; mask upper address bits + or b + ld e, a + dec c + jr nz, .loop + ldh a, [hRedrawRowOrColumnMode] + add $04 ; inc by 4, because flashlight redraw + ldh [hRedrawRowOrColumnMode], a ; has four directions + ret + +_RedrawFlashlightColumnBlack:: ; 139f (0:139f) + ld l, e + ld h, d + ld b, "■" + ld de, BG_MAP_WIDTH + ld a, [wRedrawFlashlightWidthHeight] + add a + ld c, a +.loop + ld [hl], b + add hl, de +; the following 4 lines wrap us from bottom to top if necessary + ld a, h + and HIGH(vBGMap1 - vBGMap0 - $01) + or HIGH(vBGMap0) + ld h, a + dec c + jr nz, .loop + ldh a, [hRedrawRowOrColumnMode] + add $04 ; inc by 4, because flashlight redraw + ldh [hRedrawRowOrColumnMode], a ; has four directions + ret + +_RedrawFlashlightRowBlack:: ; 13bd (0:13bd) + ld l, e + ld h, d + ld b, "■" + ld a, [wRedrawFlashlightWidthHeight] + ld c, a +.loop + ld [hl], b + inc hl + ld [hl], b + ld a, l + inc a +; the following 6 lines wrap us from the right edge to the left edge if necessary + and BG_MAP_WIDTH - 1 ; mask lower address bits + ld d, a + ld a, l + and ($FF ^ (BG_MAP_WIDTH - 1)) ; mask upper address bits + or d + ld l, a + dec c + jr nz, .loop + ldh a, [hRedrawRowOrColumnMode] + add $04 ; inc by 4, because flashlight redraw + ldh [hRedrawRowOrColumnMode], a ; has four directions + ret + +WaitForAutoBgMapTransfer:: ; 13dc (0:13dc) +.loop + ldh a, [hBGMapMode] + and a + ret z + ldh a, [hBGMapTransferPosition] + and a + jr z, .done + call DelayFrame + jr .loop +.done + xor a + ldh [hBGMapMode], a + ret + +; This function automatically transfers tile number data from the tile map at +; wTileMap to VRAM during V-blank. Note that it only transfers one third of the +; background per V-blank. It cycles through which third it draws. +; This transfer is turned off when walking around the map, but is turned +; on when talking to sprites, battling, using menus, etc. This is because +; the above function, RedrawRowOrColumn, is used when walking to +; improve efficiency. +AutoBgMapTransfer:: ; 13ee (0:13ee) + ldh a, [hBGMapMode] + and a + ret z + ld [hSPTemp], sp + ldh a, [hBGMapTransferPosition] + and a + jr z, .transferTopThird + dec a + jr z, .transferMiddleThird +.transferBottomThird + coord hl, 0, 12 + ld sp, hl + ldh a, [hBGMapAddress + 1] + ld h, a + ldh a, [hBGMapAddress] + ld l, a + ld de, 12 * BG_MAP_WIDTH + add hl, de + xor a + jr .doTransfer +.transferTopThird + coord hl, 0, 0 + ld sp, hl + ldh a, [hBGMapAddress + 1] + ld h, a + ldh a, [hBGMapAddress] + ld l, a + ld a, $01 + jr .doTransfer +.transferMiddleThird + coord hl, 0, 6 + ld sp, hl + ldh a, [hBGMapAddress + 1] + ld h, a + ldh a, [hBGMapAddress] + ld l, a + ld de, 6 * BG_MAP_WIDTH + add hl, de + ld a, $02 +.doTransfer + ldh [hBGMapTransferPosition], a + ld a, $06 ; 6 rows of SCREEN_WIDTH each + ; fallthrough + +TransferBgRows:: ; 1430 (0:1430) + ld bc, BG_MAP_WIDTH - SCREEN_WIDTH + 1 +.loop + + rept SCREEN_WIDTH / 2 - 1 ; two bytes per pop minus last block + pop de + ld [hl], e + inc l + ld [hl], d + inc l + endr + + pop de + ld [hl], e + inc l + ld [hl], d + add hl, bc + dec a + jr nz, .loop + ldh a, [hSPTemp] + ld l, a + ldh a, [hSPTemp + 1] + ld h, a + ld sp, hl + ret + +VBlankCopyDouble:: ; 1470 (0:1470) +; Copy [wVBCopyDoubleSize] 1bpp tiles +; from wVBCopyDoubleSrc to wVBCopyDoubleDst. +; wVBCopyDoubleDst must be aligned to 0x10 bytes. + +; While we're here, convert to 2bpp. +; The process is straightforward: +; copy each byte twice. + ld a, [wVBCopyDoubleSize] + and a + ret z + ld [hSPTemp], sp + ld hl, wVBCopyDoubleSrc + ld a, [hli] + ld h, [hl] + ld l, a + ld sp, hl + ld hl, wVBCopyDoubleDst + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wVBCopyDoubleSize] + ld b, a + xor a + ld [wVBCopyDoubleSize], a +.loop + + rept 16/4 - 1 ; 16 bytes per 2bpp tile at 2 bytes per pop + pop de ; copied twice minus last block + ld [hl], e + inc l + ld [hl], e + inc l + ld [hl], d + inc l + ld [hl], d + inc l + endr + + pop de + ld [hl], e + inc l + ld [hl], e + inc l + ld [hl], d + inc l + ld [hl], d + inc hl + dec b + jr nz, .loop + ld a, l + ld [wVBCopyDoubleDst], a + ld a, h + ld [wVBCopyDoubleDst + 1], a + ld [wVBCopyDoubleSrc], sp + ldh a, [hSPTemp] + ld l, a + ldh a, [hSPTemp + 1] + ld h, a + ld sp, hl + ret + +VBlankCopy:: ; 14c7 (0:14c7) +; Copy 16 * [wVBCopySize] bytes +; from wVBCopySrc to wVBCopyDst. +; wVBCopyDst must be aligned to 0x10 bytes. + +; Source and destination addresses are updated, +; so transfer can continue in subsequent calls. + ld a, [wVBCopySize] + and a + ret z + ld [hSPTemp], sp + ld hl, wVBCopySrc + ld a, [hli] + ld h, [hl] + ld l, a + ld sp, hl + ld hl, wVBCopyDst + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wVBCopySize] + ld b, a + xor a + ld [wVBCopySize], a +.loop + + rept 16/2 - 1 ; 16 bytes per transfer at 2 bytes per pop + pop de ; minus last block + ld [hl], e + inc l + ld [hl], d + inc l + endr + + pop de + ld [hl], e + inc l + ld [hl], d + inc hl + dec b + jr nz, .loop + ld a, l + ld [wVBCopyDst], a + ld a, h + ld [wVBCopyDst + 1], a + ld [wVBCopySrc], sp + ldh a, [hSPTemp] + ld l, a + ldh a, [hSPTemp + 1] + ld h, a + ld sp, hl + ret + +AnimateTileset:: ; 1522 (0:1522) + ldh a, [hROMBank] + push af + ld a, BANK(AnimateTilesetImpl) + call Bankswitch + call AnimateTilesetImpl + pop af + jp Bankswitch +; 0x1531 + +EnableSprites:: ; 1531 (0:1531) + nop + ld hl, rLCDC + set rLCDC_SPRITES_ENABLE, [hl] + ret +; 0x1538 + +Function_1538: ; 1538 (0:1538) + ld a, [$d14f] + bit 0, a + ret z + bit 7, a + ret nz + bit 2, a + res 2, a + ret z + ld [$d14f], a + ld [hSPTemp], sp + ld hl, $cbd2 + ld sp, hl + ld hl, $9c20 + ld a, $01 + jp TransferBgRows + +VBlankCopyFar:: ; 1558 (0:1558) +; Copy 0x10 * [wVBCopyFarSize] bytes +; from wVBCopyFarSrcBank::wVBCopyFarSrc to wVBCopyFarDst. +; wVBCopyFarDst must be aligned to 0x10 bytes. + +; Source and destination addresses are updated, +; so transfer can continue in subsequent calls. + ld a, [wVBCopyFarSize] + and a + ret z + ld a, [wVBCopyFarSrcBank] + call Bankswitch + ld [hSPTemp], sp + ld hl, wVBCopyFarSrc + ld a, [hli] + ld h, [hl] + ld l, a + ld sp, hl + ld hl, wVBCopyFarDst + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wVBCopyFarSize] + ld b, a + xor a + ld [wVBCopyFarSize], a +.loop + rept 16/2 - 1 ; 16 bytes per transfer at 2 bytes per pop + pop de + ld [hl], e + inc l + ld [hl], d + inc l + endr + + pop de + ld [hl], e + inc l + ld [hl], d + inc hl + dec b + jr nz, .loop + ld [wVBCopyFarSrc], sp + ld sp, hl + ld [wVBCopyFarDst], sp + ldh a, [hSPTemp] + ld l, a + ldh a, [hSPTemp + 1] + ld h, a + ld sp, hl + ret +; 0x15b5 @@ -1,17 +1,16 @@ SECTION "HRAM", HRAM[$FF80] hOAMDMA:: ; ff80 - ds 10 + ds 13 +hRTCHours:: db ; ff8d +hRTCMinutes:: db ; ff8e +hRTCSeconds:: db ; ff8f +hRTCDays:: db ; ff90 + ds 6 ; TODO - ds 3 ; TODO - -hHours:: db ; ff8d -hMinutes:: db ; ff8e -hSeconds:: db ; ff8f -hDays:: db ; ff90 - ds 7 ; TODO - +hVBlankCounter:: ; ff97 + db hROMBank:: ; ff98 db @@ -20,17 +19,60 @@ hROMBank:: ; ff98 hVBlank:: ; ff99 db + ds 3 ; TODO + +hJoypadUp:: db ; ff9d +; Raw Joypad Up Event +; A pressed key was released +hJoypadDown:: db ; ff9e +; Raw Joypad Down Event +; An unpressed key was pressed +hJoypadState:: db ; ff9f +; Raw Joypad State +; State of all keys during current frame +hJoypadSum:: db ; ffa0 +; Raw Joypad State Sum +; Sum of all keys that were pressed +; since hJoypadSum was last cleared + + ds 1; TODO +hJoyDown:: db ; ffa2 +hJoyState:: db ; ffa3 +hJoySum:: db ; ffa4 - ds 21 ; TODO +hJoyDebounceSrc:: db ; ffa5 +; hJoySum will be updated from +; 00 - hJoyDown +; <> - hJoyState +; See GetJoypadDebounced +hJoypadState2:: db ; ffa6 + + ds 8 ; TODO + +UNION + +hTextBoxCursorBlinkInterval:: ds 2 ; ffaf + +NEXTU hSpriteWidth:: ; ffaf hSpriteInterlaceCounter:: ; ffaf db hSpriteHeight:: ; ffb0 - db + db +ENDU + hSpriteOffset:: ; ffb1 db - ds 30 ; TODO + + db ; TODO + +hPrintNumLeadingDigit:: db ; ffb3 digit one place-value up +hPrintNumDividend:: ds 3 ; ffb4 big-endian +hPrintNumDivisor:: ds 3 ; ffb7 big-endian +hPrintNumTemp:: ds 3 ; ffba big-endian + + ds 19 ; TODO hLCDCPointer:: ; ffd0 @@ -61,22 +103,61 @@ hSCY:: db ; ffda hWX:: db ; ffdb hWY:: db ; ffdc - db ; TODO +hOverworldFlashlightEffect:: db ; ffdd +; Influences draw distance of map around HIRO +; Meant to go from 0x00--> to desired distance +; or else graphical errors will occur. +; 0x00 - regular distance +; 0x01 - 14x14 tile block +; 0x02 - 10x10 tile block +; 0x03 - 6x 6 tile block +; 0x04 - 2x 2 tile block hBGMapMode:: ; ffde db - db ; TODO +hBGMapTransferPosition:: ; ffdf + db hBGMapAddress:: ; ffe0 dw - - - ds 6 ; TODO - + db ; TODO + +hSPTemp:: ; ffe3 + dw + +hRedrawRowOrColumnMode:: db ; ffe5 +; Used for redrawing BG in small updates +; instead of once completely for faster +; scrolling on overworld etc. +; Valid values: +; 0x00 - no redraw +; 0x01 - column redraw (move horizontally) +; 0x02 - row redraw (move vertically) +; 0x03 - flashlight row redraw 0 (move up) +; 0x04 - flashlight row redraw 0 (move down) +; 0x05 - flashlight column redraw 0 (move left) +; 0x06 - flashlight column redraw 0 (move right) +; 0x07 - flashlight row redraw 1 (move up) +; 0x08 - flashlight row redraw 1 (move down) +; 0x09 - flashlight column redraw 1 (move left) +; 0x0A - flashlight column redraw 1 (move right) +; 0x0B - flashlight row redraw 2 (move up) +; 0x0C - flashlight row redraw 2 (move down) +; 0x0D - flashlight column redraw 2 (move left) +; 0x0E - flashlight column redraw 2 (move right) +; 0x0F - flashlight row redraw 3 (move up) +; 0x10 - flashlight row redraw 3 (move down) +; 0x11 - flashlight column redraw 3 (move left) +; 0x12 - flashlight column redraw 3 (move right) + +hRedrawRowOrColumnDest:: ds 2 ; ffe6 hMapAnims:: ; ffe8 ; TODO: figure out size - + ds 7 +hRandomAdd:: db ; ffef +hRandomSub:: db ; fff0 +hRTCRandom:: db ; fff1 ; TODO @@ -6,4 +6,6 @@ INCLUDE "macros/code.asm" INCLUDE "macros/gfx.asm" INCLUDE "macros/coords.asm" INCLUDE "macros/farcall.asm" +INCLUDE "macros/text.asm" INCLUDE "macros/wram.asm" +INCLUDE "macros/audio.asm" diff --git a/macros/audio.asm b/macros/audio.asm new file mode 100755 index 0000000..8ebf840 --- /dev/null +++ b/macros/audio.asm @@ -0,0 +1,278 @@ +Ch0 EQU 0 +Ch1 EQU 1 +Ch2 EQU 2 +Ch3 EQU 3 +Ch4 EQU 4 +Ch5 EQU 5 +Ch6 EQU 6 +Ch7 EQU 7 + +audio: MACRO + db (_NARG - 2) << 6 | \2 + dw \1_\2 + IF _NARG > 2 + db \3 + dw \1_\3 + ENDC + IF _NARG > 3 + db \4 + dw \1_\4 + ENDC + IF _NARG > 4 + db \5 + dw \1_\5 + ENDC +ENDM + +;format: length [0, 7], pitch change [-7, 7] +pitchenvelope: MACRO + db $10 + IF \2 > 0 + db (\1 << 4) | \2 + ELSE + db (\1 << 4) | (%1000 | (\2 * -1)) + ENDC +ENDM + +;format: length [0, 15], volume [0, 15], volume change [-7, 7], pitch +squarenote: MACRO + db $20 | \1 + IF \3 < 0 + db (\2 << 4) | (%1000 | (\3 * -1)) + ELSE + db (\2 << 4) | \3 + ENDC + dw \4 +ENDM + +;format: length [0, 15], volume [0, 15], volume change [-7, 7], pitch +noisenote: MACRO + db $20 | \1 + IF \3 < 0 + db (\2 << 4) | (%1000 | (\3 * -1)) + ELSE + db (\2 << 4) | \3 + ENDC + db \4 +ENDM + +;format: rest length (in 16ths) +rest: MACRO + db $00 | (\1 - 1) +ENDM + +;format: pitch length (in 16ths) +C_: MACRO + db $10 | (\1 - 1) +ENDM + +C#: MACRO + db $20 | (\1 - 1) +ENDM + +D_: MACRO + db $30 | (\1 - 1) +ENDM + +D#: MACRO + db $40 | (\1 - 1) +ENDM + +E_: MACRO + db $50 | (\1 - 1) +ENDM + +F_: MACRO + db $60 | (\1 - 1) +ENDM + +F#: MACRO + db $70 | (\1 - 1) +ENDM + +G_: MACRO + db $80 | (\1 - 1) +ENDM + +G#: MACRO + db $90 | (\1 - 1) +ENDM + +A_: MACRO + db $A0 | (\1 - 1) +ENDM + +A#: MACRO + db $B0 | (\1 - 1) +ENDM + +B_: MACRO + db $C0 | (\1 - 1) +ENDM + +;format: instrument length (in 16ths) +snare1: MACRO + db $10 | (\1 - 1) +ENDM + +snare2: MACRO + db $20 | (\1 - 1) +ENDM + +snare3: MACRO + db $30 | (\1 - 1) +ENDM + +snare4: MACRO + db $40 | (\1 - 1) +ENDM + +snare5: MACRO + db $50 | (\1 - 1) +ENDM + +triangle1: MACRO + db $60 | (\1 - 1) +ENDM + +triangle2: MACRO + db $70 | (\1 - 1) +ENDM + +snare6: MACRO + db $80 | (\1 - 1) +ENDM + +snare7: MACRO + db $90 | (\1 - 1) +ENDM + +snare8: MACRO + db $A0 | (\1 - 1) +ENDM + +snare9: MACRO + db $B0 | (\1 - 1) +ENDM + +cymbal1: MACRO + db $C0 | (\1 - 1) +ENDM + +cymbal2: MACRO + db $D0 | (\1 - 1) +ENDM + +cymbal3: MACRO + db $E0 | (\1 - 1) +ENDM + +mutedsnare1: MACRO + db $F0 | (\1 - 1) +ENDM + +; TODO: clean up handling of drumsets +;triangle3: MACRO +; db $10 | (\1 - 1) +;ENDM + +;mutedsnare2: MACRO +; db $11 | (\1 - 1) +;ENDM + +;mutedsnare3: MACRO +; db $12 | (\1 - 1) +;ENDM + +;mutedsnare4: MACRO +; db $13 | (\1 - 1) +;ENDM + +octave: MACRO + db $D8 - \1 +ENDM + +; format: notetype speed, volume, fade +notetype: MACRO + db $D8 + db \1 + db (\2 << 4) | \3 +ENDM + +dspeed: MACRO + db $D8 + db \1 +ENDM + +tempo: MACRO + db $DA + db \1 / $100 + db \1 % $100 +ENDM + +duty: MACRO + db $DB + db \1 +ENDM + +pitchbend: MACRO + db $E0 + db \1 + db \2 +ENDM + +;format: vibrato delay, rate, depth +vibrato: MACRO + db $E1 + db \1 + db (\2 << 4) | \3 +ENDM + +drumset: MACRO + db $E3 + db \1 +ENDM + +volume: MACRO + db $E5 + db (\1 << 4) | \2 +ENDM + +toggleperfectpitch: MACRO + db $E6 +ENDM + +stereopanning: MACRO + db $EE + db \1 +ENDM + +;executemusic: MACRO +; db $F8 +;ENDM + +unknown_f9: MACRO + db $F9 +ENDM + +;dutycycle: MACRO +; db $FC +; db \1 +;ENDM + +;format: loopchannel count, address +loopchannel: MACRO + db $FD + db \1 + dw \2 +ENDM + +;format: callchannel address +callchannel: MACRO + db $FE + dw \1 +ENDM + +endchannel: MACRO + db $FF +ENDM diff --git a/macros/text.asm b/macros/text.asm new file mode 100644 index 0000000..f95c300 --- /dev/null +++ b/macros/text.asm @@ -0,0 +1,135 @@ +text EQUS "db $00," ; Start writing text. +next EQUS "db \"<NEXT>\"," ; Move a line down. +line EQUS "db \"<LINE>\"," ; Start writing at the bottom line. +para EQUS "db \"<PARA>\"," ; Start a new paragraph. +cont EQUS "db \"<CONT>\"," ; Scroll to the next line. +done EQUS "db \"<DONE>\"" ; End a text box. +prompt EQUS "db \"<PROMPT>\"" ; Prompt the player to end a text box (initiating some other event). +text_end EQUS "db $50" ; End control code for text processor + ; different from @ + +; TODO: determine if these are in +; Pokedex text commands are only used with pokered. +; They are included for compatibility. +page EQUS "db $50," ; Start a new Pokedex page. +dex EQUS "db $e8, $50" ; End a Pokedex entry. + + enum_start 1 + enum TX_RAM +text_from_ram: MACRO + db TX_RAM + dw \1 ; address + ENDM + + enum TX_BCD +text_bcd: macro + db TX_BCD + dw \1 ; address + db \2 ; flags + digits, see PrintBCDNumber + ENDM + + enum TX_MOVE +text_move: macro + db TX_MOVE + dw \1 ; address + ENDM + + enum TX_BOX +text_box: macro + db TX_BOX + dw \1 ; address + db \2, \3 ; width, height + ENDM + + enum TX_LOW +text_low: macro + db TX_LOW + endm + + enum WAIT_BUTTON +text_waitbutton: macro + db WAIT_BUTTON + endm + + enum TX_SCROLL +text_scroll: macro + db TX_SCROLL + endm + + enum START_ASM +start_asm: macro + db START_ASM + endm + + enum TX_NUM +deciram: macro + db TX_NUM + dw \1 ; address + dn \2, \3 ; bytes, flags + digits + endm + + enum TX_EXIT +text_exit: macro + db TX_EXIT + endm + + enum TX_SOUND_0B +sound_dex_fanfare_50_79: macro + db TX_SOUND_0B + endm + + enum TX_DOTS +text_dots: macro + db TX_DOTS + db \1 + endm + + enum TX_LINK_WAIT_BUTTON +link_wait_button: macro + db TX_LINK_WAIT_BUTTON + endm + + enum TX_SOUND_0E +sound_dex_fanfare_20_49: macro + db TX_SOUND_0E + endm + + enum TX_SOUND_0F +sound_item: macro + db TX_SOUND_0F + endm + + enum TX_SOUND_10 +sound_caught_mon: macro + db TX_SOUND_10 + endm + + enum TX_SOUND_11 +sound_dex_fanfare_80_109: macro + db TX_SOUND_11 + endm + + enum TX_SOUND_12 +sound_fanfare: macro + db TX_SOUND_12 + endm + + enum TX_SOUND_13 +sound_slot_machine_start: macro + db TX_SOUND_13 + endm + + enum TX_CRY_14 +cry_nidorina: macro + db TX_CRY_14 + endm + + enum TX_CRY_15 +cry_pigeot: macro + db TX_CRY_15 + endm + + enum TX_CRY_16 +cry_jugon: macro + db TX_CRY_16 + endm diff --git a/shim_gold.sym b/shim_gold.sym index cc7b9a7..2606b7e 100644 --- a/shim_gold.sym +++ b/shim_gold.sym @@ -1,4 +1,6 @@ -00:0884 UpdateJoypad +00:032B UpdateTimeOfDayPalettes +00:0436 RTC +00:051C Reset 00:0D0A LoadFont 00:0D1A LoadFontExtra 00:0E2A ClearTileMap @@ -6,11 +8,6 @@ 00:0E93 PlaceString 00:0E94 PlaceNextChar 00:0E9D CheckDict -00:10A6 PlaceHLTextAtBC -00:10B7 DoTextUntilTerminator -00:10C1 DoTextUntilTerminator.continue -00:10E2 Text_TX -00:120C TextCommands 00:1D49 LoadMenuHeader 00:1E58 OpenMenu 00:1F9E ClearWindowData @@ -18,36 +15,38 @@ 00:20E1 RunMapScript 00:230E LoadMapWarp 00:23C7 OverworldFadeIn +00:2BC9 StartMenuCheck 00:3234 Random -00:3621 WaitBGMap -00:362B SetPalettes -00:3634 ClearPalettes -00:363C GetMemSGBLayout -00:363E GetSGBLayout +00:35E5 WaitBGMap +00:35EF SetPalettes +00:35F8 ClearPalettes +00:3600 GetMemSGBLayout +00:3602 GetSGBLayout 00:360C SetHPPal 00:3619 SetHPPal.done -00:3630 Function_366c -00:36C8 NamesPointers -00:36E0 GetName -00:3D86 WaitSFX -00:3D87 WaitSFX.wait -00:3DA5 MaxVolume -00:3DAB LowVolume -00:3DB1 VolumeOff -00:3DB6 UpdateSoundNTimes -00:3DBE FadeToMapMusic -00:3DDC FadeToMapMusic.dontfade -00:3DE1 PlayMapMusic -00:3E00 PlayMapMusic.dontplay -00:3E05 SpecialMapMusic -00:3E14 SpecialMapMusic.state2 -00:3E19 SpecialMapMusic.normal -00:3E1B GetMapMusic -00:3E2E GetMapMusic.unk_3E2E -00:3E32 Unk_3E32 +00:368C NamesPointers +00:36A4 GetName +00:397E PlayCry +00:3D4A WaitSFX +00:3D4B WaitSFX.wait +00:3D69 MaxVolume +00:3D6F LowVolume +00:3D75 VolumeOff +00:3D7A UpdateSoundNTimes +00:3D82 FadeToMapMusic +00:3DA0 FadeToMapMusic.dontfade +00:3DA5 PlayMapMusic +00:3DC4 PlayMapMusic.dontplay +00:3DC9 SpecialMapMusic +00:3DD8 SpecialMapMusic.state2 +00:3DDD SpecialMapMusic.normal +00:3DDF GetMapMusic +00:3DF2 GetMapMusic.unk_3E2E +00:3DFE Unk_3E32 01:4031 Function_4031 01:53CC MainMenu 01:5D27 Function_5d27 +01:6114 TitleScreenInputAndTimeout 01:6442 Function_6445 01:66AE Function_66b1 01:6710 Function_6713 @@ -62,6 +61,7 @@ 02:5695 Function_9695 03:4791 DebugWarp 03:479F DebugWarp.Destinations +03:4A89 AddItemToInventory_ 03:4D1B Function_cd33 03:4D57 Function_cd6f 03:4DCB Function_cde3 @@ -133,12 +133,14 @@ 14:4BCD Function_50bcd 14:4BFE Function_50bfe 14:4ED9 Function_50ed9 +23:4000 AnimateTilesetImpl 23:4349 OverworldFadeOut 23:44BE Function_8c4be 23:4940 Function_8c940 23:49C6 Function_8c9c6 23:60CC MenuMonIconGfx -30:4000 OverworldSpriteGfx +24:4000 SetClockDialog +24:4239 SlotMachineGame 32:4000 Function_c8000 32:76FF Function_cb6ff 32:7710 Function_cb710 @@ -151,6 +153,7 @@ 3A:4F11 LoadChannel 3A:4F6C LoadMusicByte 3A:52C7 Music +3F:40E9 InGameDebugMenu 3F:5B66 Function_fdb66 3F:64CE MonsterTest 3F:654E PicTest diff --git a/shim_gold_debug.sym b/shim_gold_debug.sym index 8bcabbd..036cc77 100644 --- a/shim_gold_debug.sym +++ b/shim_gold_debug.sym @@ -1,4 +1,6 @@ -00:0884 UpdateJoypad +00:032B UpdateTimeOfDayPalettes +00:0436 RTC +00:051C Reset 00:0D0A LoadFont 00:0D1A LoadFontExtra 00:0E2A ClearTileMap @@ -6,11 +8,6 @@ 00:0E93 PlaceString 00:0E94 PlaceNextChar 00:0E9D CheckDict -00:10A6 PlaceHLTextAtBC -00:10B7 DoTextUntilTerminator -00:10C1 DoTextUntilTerminator.continue -00:10E2 Text_TX -00:120C TextCommands 00:1D49 LoadMenuHeader 00:1E58 OpenMenu 00:1F9E ClearWindowData @@ -18,6 +15,7 @@ 00:20FF RunMapScript 00:232C LoadMapWarp 00:23E5 OverworldFadeIn +00:2C05 StartMenuCheck 00:3270 Random 00:3621 WaitBGMap 00:362B SetPalettes @@ -26,9 +24,9 @@ 00:363E GetSGBLayout 00:3648 SetHPPal 00:3655 SetHPPal.done -00:366C Function_366c 00:36C8 NamesPointers 00:36E0 GetName +00:39BA PlayCry 00:3D86 WaitSFX 00:3D87 WaitSFX.wait 00:3DA5 MaxVolume @@ -48,6 +46,7 @@ 01:4031 Function_4031 01:53CC MainMenu 01:5D27 Function_5d27 +01:6114 TitleScreenInputAndTimeout 01:6445 Function_6445 01:66B1 Function_66b1 01:6713 Function_6713 @@ -62,6 +61,7 @@ 02:5695 Function_9695 03:4791 DebugWarp 03:479F DebugWarp.Destinations +03:4AA1 AddItemToInventory_ 03:4D33 Function_cd33 03:4D6F Function_cd6f 03:4DE3 Function_cde3 @@ -133,12 +133,14 @@ 14:4BCD Function_50bcd 14:4BFE Function_50bfe 14:4ED9 Function_50ed9 +23:4000 AnimateTilesetImpl 23:4349 OverworldFadeOut 23:44BE Function_8c4be 23:4940 Function_8c940 23:49C6 Function_8c9c6 23:60CC MenuMonIconGfx -30:4000 OverworldSpriteGfx +24:4000 SetClockDialog +24:4239 SlotMachineGame 32:4000 Function_c8000 32:76FF Function_cb6ff 32:7710 Function_cb710 @@ -151,6 +153,7 @@ 3A:4F11 LoadChannel 3A:4F6C LoadMusicByte 3A:52C7 Music +3F:40E9 InGameDebugMenu 3F:5B66 Function_fdb66 3F:64CE MonsterTest 3F:654E PicTest diff --git a/shim_silver.sym b/shim_silver.sym index cc7b9a7..2606b7e 100644 --- a/shim_silver.sym +++ b/shim_silver.sym @@ -1,4 +1,6 @@ -00:0884 UpdateJoypad +00:032B UpdateTimeOfDayPalettes +00:0436 RTC +00:051C Reset 00:0D0A LoadFont 00:0D1A LoadFontExtra 00:0E2A ClearTileMap @@ -6,11 +8,6 @@ 00:0E93 PlaceString 00:0E94 PlaceNextChar 00:0E9D CheckDict -00:10A6 PlaceHLTextAtBC -00:10B7 DoTextUntilTerminator -00:10C1 DoTextUntilTerminator.continue -00:10E2 Text_TX -00:120C TextCommands 00:1D49 LoadMenuHeader 00:1E58 OpenMenu 00:1F9E ClearWindowData @@ -18,36 +15,38 @@ 00:20E1 RunMapScript 00:230E LoadMapWarp 00:23C7 OverworldFadeIn +00:2BC9 StartMenuCheck 00:3234 Random -00:3621 WaitBGMap -00:362B SetPalettes -00:3634 ClearPalettes -00:363C GetMemSGBLayout -00:363E GetSGBLayout +00:35E5 WaitBGMap +00:35EF SetPalettes +00:35F8 ClearPalettes +00:3600 GetMemSGBLayout +00:3602 GetSGBLayout 00:360C SetHPPal 00:3619 SetHPPal.done -00:3630 Function_366c -00:36C8 NamesPointers -00:36E0 GetName -00:3D86 WaitSFX -00:3D87 WaitSFX.wait -00:3DA5 MaxVolume -00:3DAB LowVolume -00:3DB1 VolumeOff -00:3DB6 UpdateSoundNTimes -00:3DBE FadeToMapMusic -00:3DDC FadeToMapMusic.dontfade -00:3DE1 PlayMapMusic -00:3E00 PlayMapMusic.dontplay -00:3E05 SpecialMapMusic -00:3E14 SpecialMapMusic.state2 -00:3E19 SpecialMapMusic.normal -00:3E1B GetMapMusic -00:3E2E GetMapMusic.unk_3E2E -00:3E32 Unk_3E32 +00:368C NamesPointers +00:36A4 GetName +00:397E PlayCry +00:3D4A WaitSFX +00:3D4B WaitSFX.wait +00:3D69 MaxVolume +00:3D6F LowVolume +00:3D75 VolumeOff +00:3D7A UpdateSoundNTimes +00:3D82 FadeToMapMusic +00:3DA0 FadeToMapMusic.dontfade +00:3DA5 PlayMapMusic +00:3DC4 PlayMapMusic.dontplay +00:3DC9 SpecialMapMusic +00:3DD8 SpecialMapMusic.state2 +00:3DDD SpecialMapMusic.normal +00:3DDF GetMapMusic +00:3DF2 GetMapMusic.unk_3E2E +00:3DFE Unk_3E32 01:4031 Function_4031 01:53CC MainMenu 01:5D27 Function_5d27 +01:6114 TitleScreenInputAndTimeout 01:6442 Function_6445 01:66AE Function_66b1 01:6710 Function_6713 @@ -62,6 +61,7 @@ 02:5695 Function_9695 03:4791 DebugWarp 03:479F DebugWarp.Destinations +03:4A89 AddItemToInventory_ 03:4D1B Function_cd33 03:4D57 Function_cd6f 03:4DCB Function_cde3 @@ -133,12 +133,14 @@ 14:4BCD Function_50bcd 14:4BFE Function_50bfe 14:4ED9 Function_50ed9 +23:4000 AnimateTilesetImpl 23:4349 OverworldFadeOut 23:44BE Function_8c4be 23:4940 Function_8c940 23:49C6 Function_8c9c6 23:60CC MenuMonIconGfx -30:4000 OverworldSpriteGfx +24:4000 SetClockDialog +24:4239 SlotMachineGame 32:4000 Function_c8000 32:76FF Function_cb6ff 32:7710 Function_cb710 @@ -151,6 +153,7 @@ 3A:4F11 LoadChannel 3A:4F6C LoadMusicByte 3A:52C7 Music +3F:40E9 InGameDebugMenu 3F:5B66 Function_fdb66 3F:64CE MonsterTest 3F:654E PicTest diff --git a/shim_silver_debug.sym b/shim_silver_debug.sym index 8bcabbd..036cc77 100644 --- a/shim_silver_debug.sym +++ b/shim_silver_debug.sym @@ -1,4 +1,6 @@ -00:0884 UpdateJoypad +00:032B UpdateTimeOfDayPalettes +00:0436 RTC +00:051C Reset 00:0D0A LoadFont 00:0D1A LoadFontExtra 00:0E2A ClearTileMap @@ -6,11 +8,6 @@ 00:0E93 PlaceString 00:0E94 PlaceNextChar 00:0E9D CheckDict -00:10A6 PlaceHLTextAtBC -00:10B7 DoTextUntilTerminator -00:10C1 DoTextUntilTerminator.continue -00:10E2 Text_TX -00:120C TextCommands 00:1D49 LoadMenuHeader 00:1E58 OpenMenu 00:1F9E ClearWindowData @@ -18,6 +15,7 @@ 00:20FF RunMapScript 00:232C LoadMapWarp 00:23E5 OverworldFadeIn +00:2C05 StartMenuCheck 00:3270 Random 00:3621 WaitBGMap 00:362B SetPalettes @@ -26,9 +24,9 @@ 00:363E GetSGBLayout 00:3648 SetHPPal 00:3655 SetHPPal.done -00:366C Function_366c 00:36C8 NamesPointers 00:36E0 GetName +00:39BA PlayCry 00:3D86 WaitSFX 00:3D87 WaitSFX.wait 00:3DA5 MaxVolume @@ -48,6 +46,7 @@ 01:4031 Function_4031 01:53CC MainMenu 01:5D27 Function_5d27 +01:6114 TitleScreenInputAndTimeout 01:6445 Function_6445 01:66B1 Function_66b1 01:6713 Function_6713 @@ -62,6 +61,7 @@ 02:5695 Function_9695 03:4791 DebugWarp 03:479F DebugWarp.Destinations +03:4AA1 AddItemToInventory_ 03:4D33 Function_cd33 03:4D6F Function_cd6f 03:4DE3 Function_cde3 @@ -133,12 +133,14 @@ 14:4BCD Function_50bcd 14:4BFE Function_50bfe 14:4ED9 Function_50ed9 +23:4000 AnimateTilesetImpl 23:4349 OverworldFadeOut 23:44BE Function_8c4be 23:4940 Function_8c940 23:49C6 Function_8c9c6 23:60CC MenuMonIconGfx -30:4000 OverworldSpriteGfx +24:4000 SetClockDialog +24:4239 SlotMachineGame 32:4000 Function_c8000 32:76FF Function_cb6ff 32:7710 Function_cb710 @@ -151,6 +153,7 @@ 3A:4F11 LoadChannel 3A:4F6C LoadMusicByte 3A:52C7 Music +3F:40E9 InGameDebugMenu 3F:5B66 Function_fdb66 3F:64CE MonsterTest 3F:654E PicTest diff --git a/tools/disasm_coverage.py b/tools/disasm_coverage.py new file mode 100644 index 0000000..0b19ab0 --- /dev/null +++ b/tools/disasm_coverage.py @@ -0,0 +1,78 @@ +# #!/usr/bin/env python3 +# coding: utf-8 + +from __future__ import division + +import os +import sys +import argparse +import png +from mapreader import MapReader +from colorsys import hls_to_rgb + +if __name__ == "__main__": + # argument parser + ap = argparse.ArgumentParser() + ap.add_argument("-o", dest="filename", default="coverage.png") + ap.add_argument("-s", dest="statsname", default="coverage.log") + ap.add_argument("-m", dest="mapfile", required=True) + ap.add_argument("-b", dest="num_banks", required=True, type=lambda x: int(x, 0)) + args = ap.parse_args() + + bank_mask = 0x3FFF + bank_size = 0x4000 # bytes + width = 256 # pixels per row + bpp = 8 # bytes per pixel + + rom_size = args.num_banks * bank_size # bytes + height = (args.num_banks * bank_size + (width * bpp - 1)) // (width * bpp) # pixels + rows_per_bank = bank_size // (width * bpp) + + r = MapReader() + with open(args.mapfile, 'r') as f: + l = f.readlines() + r.read_map_data(l) + + hit_data = [[0] * width for _ in range(height)] + default_bank_data = {'sections': [], 'used': 0, 'slack': bank_size} + for bank in range(args.num_banks): + data = r.bank_data['ROM Bank'].get(bank, default_bank_data) + for s in data['sections']: + beg = (s['beg'] & bank_mask) + bank * bank_size + end = (s['end'] & bank_mask) + bank * bank_size + y_beg = beg // (width * bpp) + x_beg = (beg % (width * bpp)) // bpp + y_end = end // (width * bpp) + x_end = (end % (width * bpp)) // bpp + #print('beg {0} end {1}: {2}/{3} -- {4}/{5}'.format(beg, end, y_beg, x_beg, y_end, x_end)) + # special case y_beg/x_beg and y_end/x_end + if (y_beg == y_end and x_beg == x_end): + hit_data[y_beg][x_beg] += end - beg + 1 + else: + hit_data[y_beg][x_beg] += bpp - ((beg % (width * bpp)) - x_beg * bpp) + hit_data[y_end][x_end] += ((end % (width * bpp)) - x_end * bpp + 1) + # regular case + for y in range(y_beg, y_end + 1): + x_line_beg = 0 if y_beg != y else x_beg + 1 + x_line_end = width - 1 if y_end != y else x_end - 1 + for x in range(x_line_beg, x_line_end + 1): + hit_data[y][x] += bpp + + with open(args.statsname, 'w') as stats: + # TODO: write stats + pass + + png_data = [] + for i, row in enumerate(hit_data): + bank = i // rows_per_bank + hue = 0 if bank % 2 else 120 + row_png_data = () + for col in row: + hls = (hue/360.0, 1.0 - (col/bpp * (100 - 15))/100.0, 1.0) + rgb = tuple(255 * x for x in hls_to_rgb(*hls)) + row_png_data += rgb + png_data.append(row_png_data) + + with open(args.filename, 'wb') as f: + w = png.Writer(width, height) + w.write(f, png_data) diff --git a/tools/dump_names.py b/tools/dump_names.py index bd2078e..81f357a 100644 --- a/tools/dump_names.py +++ b/tools/dump_names.py @@ -1,52 +1,30 @@ #!/usr/bin/env python import sys, os, io +from read_charmap import read_charmap -def parse_int(s): - s = s.strip() - if s.startswith('$'): - return int(s[1:], 16) - if s.startswith('%'): - return int(s[1:], 2) - return int(s) +def calc_bank(p): + return p // 0x4000 -def parse_string(s): - # assumes strings are literal, no STRCAT() etc - return s.strip('" ') +def calc_address(p): + b = calc_bank(p) + o = b * 0x4000 + return 0x4000 + p - o -def strip_comment(s): - # assumes ";" is not in the charmap - return s.split(';')[0].rstrip() +def get_sym_loc(p): + b, a = calc_bank(p), calc_address(p) + return '%02x:%04x' % (b, a) def get_project_dir(): script_path = os.path.realpath(__file__) script_dir = os.path.dirname(script_path) project_dir = os.path.join(script_dir, '..') return os.path.normpath(project_dir) - -def get_charmap_path(): - project_dir = get_project_dir() - return os.path.join(project_dir, 'charmap.asm') - + def get_baserom_path(): project_dir = get_project_dir() return os.path.join(project_dir, 'baserom.gb') -def read_charmap(): - charmap_path = get_charmap_path() - charmap = {} - with io.open(charmap_path, 'r', encoding='utf-8') as f: - lines = f.readlines() - for line in lines: - line = strip_comment(line).lstrip() - if not line.startswith('charmap '): - continue - char, value = line[len('charmap '):].rsplit(',', 1) - char = parse_string(char) - value = parse_int(value) - charmap[value] = char - return charmap - def dump_strings(data): charmap = read_charmap() ss = [] @@ -84,9 +62,7 @@ def read_data(bank, address, n): data.append(v) return data -#data = read_data(0x0E, 0x4D90, 64) # TrainerClassNames -#data = read_data(0x01, 0x6FEC, 255) # ItemNames -#data = read_data(0x10, 0x52A1, 251) # MoveNames -data = read_data(0x14, 0x6D75, 251) # PokemonNames - +p = 0xfcaaf # Landmarks +print get_sym_loc(p) +data = read_data(calc_bank(p), calc_address(p), 45) dump_strings(data) diff --git a/tools/dump_text.py b/tools/dump_text.py index 721d953..057de04 100644 --- a/tools/dump_text.py +++ b/tools/dump_text.py @@ -1,50 +1,252 @@ #!/usr/bin/python3 -from sys import argv, stdout - - -char_table = [ - "?", "イ゛", "ヴ", "エ゛", "オ゛", "ガ", "ギ", "グ", "ゲ", "ゴ", "ザ", "ジ", "ズ", "ゼ", "ゾ", "ダ", - "ヂ", "ヅ", "デ", "ド", "<PLAY_G>", "<0x15>", "<0x16>", "ネ゛", "<JP_18>", "バ", "ビ", "ブ", "ボ", "<NI>", "<TTE>", "<WO>", - "ィ゛", "あ゛", "<TA!>", "<KOUGEKI>", "<WA>", "<NO>", "が", "ぎ", "ぐ", "げ", "ご", "ざ", "じ", "ず", "ぜ", "ぞ", - "だ", "ぢ", "づ", "で", "ど", "<ROUTE>", "<WATASHI>", "<KOKO_WA>", "<RED>", "<GREEN>", "ば", "び", "ぶ", "べ", "ぼ", "<ENEMY>", - "パ", "ピ", "プ", "ポ", "ぱ", "ぴ", "ぷ", "ぺ", "ぽ", "<MOM>", "<GA>", "<_CONT>", "<SCROLL>", "も゜", "<NEXT>", "<LINE>", - "@", "<PARA>", "<PLAYER>", "<RIVAL>", "#", "<CONT>", "<……>", "<DONE>", "<PROMPT>", "<TARGET>", "<USER>", "<PC>", "<TM>", "<TRAINER>", "<ROCKET>", "<DEXEND>", - "■", "▲", "☎", "D", "E", "F", "G", "H", "I", "V", "S", "L", "M", ":", "ぃ", "ぅ", - "「", "」", "『", "』", "・", "<・・・>", "ぁ", "ぇ", "ぉ", "┌", "─", "┐", "│", "└", "┘", " ", - "ア", "イ", "ウ", "エ", "オ", "カ", "キ", "ク", "ケ", "コ", "サ", "シ", "ス", "セ", "ソ", "タ", - "チ", "ツ", "テ", "ト", "ナ", "ニ", "ヌ", "ネ", "ノ", "ハ", "ヒ", "フ", "ホ", "マ", "ミ", "ム", - "メ", "モ", "ヤ", "ユ", "ヨ", "ラ", "ル", "レ", "ロ", "ワ", "ヲ", "ン", "ッ", "ャ", "ュ", "ョ", - "ィ", "あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ", "さ", "し", "す", "せ", "そ", - "た", "ち", "つ", "て", "と", "な", "に", "ぬ", "ね", "の", "は", "ひ", "ふ", "へ", "ほ", "ま", - "み", "む", "め", "も", "や", "ゆ", "よ", "ら", "り", "る", "れ", "ろ", "わ", "を", "ん", "っ", - "ゃ", "ゅ", "ょ", "ー", "゜", "゛", "?", "!", "。", "ァ", "ゥ", "ェ", "▷", "▶", "▼", "♂", - "円", "×", ".", "/", "ォ", "♀", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" -] - -if len(argv) != 4: - print(f"Usage: {argv[0]} path/to/ROM.gb start_offset end_offset\noffsets are in the form bank:address (both hex), and end_offset is *not* included.") - exit(1) - - -try: - start_bank,start_addr = [ int(s, 16) for s in argv[2].split(':') ] - end_bank, end_addr = [ int(s, 16) for s in argv[3].split(':') ] - if start_bank != 0: - start_addr += (start_bank - 1) * 0x4000 - if end_bank != 0: - end_addr += (end_bank - 1) * 0x4000 -except Error: - print("Please specify valid offsets (bank:address, both hex)") - exit(1) - - -with open(argv[1], "rb") as f: - f.seek(start_addr) - - string = "" - while start_addr < end_addr: - string += char_table[ int.from_bytes(f.read(1), "little") ] - start_addr += 1 - - stdout.buffer.write( f"db \"{string}\"\n".encode('utf-8') ) +import argparse +import sys +from read_charmap import read_charmap + +charmap = {} + +bank_size = 0x4000 + +textcodes = { + '<NEXT>' : {'label': 'next', 'fin': False}, + '<LINE>' : {'label': 'line', 'fin': False}, + '<PARA>' : {'label': 'para', 'fin': False}, + '<CONT>' : {'label': 'cont', 'fin': False}, + '<DONE>' : {'label': 'done', 'fin': True}, + '<PROMPT>': {'label': 'prompt', 'fin': True}, +} + +# codes that end text control code 0x00 +# True if this code exits control code parsing as well +end_codes = { + '@' : False, + '<DONE>' : True, + '<PROMPT>': True, +} + +def conv_address(x): + if ':' in x: + bank, addr = [ int(s, 16) for s in x.split(':') ] + if (addr < bank_size and bank != 0): + raise argparse.ArgumentTypeError('Illegal ROM bank 0x00 address {0:02X}:{1:04X}. ' + 'Bank 0x{0:02X} must be 0x00.'.format(bank, addr)) + elif (addr >= bank_size and bank == 0): + raise argparse.ArgumentTypeError('Illegal ROM bank 0x00 address {0:02X}:{1:04X}. ' + 'Address 0x{1:04X} > 0x{2:04X}.'.format(bank, addr, bank_size - 1)) + elif (addr >= 2*bank_size): + raise argparse.ArgumentTypeError('Illegal ROM bank address {0:02X}:{1:04X}. ' + 'Address 0x{1:04X} > 0x{2:04X}.'.format(bank, addr, 2*bank_size - 1)) + return bank * 0x4000 + (addr & 0x3fff) + return int(x, 0) + +def addr2gb(addr): + bank = addr // bank_size + offset = addr % bank_size + if (bank > 0): + offset += bank_size + return bank, offset + +def transform_char(char, do_transform, is_begin): + result = '' + if (do_transform and char in textcodes): + replace = textcodes[char] + if (not is_begin): + result += '"\n' + result += replace['label'] + if (not replace['fin']): + result += ' "' + return replace['fin'], result + else: + if (is_begin): + result += '"' + return False, (result + char) + +def dump_asm(data): + + result = 'start_asm ; text dumper cannot dump asm\n' + result += ' ; Try dumping asm from the following offset and\n' + result += ' ; then continue dumping text in control mode.\n' + return True, result + +def dump_control(data, label, signature): + + lengths = {'b': 1, 'n': 1, 'w': 2} + + required_bytes = sum([lengths.get(c, 0) for c in signature]) + + if (data['len'] - data['offset'] < required_bytes): + #silently drop split control code + return True, '' + + result = '' + + for c in signature: + if result != '': + result += ', ' + if c == 'b': + byte = data['bytes'][data['offset']] + data['offset'] += 1 + result += '${0:02x}'.format(byte) + elif c == 'n': + byte = data['bytes'][data['offset']] + data['offset'] += 1 + result += '${0:01x}, ${1:01x}'.format(byte >> 4, byte & 0x0f) + elif c == 'w': + word = data['bytes'][data['offset']] + data['offset'] += 1 + word |= data['bytes'][data['offset']] << 8 + data['offset'] += 1 + result += '${0:02x}'.format(word) + else: + raise ValueError('Unknown signature char in {0:s}\'s signature "{1:s}".'.format(label, signature)) + + if (result != ''): + result = ' ' + result + return False, label + result + +def dump_text(data): + + string = '' + exit_control = False + done = False + while (not done): + + byte = data['bytes'][data['offset']] + data['offset'] += 1 + + char = charmap[byte] + fin, tchar = transform_char(char, data['textmode'], string == '') + string += tchar + if (char in end_codes): + done = True + exit_control = end_codes[char] + # end string if textmode didn't do it + if not data['textmode'] or not fin: + string += '"' + if (data['offset'] >= data['len']): + done = True + string += '"' + + return exit_control, string + +def dump_text_control(data): + + res, text = dump_text(data) + return res, 'text ' + text + +control_codes = { + 0x00: dump_text_control, + 0x01: lambda data: dump_control(data, 'text_from_ram' , 'w' ), + 0x02: lambda data: dump_control(data, 'text_bcd' , 'wb' ), + 0x03: lambda data: dump_control(data, 'text_move' , 'w' ), + 0x04: lambda data: dump_control(data, 'text_box' , 'wbb' ), + 0x05: lambda data: dump_control(data, 'text_low' , '' ), + 0x06: lambda data: dump_control(data, 'text_waitbutton' , '' ), + 0x07: lambda data: dump_control(data, 'text_scroll' , '' ), + 0x08: dump_asm, + 0x09: lambda data: dump_control(data, 'deciram' , 'wn' ), + 0x0A: lambda data: dump_control(data, 'text_exit' , '' ), + 0x0B: lambda data: dump_control(data, 'sound_dex_fanfare_50_79' , '' ), + 0x0C: lambda data: dump_control(data, 'text_dots' , 'b' ), + 0x0D: lambda data: dump_control(data, 'link_wait_button' , '' ), + 0x0E: lambda data: dump_control(data, 'sound_dex_fanfare_20_49' , '' ), + 0x0F: lambda data: dump_control(data, 'sound_item' , '' ), + 0x10: lambda data: dump_control(data, 'sound_caught_mon' , '' ), + 0x11: lambda data: dump_control(data, 'sound_dex_fanfare_80_109', '' ), + 0x12: lambda data: dump_control(data, 'sound_fanfare' , '' ), + 0x13: lambda data: dump_control(data, 'sound_slot_machine_start', '' ), + 0x14: lambda data: dump_control(data, 'cry_nidorina' , '' ), + 0x15: lambda data: dump_control(data, 'cry_pigeot' , '' ), + 0x16: lambda data: dump_control(data, 'cry_jugon' , '' ), + 0x50: lambda data: (True, 'text_end\n'), +} + +def print_location(data): + return '.loc_{0:04X}:\n'.format(data['offset']) + +if __name__ == '__main__': + # argument parser + ap = argparse.ArgumentParser() + ap.add_argument('--cc', dest='ccmode', action='store_true', + help='dump in control code mode, implies text code macro mode' + ) + ap.add_argument('--endless', dest='endless', action='store_true', + help='continue dumping even if string end text code was reached' + ) + ap.add_argument('--tc', dest='textmode', action='store_true', + help='dump text codes (line breaks, prompt etc) as macros instead of inline text' + ) + ap.add_argument('-o', dest='outfile', default=sys.stdout, help='output file name') + ap.add_argument('-m', dest='charmap', default='../charmap.asm', help='charmap file name') + ap.add_argument('rom', help='path to ROM') + ap.add_argument('start', help='start offset', type=conv_address) + ap.add_argument('end', help='end offset', type=conv_address, nargs='?') + + args = ap.parse_args() + romname = args.rom + start_addr = args.start + end_addr = start_addr + bank_size if args.end is None else args.end + ccmode = args.ccmode + endless = args.endless + outfile = args.outfile + charmap = read_charmap(args.charmap) + + if (end_addr < start_addr): + print('End address 0x{0:06X} ({1:02X}:{2:04X}) is before ' + 'start address 0x{3:06X} ({4:02X}:{5:04X}).'.format( + end_addr, + *addr2gb(end_addr), + start_addr, + *addr2gb(start_addr) + ), + file=sys.stderr + ) + sys.exit(-1) + + bank_addr = start_addr & (~(bank_size - 1)) + offset = start_addr - bank_addr + end_offset = end_addr - bank_addr + + with open(romname, 'rb') as f: + f.seek(bank_addr) + bank_data = f.read(bank_size) + + data = {'offset': offset, 'bytes': bank_data, 'len': min(end_offset, len(bank_data)), 'textmode': args.textmode} + + with open(outfile, 'wb') if outfile != sys.stdout else outfile.buffer as f: + string = print_location(data) + while(data['offset'] < data['len']): + if (not ccmode): + # dumb mode + _, text = dump_text(data) + # start with db unless starting with a control code + # in textmode + if text[0] == '"' and data['textmode']: + string += '\tdb ' + elif text[0] == '"': + string += '\tdb ' + string += text.replace('\n', '\n\t') + string += '\n{0:s}'.format(print_location(data)) + if (not endless): + break + else: + # control code mode + control_byte = data['bytes'][data['offset']] + data['offset'] += 1 + + if (control_byte in control_codes): + res, text = control_codes[control_byte](data) + string += '\t' + text.replace('\n', '\n\t') + string += '\n' + if (res): + string += print_location(data) + # exit out of control code parsing + if (res and not endless): + break + else: + print('Encountered unknown control code 0x{0:02X}. Abort...'.format(control_byte), file=sys.stderr) + break + + f.write(string.encode('utf-8')) + f.close() diff --git a/tools/mapreader.py b/tools/mapreader.py new file mode 100644 index 0000000..41ad935 --- /dev/null +++ b/tools/mapreader.py @@ -0,0 +1,171 @@ +# #!/usr/bin/env python3 +# coding: utf-8 + +import re + +class MapReader: + + # {'ROM Bank': { 0: { 'sections': [ { 'beg': 1234, + # 'end': 5678, + # 'name': 'Section001', + # 'symbols': [ { 'symbol': 'Function1234', + # 'address: 1234, + # }, + # ] + # }, + # ], + # 'used': 1234, + # 'slack': 4567, + # }, + # }, + # 'OAM': { 'sections': [ { 'beg': 1234, + # 'end': 5678, + # 'name': 'Section002', + # 'symbols': [ { 'symbol': 'Data1234', + # 'address: 1234, + # }, + # ] + # }, + # ], + # 'used': 1234, + # 'slack': 4567, + # }, + # } + # + bank_data = {} + + bank_types = { + 'HRAM' : { 'size': 0x80, 'banked': False, }, + 'OAM' : { 'size': 0xA0, 'banked': False, }, + 'ROM Bank' : { 'size': 0x4000, 'banked': True, }, + 'SRAM Bank': { 'size': 0x2000, 'banked': True, }, + 'VRAM Bank': { 'size': 0x1000, 'banked': True, }, + 'WRAM Bank': { 'size': 0x2000, 'banked': True, }, + } + + # FSM states + INIT, BANK, SECTION = range(3) + + # $506D-$519A ($012E bytes) ["Type Matchups"] + section_header_regex = re.compile('\$([0-9A-Fa-f]{4})-\$([0-9A-Fa-f]{4}) \(.*\) \["(.*)"\]') + # $506D = TypeMatchups + section_data_regex = re.compile('\$([0-9A-Fa-f]{4}) = (.*)') + # $3ED2 bytes + slack_regex = re.compile('\$([0-9A-Fa-f]{4}) bytes') + + def __init__(self, *args, **kwargs): + self.__dict__.update(kwargs) + + def _parse_init(self, line): + + line = line.split(':', 1)[0] + parts = line.split(' #', 1) + + if (parts[0] in self.bank_types): + self._cur_bank_name = parts[0] + self._cur_bank_type = self.bank_types[self._cur_bank_name] + if (self._cur_bank_type['banked'] and len(parts) > 1): + parts[1] = parts[1].split(':', 1)[0] + parts[1] = parts[1].split(' ', 1)[0] + self._cur_bank = int(parts[1], 10) + if self._cur_bank_name not in self.bank_data: + self.bank_data[self._cur_bank_name] = {} + if self._cur_bank_type['banked']: + if self._cur_bank not in self.bank_data[self._cur_bank_name]: + self.bank_data[self._cur_bank_name][self._cur_bank] = {} + self._cur_data = self.bank_data[self._cur_bank_name][self._cur_bank] + else: + self._cur_data = self.bank_data[self._cur_bank_name] + + if ({} == self._cur_data): + self._cur_data['sections'] = [] + self._cur_data['used'] = 0 + self._cur_data['slack'] = self._cur_bank_type['size'] + return True + + return False + + def _parse_section_header(self, header): + + section_data = self.section_header_regex.match(header) + if section_data is not None: + beg = int(section_data.group(1), 16) + end = int(section_data.group(2), 16) + name = section_data.group(3) + self._cur_section = {'beg': beg, 'end': end, 'name': name, 'symbols': []} + self._cur_data['sections'].append(self._cur_section) + return True + return False + + def _parse_slack(self, data): + + slack_data = self.slack_regex.match(data) + slack_bytes = int(slack_data.group(1), 16) + self._cur_data['slack'] = slack_bytes + + used_bytes = 0 + + for s in self._cur_data['sections']: + used_bytes += s['end'] - s['beg'] + 1 + + self._cur_data['used'] = used_bytes + + def read_map_data(self, map): + + if type(map) is str: + map = map.split('\n') + + self._state = MapReader.INIT + self._cur_bank_name = '' + self._cur_bank_type = {} + self._cur_bank = 0 + self._cur_data = {} + + for line in map: + + line = line.rstrip() + if (MapReader.INIT == self._state): + + if (self._parse_init(line)): + self._state = MapReader.BANK + + elif (MapReader.BANK == self._state or MapReader.SECTION == self._state): + + if ('' == line): + self._state = MapReader.INIT + else: + + line = line.lstrip() + parts = line.split(': ', 1) + + if (MapReader.SECTION == self._state): + section_data = self.section_data_regex.match(parts[0]) + if section_data is not None: + address = int(section_data.group(1), 16) + name = section_data.group(2) + self._cur_section['symbols'].append({'name': name, 'address': address}) + continue + + if ('SECTION' == parts[0]): + if (self._parse_section_header(parts[1])): + self._state = MapReader.SECTION + elif ('SLACK' == parts[0]): + self._parse_slack(parts[1]) + self._state = MapReader.INIT + elif ('EMPTY' == parts[0]): + self._cur_data = {'sections': [], 'used': 0, 'slack': self._cur_bank_type['size']} + self._state = MapReader.INIT + + else: + pass + + for k, v in self.bank_data.items(): + if (self.bank_types[k]['banked']): + for _, vv in v.items(): + vv['sections'].sort(key=lambda x: x['beg']) + for vvv in vv['sections']: + vvv['symbols'].sort(key=lambda x: x['address']) + else: + v['sections'].sort(key=lambda x: x['beg']) + for vv in v['sections']: + vv['symbols'].sort(key=lambda x: x['address'])
\ No newline at end of file diff --git a/tools/read_charmap.py b/tools/read_charmap.py new file mode 100644 index 0000000..af290c3 --- /dev/null +++ b/tools/read_charmap.py @@ -0,0 +1,42 @@ +import os, io +from re import compile +from sys import stderr + +charmap_regex = compile('[ \t]*charmap[ \t]+"(.*?)",[ \t]*(\$[0-9A-Fa-f]{2}|%[01]{8}|[0-9]{3})') +# A charmap line is +# [ \t]* - zero or more space chars +# charmap - literal charmap +# [ \t]+ - one or more space chars +# "(.*?)" - a lazily-matched text identifier in quotes +# , - literal comma +# [ \t]* - zero or more space chars +# ( - either of +# \$[0-9A-Fa-f]{2} - two hexadecimal digits preceeded by literal $ +# %[01]{8} - eight dual digits preceeded by literal % +# [0-9]{3} - three decimal digits +# ) + +def parse_int(s): + # assumes integers are literal; no +-*/, etc + s = s.strip() + if s.startswith('$'): + return int(s[1:], 16) + if s.startswith('%'): + return int(s[1:], 2) + return int(s) + +def read_charmap(charmap_path): + charmap = {} + with io.open(charmap_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + for line in lines: + m = charmap_regex.match(line) + if m is None: + continue + char = m.group(1) + value = parse_int(m.group(2)) + if value in charmap: + print('Value {0:s} already in charmap, dropping it in favor of first charmap entry'.format(m.group(2))) + continue + charmap[value] = char + return charmap diff --git a/tools/tests/README.txt b/tools/tests/README.txt new file mode 100644 index 0000000..750482e --- /dev/null +++ b/tools/tests/README.txt @@ -0,0 +1 @@ +python dump_text.py -o dump_test.txt -m charmap.asm dump_text_test.bin 00:0000 diff --git a/tools/tests/charmap.asm b/tools/tests/charmap.asm new file mode 100644 index 0000000..228bb6b --- /dev/null +++ b/tools/tests/charmap.asm @@ -0,0 +1,293 @@ + charmap "<NULL>", $00 + + charmap "イ゛", $01 + charmap "ヴ", $02 + charmap "エ゛", $03 + charmap "オ゛", $04 + + charmap "ガ", $05 + charmap "ギ", $06 + charmap "グ", $07 + charmap "ゲ", $08 + charmap "ゴ", $09 + charmap "ザ", $0a + charmap "ジ", $0b + charmap "ズ", $0c + charmap "ゼ", $0d + charmap "ゾ", $0e + charmap "ダ", $0f + charmap "ヂ", $10 + charmap "ヅ", $11 + charmap "デ", $12 + charmap "ド", $13 + + charmap "<PLAY_G>", $14 ; "<PLAYER>くん" or "<PLAYER>ちゃん" + + charmap "<15>", $15 ; nothing + charmap "<16>", $16 ; nothing + + charmap "ネ゛", $17 + charmap "ノ゛", $18 + + charmap "バ", $19 + charmap "ビ", $1a + charmap "ブ", $1b + charmap "ボ", $1c + + charmap "<NI>", $1d ; "に " + charmap "<TTE>", $1e ; "って" + charmap "<WO>", $1f ; "を " + + charmap "ィ゛", $20 + charmap "あ゛", $21 + + charmap "<TA!>", $22 ; "た!" + charmap "<KOUGEKI>", $23 ; "こうげき" + charmap "<WA>", $24 ; "は " + charmap "<NO>", $25 ; "の " + + charmap "が", $26 + charmap "ぎ", $27 + charmap "ぐ", $28 + charmap "げ", $29 + charmap "ご", $2a + charmap "ざ", $2b + charmap "じ", $2c + charmap "ず", $2d + charmap "ぜ", $2e + charmap "ぞ", $2f + charmap "だ", $30 + charmap "ぢ", $31 + charmap "づ", $32 + charmap "で", $33 + charmap "ど", $34 + + charmap "<ROUTE>", $35 ; "ばん どうろ" + charmap "<WATASHI>", $36 ; "わたし" + charmap "<KOKO_WA>", $37 ; "ここは" + charmap "<RED>", $38 ; wRedsName + charmap "<GREEN>", $39 ; wGreensName + + charmap "ば", $3a + charmap "び", $3b + charmap "ぶ", $3c + charmap "べ", $3d + charmap "ぼ", $3e + + charmap "<ENEMY>", $3f + + charmap "パ", $40 + charmap "ピ", $41 + charmap "プ", $42 + charmap "ポ", $43 + charmap "ぱ", $44 + charmap "ぴ", $45 + charmap "ぷ", $46 + charmap "ぺ", $47 + charmap "ぽ", $48 + + charmap "<MOM>", $49 ; wMomsName + charmap "<GA>", $4a ; "が " + charmap "<_CONT>", $4b ; implements "<CONT>" + charmap "<SCROLL>", $4c + + charmap "も゜", $4d + + charmap "<NEXT>", $4e + charmap "<LINE>", $4f + charmap "@", $50 ; string terminator + charmap "<PARA>", $51 + charmap "<PLAYER>", $52 ; wPlayerName + charmap "<RIVAL>", $53 ; wRivalName + charmap "#", $54 ; "POKé" + charmap "<CONT>", $55 + charmap "<……>", $56 ; "……" + charmap "<DONE>", $57 + charmap "<PROMPT>", $58 + charmap "<TARGET>", $59 + charmap "<USER>", $5a + charmap "<PC>", $5b ; "PC" + charmap "<TM>", $5c ; "TM" + charmap "<TRAINER>", $5d ; "TRAINER" + charmap "<ROCKET>", $5e ; "ROCKET" + charmap "<DEXEND>", $5f + + charmap "■", $60 + charmap "▲", $61 + charmap "☎", $62 + + charmap "D", $63 + charmap "E", $64 + charmap "F", $65 + charmap "G", $66 + charmap "H", $67 + charmap "I", $68 + charmap "V", $69 + charmap "S", $6a + charmap "L", $6b + charmap "M", $6c + + charmap ":", $6d + + charmap "ぃ", $6e + charmap "ぅ", $6f + + charmap "「", $70 + charmap "」", $71 + charmap "『", $72 + charmap "』", $73 + charmap "・", $74 + charmap "…", $75 + + charmap "ぁ", $76 + charmap "ぇ", $77 + charmap "ぉ", $78 + + charmap "┌", $79 + charmap "─", $7a + charmap "┐", $7b + charmap "│", $7c + charmap "└", $7d + charmap "┘", $7e + + charmap " ", $7f + + charmap "ア", $80 + charmap "イ", $81 + charmap "ウ", $82 + charmap "エ", $83 + charmap "オ", $84 + charmap "カ", $85 + charmap "キ", $86 + charmap "ク", $87 + charmap "ケ", $88 + charmap "コ", $89 + charmap "サ", $8a + charmap "シ", $8b + charmap "ス", $8c + charmap "セ", $8d + charmap "ソ", $8e + charmap "タ", $8f + charmap "チ", $90 + charmap "ツ", $91 + charmap "テ", $92 + charmap "ト", $93 + charmap "ナ", $94 + charmap "ニ", $95 + charmap "ヌ", $96 + charmap "ネ", $97 + charmap "ノ", $98 + charmap "ハ", $99 + charmap "ヒ", $9a + charmap "フ", $9b + charmap "ホ", $9c + charmap "マ", $9d + charmap "ミ", $9e + charmap "ム", $9f + charmap "メ", $a0 + charmap "モ", $a1 + charmap "ヤ", $a2 + charmap "ユ", $a3 + charmap "ヨ", $a4 + charmap "ラ", $a5 + charmap "ル", $a6 + charmap "レ", $a7 + charmap "ロ", $a8 + charmap "ワ", $a9 + charmap "ヲ", $aa + charmap "ン", $ab + + charmap "ッ", $ac + charmap "ャ", $ad + charmap "ュ", $ae + charmap "ョ", $af + charmap "ィ", $b0 + + charmap "あ", $b1 + charmap "い", $b2 + charmap "う", $b3 + charmap "え", $b4 + charmap "お", $b5 + charmap "か", $b6 + charmap "き", $b7 + charmap "く", $b8 + charmap "け", $b9 + charmap "こ", $ba + charmap "さ", $bb + charmap "し", $bc + charmap "す", $bd + charmap "せ", $be + charmap "そ", $bf + charmap "た", $c0 + charmap "ち", $c1 + charmap "つ", $c2 + charmap "て", $c3 + charmap "と", $c4 + charmap "な", $c5 + charmap "に", $c6 + charmap "ぬ", $c7 + charmap "ね", $c8 + charmap "の", $c9 + charmap "は", $ca + charmap "ひ", $cb + charmap "ふ", $cc + charmap "へ", $cd + charmap "ほ", $ce + charmap "ま", $cf + charmap "み", $d0 + charmap "む", $d1 + charmap "め", $d2 + charmap "も", $d3 + charmap "や", $d4 + charmap "ゆ", $d5 + charmap "よ", $d6 + charmap "ら", $d7 + charmap "り", $d8 + charmap "る", $d9 + charmap "れ", $da + charmap "ろ", $db + charmap "わ", $dc + charmap "を", $dd + charmap "ん", $de + + charmap "っ", $df + charmap "ゃ", $e0 + charmap "ゅ", $e1 + charmap "ょ", $e2 + + charmap "ー", $e3 + + charmap "゚", $e4 + charmap "゙", $e5 + + charmap "?", $e6 + charmap "!", $e7 + charmap "。", $e8 + + charmap "ァ", $e9 + charmap "ゥ", $ea + charmap "ェ", $eb + + charmap "▷", $ec + charmap "▶", $ed + charmap "▲", $ed + charmap "▼", $ee + charmap "♂", $ef + charmap "円", $f0 + charmap "×", $f1 + charmap ".", $f2 + charmap "/", $f3 + + charmap "ォ", $f4 + + charmap "♀", $f5 + charmap "0", $f6 + charmap "1", $f7 + charmap "2", $f8 + charmap "3", $f9 + charmap "4", $fa + charmap "5", $fb + charmap "6", $fc + charmap "7", $fd + charmap "8", $fe + charmap "9", $ff diff --git a/tools/tests/dump_test.cc.txt b/tools/tests/dump_test.cc.txt new file mode 100644 index 0000000..4dfd14a --- /dev/null +++ b/tools/tests/dump_test.cc.txt @@ -0,0 +1,26 @@ +.loc_0000: + text "ほんとにりセットしますか?<LINE>@" + text_from_ram $ce33 + text_bcd $ce34, $78 + text_move $ce35 + text_box $cc36, $08, $12 + text_low + text_waitbutton + text_scroll + deciram $cc37, $6, $5 + text_exit + sound_dex_fanfare_50_79 + text_dots $14 + link_wait_button + sound_dex_fanfare_20_49 + sound_item + sound_caught_mon + sound_dex_fanfare_80_109 + sound_fanfare + sound_slot_machine_start + cry_nidorina + cry_pigeot + cry_jugon + text_end + +.loc_0035: diff --git a/tools/tests/dump_test.cc_endless.txt b/tools/tests/dump_test.cc_endless.txt new file mode 100644 index 0000000..5c59830 --- /dev/null +++ b/tools/tests/dump_test.cc_endless.txt @@ -0,0 +1,33 @@ +.loc_0000: + text "ほんとにりセットしますか?<LINE>@" + text_from_ram $ce33 + text_bcd $ce34, $78 + text_move $ce35 + text_box $cc36, $08, $12 + text_low + text_waitbutton + text_scroll + deciram $cc37, $6, $5 + text_exit + sound_dex_fanfare_50_79 + text_dots $14 + link_wait_button + sound_dex_fanfare_20_49 + sound_item + sound_caught_mon + sound_dex_fanfare_80_109 + sound_fanfare + sound_slot_machine_start + cry_nidorina + cry_pigeot + cry_jugon + text_end + +.loc_0035: + text "ほんとにりセットしますか?<DONE>" +.loc_0044: + start_asm ; text dumper cannot dump asm + ; Try dumping asm from the following offset and + ; then continue dumping text in control mode. + +.loc_0045: diff --git a/tools/tests/dump_test.cc_tc.txt b/tools/tests/dump_test.cc_tc.txt new file mode 100644 index 0000000..e49a010 --- /dev/null +++ b/tools/tests/dump_test.cc_tc.txt @@ -0,0 +1,27 @@ +.loc_0000: + text "ほんとにりセットしますか?" + line "@" + text_from_ram $ce33 + text_bcd $ce34, $78 + text_move $ce35 + text_box $cc36, $08, $12 + text_low + text_waitbutton + text_scroll + deciram $cc37, $6, $5 + text_exit + sound_dex_fanfare_50_79 + text_dots $14 + link_wait_button + sound_dex_fanfare_20_49 + sound_item + sound_caught_mon + sound_dex_fanfare_80_109 + sound_fanfare + sound_slot_machine_start + cry_nidorina + cry_pigeot + cry_jugon + text_end + +.loc_0035: diff --git a/tools/tests/dump_test.cc_tc_endless.txt b/tools/tests/dump_test.cc_tc_endless.txt new file mode 100644 index 0000000..dbf8e8b --- /dev/null +++ b/tools/tests/dump_test.cc_tc_endless.txt @@ -0,0 +1,35 @@ +.loc_0000: + text "ほんとにりセットしますか?" + line "@" + text_from_ram $ce33 + text_bcd $ce34, $78 + text_move $ce35 + text_box $cc36, $08, $12 + text_low + text_waitbutton + text_scroll + deciram $cc37, $6, $5 + text_exit + sound_dex_fanfare_50_79 + text_dots $14 + link_wait_button + sound_dex_fanfare_20_49 + sound_item + sound_caught_mon + sound_dex_fanfare_80_109 + sound_fanfare + sound_slot_machine_start + cry_nidorina + cry_pigeot + cry_jugon + text_end + +.loc_0035: + text "ほんとにりセットしますか?" + done +.loc_0044: + start_asm ; text dumper cannot dump asm + ; Try dumping asm from the following offset and + ; then continue dumping text in control mode. + +.loc_0045: diff --git a/tools/tests/dump_test.endless.txt b/tools/tests/dump_test.endless.txt new file mode 100644 index 0000000..fbbdeef --- /dev/null +++ b/tools/tests/dump_test.endless.txt @@ -0,0 +1,9 @@ +.loc_0000: + db "<NULL>ほんとにりセットしますか?<LINE>@" +.loc_0010: + db "イ゛でほヴどほぉエ゛<ROUTE>ほオ゛<WATASHI>ふゲデガギグゴ<KOKO_WA>ふFザジズ<PLAY_G>ゼゾダヂヅデド<PLAY_G><15><16>@" +.loc_0035: + db "<NULL>ほんとにりセットしますか?<DONE>" +.loc_0044: + db "ゲ" +.loc_0045: diff --git a/tools/tests/dump_test.tc.txt b/tools/tests/dump_test.tc.txt new file mode 100644 index 0000000..82c276d --- /dev/null +++ b/tools/tests/dump_test.tc.txt @@ -0,0 +1,4 @@ +.loc_0000: + db "<NULL>ほんとにりセットしますか?" + line "@" +.loc_0010: diff --git a/tools/tests/dump_test.tc_endless.txt b/tools/tests/dump_test.tc_endless.txt new file mode 100644 index 0000000..37bdda0 --- /dev/null +++ b/tools/tests/dump_test.tc_endless.txt @@ -0,0 +1,11 @@ +.loc_0000: + db "<NULL>ほんとにりセットしますか?" + line "@" +.loc_0010: + db "イ゛でほヴどほぉエ゛<ROUTE>ほオ゛<WATASHI>ふゲデガギグゴ<KOKO_WA>ふFザジズ<PLAY_G>ゼゾダヂヅデド<PLAY_G><15><16>@" +.loc_0035: + db "<NULL>ほんとにりセットしますか?" + done +.loc_0044: + db "ゲ" +.loc_0045: diff --git a/tools/tests/dump_test.txt b/tools/tests/dump_test.txt new file mode 100644 index 0000000..a181744 --- /dev/null +++ b/tools/tests/dump_test.txt @@ -0,0 +1,3 @@ +.loc_0000: + db "<NULL>ほんとにりセットしますか?<LINE>@" +.loc_0010: diff --git a/tools/tests/dump_text_test.bin b/tools/tests/dump_text_test.bin Binary files differnew file mode 100644 index 0000000..778a446 --- /dev/null +++ b/tools/tests/dump_text_test.bin diff --git a/vram.asm b/vram.asm new file mode 100644 index 0000000..05f3199 --- /dev/null +++ b/vram.asm @@ -0,0 +1,21 @@ +vChars0 EQU $8000 +vChars1 EQU $8800 +vChars2 EQU $9000 +vBGMap0 EQU $9800 +vBGMap1 EQU $9c00 + +; Battle/Menu +vSprites EQU vChars0 +vFont EQU vChars1 +vFrontPic EQU vChars2 +vBackPic EQU vFrontPic + 7 * 7 * $10 + +; Overworld +vNPCSprites EQU vChars0 +vNPCSprites2 EQU vChars1 +vTileset EQU vChars2 + +; Title +vTitleLogo EQU vChars1 +vTitleLogo2 EQU vFrontPic + 7 * 7 * $10 + @@ -81,27 +81,53 @@ SECTION "LY overrides buffer", WRAM0[$C600] wLYOverrides:: ; c600 ds SCREEN_HEIGHT_PX +SECTION "CB14", WRAM0[$CB14] + +UNION +wRedrawRowOrColumnSrcTiles:: ; cb14 +; the tiles of the row or column to be redrawn by RedrawRowOrColumn + ds SCREEN_WIDTH * 2 +NEXTU +wRedrawFlashlightDst0:: dw ; cb14 +wRedrawFlashlightSrc0:: dw ; cb16 +wRedrawFlashlightBlackDst0:: dw ; cb18 +wRedrawFlashlightDst1:: dw ; cb1a +wRedrawFlashlightSrc1:: dw ; cb1c +wRedrawFlashlightBlackDst1:: dw ; cb1e +wRedrawFlashlightWidthHeight:: db ; cb20 +; width or height of flashlight redraw region +; in units of two tiles (people event meta tile) +ENDU + SECTION "CB56", WRAM0[$CB5B] wcb5b:: ds 1 ; multipurpose, also wName, wMonDexIndex2 wNameCategory:: ds 1 SECTION "CB62", WRAM0[$CB62] -wVBCopySize:: ds 1 -wVBCopySrc:: ds 2 -wVBCopyDst:: ds 2 -wVBCopyDoubleSize:: ds 1 -wVBCopyDoubleSrc:: ds 2 -wVBCopyDoubleDst:: ds 2 +wVBCopySize:: ds 1 ; cb62 +wVBCopySrc:: ds 2 ; cb63 +wVBCopyDst:: ds 2 ; cb65 +wVBCopyDoubleSize:: ds 1 ; cb67 +wVBCopyDoubleSrc:: ds 2 ; cb68 +wVBCopyDoubleDst:: ds 2 ; cb6a + +SECTION "CB71", WRAM0[$CB71] + +wVBCopyFarSize:: ds 1 ; cb71 +wVBCopyFarSrc:: ds 2 ; cb72 +wVBCopyFarDst:: ds 2 ; cb74 +wVBCopyFarSrcBank:: ds 1 ; cb76 SECTION "CBD2", WRAM0[$CBD2] wcbd2:: ; cbd2 ds $14 -SECTION "CC33", WRAM0[$CC33] ; Please merge when more is disassembled +SECTION "CC32", WRAM0[$CC32] ; Please merge when more is disassembled +wVBlankJoyFrameCounter: db ; cc32 -wVBlankOccurred: db +wVBlankOccurred: db ; cc33 ds 4 @@ -134,7 +160,35 @@ wSpriteOutputPtrCached : ds 2 ; ccba wSpriteDecodeTable0Ptr : ds 2 ; ccbc wSpriteDecodeTable1Ptr : ds 2 ; ccbe -SECTION "CD4F", WRAM0[$CD4F] +SECTION "CCC7", WRAM0[$CCC7] + +wDisableVBlankOAMUpdate:: db ; ccc7 + +SECTION "CCCA", WRAM0[$CCCA] + +wBGP:: db ; ccca +wOBP0:: db ; cccb +wOBP1:: db ; cccc + +SECTION "CCCE", WRAM0[$CCCE] + +wDisableVBlankWYUpdate:: db ; ccce + +SECTION "CD26", WRAM0[$CD26] + +wcd26:: ; cd26 + db + +SECTION "CD31", WRAM0[$CD31] + +wcd31:: ; cd31 + db + +SECTION "CD4A", WRAM0[$CD4A] + +wTextDest:: ds 2; cd4a + + ds 3 ; TODO wPredefID:: ; cd4f db @@ -148,10 +202,29 @@ wPredefBC:: ; cd54 wFarCallBCBuffer:: ; cd54 dw -SECTION "CD78", WRAM0[$CD78] +SECTION "CD76", WRAM0[$CD76] + +wcd76:: ; cd76 + db + +wcd77:: ;cd77 + db wMonDexIndex: ds 1 ; cd78 +SECTION "CD7D", WRAM0[$CD7D] + +wItemQuantity:: ; cd7d + db + +SECTION "CDBD", WRAM0[$CDBD] + +wLinkMode:: db ; cdbd +; 00 - +; 01 - +; 02 - +; 03 - + SECTION "CE00", WRAM0[$CE00] wBattleMode:: ; ce00 @@ -164,83 +237,144 @@ wMonHeader:: wMonHIndex:: ; ce07 ; In the ROM base stats data structure, this is the dex number, but it is ; overwritten with the dex number after the header is copied to WRAM. - ds 1 + ds 1 wMonHBaseStats:: ; ce08 wMonHBaseHP:: ; ce08 - ds 1 + ds 1 wMonHBaseAttack:: ; ce09 - ds 1 + ds 1 wMonHBaseDefense:: ; ce0a - ds 1 + ds 1 wMonHBaseSpeed:: ; ce0b - ds 1 + ds 1 wMonHBaseSpecialAtt:: ; ce0c - ds 1 + ds 1 wMonHBaseSpecialDef:: ; ce0d - ds 1 + ds 1 wMonHTypes:: ; ce0e wMonHType1:: ; ce0e - ds 1 + ds 1 wMonHType2:: ; ce0f - ds 1 + ds 1 wMonHCatchRate:: ; ce10 - ds 1 + ds 1 wMonHBaseEXP:: ; ce11 - ds 1 + ds 1 wMonHItems:: ; ce12 wMonHItem1:: ; ce12 - ds 1 + ds 1 wMonHItem2:: ; ce13 - ds 1 + ds 1 wMonHGenderRatio:: ; ce14 - ds 1 + ds 1 wMonHUnk0:: ; ce15 - ds 1 + ds 1 wMonHUnk1:: ; ce16 - ds 1 + ds 1 wMonHUnk2:: ; ce17 - ds 1 + ds 1 wMonHSpriteDim:: ; ce18 - ds 1 + ds 1 wMonHFrontSprite:: ; ce19 - ds 2 + ds 2 wMonHBackSprite:: ; ce1b - ds 2 + ds 2 wMonHGrowthRate:: ; ce1d - ds 1 + ds 1 wMonHLearnset:: ; ce1e ; bit field - flag_array 50 + 5 - ds 1 + flag_array 50 + 5 + ds 1 -SECTION "CE3C", WRAM0[$CE3C] +SECTION "CE37", WRAM0[$CE37] + +wce37:: ; ce37 + db + +SECTION "CE3B", WRAM0[$CE3B] + +wVBlankSavedROMBank:: ; ce3b + db wBuffer:: ; ce3c db +wTimeOfDay:: db ; ce3d +; based on RTC +; Time of Day Regular Debug +; 00 - Day 09--15h 00--30s +; 01 - Night 15--06h 30--35s +; 02 - Cave 35--50s +; 03 - Morning 06--09h 50--59s SECTION "CE5F", WRAM0[$CE5F] wce5f:: ; ce5f ; TODO db +SECTION "CE63", WRAM0[$CE63] + +wce63:: db ; ce63 +; 76543210 +; \-- global debug enable + +SECTION "D152", WRAM0[$D152] + +wMapTimeOfDayPalette:: db ; d152 +; Applied according to wMapTimeOfDay from wMapTimeOfDayPaletteMap + +wd153:: db ; d153 +; 76543210 +; \-------- switch overworld palettes according to seconds not hours + + ds 3 ; TODO +wd157:: db ; d157 +; 76543210 +; \-------- disable overworld palette switch + +wMapTimeOfDayPaletteMap:: db ; d158 +; 76543210 +; \/\/\/\/ +; | | | \- Map Palette for TimeOfDay 0x00 +; | | \--- Map Palette for TimeOfDay 0x01 +; | \----- Map Palette for TimeOfDay 0x02 +; \------- Map Palette for TimeOfDay 0x03 + +wMapTimeOfDay:: db ; d159 + +SECTION "D19E", WRAM0[$D19E] + +wNumBagItems:: ; d19e + db + +SECTION "D4AB", WRAM0[$D4AB] + +wJoypadFlags:: db ; d4ab +; 76543210 +; ||||\__/ +; |||| \-- unkn +; |||\----- unkn +; ||\------ don't wait for keypress to close text box +; |\------- joypad sync mtx +; \-------- joypad disabled + SECTION "PokeDexFlags", WRAM0[$D81A] wPokedexOwned:: ; d81a - flag_array NUM_POKEMON + flag_array NUM_POKEMON wPokedexOwnedEnd:: ; d839 wPokedexSeen:: ; d83a - flag_array NUM_POKEMON + flag_array NUM_POKEMON wPokedexSeenEnd:: ; d859 wAnnonDex:: ds 26 ; d85a |