Make the repository build all four ROMs

This commit is contained in:
PikalaxALT 2018-06-02 20:16:37 -04:00
parent 513028a98e
commit 956d010d59
43 changed files with 1771 additions and 543 deletions

1
.gitignore vendored
View File

@ -24,3 +24,4 @@ tools/scan_includes
tools/pkmncompress
tools/gfx
build/
.idea/

View File

@ -1,20 +1,27 @@
BUILD := build
include config.mk
BUILDBASE := build
BUILD := $(BUILDBASE)/$(BUILD_NAME)
MD5 := md5sum -c
PYTHON := python
PYTHON3 := python3.6
RGBASM := rgbasm
RGBASM := rgbasm -D$(GAME_VERSION)=1 -DDEBUG=$(DEBUG)
RGBGFX := rgbgfx
RGBLINK := rgblink
RGBFIX := rgbfix
RGBASMFLAGS := -h -E -i $(BUILD)/
tools/gfx :=
tools/make_shim :=
ROMS := pokegold-spaceworld.gb
BASEROM := baserom.gb
ROM := poke$(BUILD_NAME)_spaceworld.gb
ROMS := pokegold_spaceworld.gb pokesilver_spaceworld.gb pokegold_debug_spaceworld.gb pokesilver_debug_spaceworld.gb
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
rwildcard = $(foreach d, $(wildcard $1*), $(filter $(subst *, %, $2), $d) $(call rwildcard, $d/, $2))
OBJS += $(patsubst %.asm, $(BUILD)/%.o, $(call rwildcard, $(DIRS), *.asm))
@ -28,11 +35,7 @@ GFX := $(patsubst %.png, $(BUILD)/%.2bpp, \
.SECONDEXPANSION:
.PHONY: all
all: $(ROMS) compare
.PHONY: compare
compare: $(ROMS)
$(MD5) roms.md5
all: $(ROM)
.PHONY: tools
tools tools/pkmncompress tools/gfx:
@ -41,7 +44,7 @@ tools tools/pkmncompress tools/gfx:
# Remove files generated by the build process.
.PHONY: clean
clean:
rm -rf $(ROMS) $(BUILD) $(ROMS:.gb=.sym) $(ROMS:.gb=.map)
rm -rf $(ROMS) $(BUILDBASE) $(ROMS:.gb=.sym) $(ROMS:.gb=.map)
make -C tools clean
# Remove files except for graphics.
@ -49,12 +52,13 @@ clean:
mostlyclean:
rm -rf $(ROMS) $(OBJS) $(ROMS:.gb=.sym) $(ROMS:.gb=.map)
$(ROMS): $(OBJS)
$(ROM): $(OBJS)
$(RGBLINK) -d -n $(@:.gb=.sym) -m $(@:.gb=.map) -O $(BASEROM) -o $@ $^
$(RGBFIX) -f lh -k 01 -l 0x33 -m 0x03 -p 0 -r 3 -t "POKEMON2GOLD" $@
$(RGBFIX) -f lh -k 01 -l 0x33 -m 0x03 -p 0 -r 3 -t "POKEMON2$(GAME_VERSION)" $@
-$(PYTHON3) sort_sym.py $(@:.gb=.sym)
$(BUILD)/shim.asm: tools/make_shim.py shim.sym | $$(dir $$@)
$(PYTHON) tools/make_shim.py -w -- $(filter-out $<, $^) > $@
$(BUILD)/shim.asm: $(SHIM) | $$(dir $$@)
tools/make_shim -w $< > $@
$(BUILD)/gfx.o: | $(GFX)
$(BUILD)/%.o: $(BUILD)/%.asm | $$(dir $$@)
@ -63,8 +67,10 @@ $(BUILD)/%.o: %.asm | $$(dir $$@)
$(RGBASM) $(RGBASMFLAGS) -M $(@:.o=.d) $(OUTPUT_OPTION) $<
$(BUILD)/gfx/sgb/sgb_border_alt.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/sgb/sgb_border.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/title/title.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/sgb/sgb_border_gold.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/sgb/sgb_border_silver.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/title/title_gold.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/title/title_silver.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/trainer_card/leaders.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/minigames/slots.2bpp: tools/gfx += --trim-whitespace
$(BUILD)/gfx/minigames/poker.2bpp: tools/gfx += --trim-whitespace
@ -93,3 +99,14 @@ $(BUILD)/%.tilemap: %.png | $$(dir $$@)
mkdir -p $@
-include $(call rwildcard, $(BUILD)/, *.d)
gold: ; @$(MAKE) GAME_VERSION=GOLD
gold_debug: ; @$(MAKE) GAME_VERSION=GOLD DEBUG=1
silver: ; @$(MAKE) GAME_VERSION=SILVER
silver_debug: ; @$(MAKE) GAME_VERSION=SILVER DEBUG=1
compare: ;
@$(MAKE) GAME_VERSION=GOLD COMPARE=1
@$(MAKE) GAME_VERSION=GOLD DEBUG=1 COMPARE=1
@$(MAKE) GAME_VERSION=SILVER COMPARE=1
@$(MAKE) GAME_VERSION=SILVER DEBUG=1 COMPARE=1
@$(MD5) roms.md5

View File

@ -1,6 +1,10 @@
WIP disassembly of the Spaceworld 1997 Gold proto
baserom.gb is Gold_debug.sgb
It attempts to build the following ROMs:
md5sum `2eadbed83b775c097ff79e5128d1184f`
pokegold_spaceworld.gb (MD5: 3c407114de28d17b7113a2c0cee9a37c)
pokegold_debug_spaceworld.gb (MD5: 2eadbed83b775c097ff79e5128d1184f)
pokesilver_spaceworld.gb (MD5: c52a677c35f15320d5b495e14809f00d)
pokesilver_debug_spaceworld.gb (MD5: fa65d3759bb17c489de171a598ba4913)
At this current stage, only pokegold_debug_spaceworld.gb builds a functioning ROM.

8
compare.sh Normal file
View File

@ -0,0 +1,8 @@
#!/usr/bin/env bash
if [ -z ${1+x} ]
then BUILD_NAME=gold_debug
else BUILD_NAME=$1
fi
diff <(hexdump -C baserom_${BUILD_NAME}.gb) <(hexdump -C poke${BUILD_NAME}_spaceworld.gb) | less

22
config.mk Normal file
View File

@ -0,0 +1,22 @@
### Build Configuration ###
# Default variables
GAME_VERSION ?= GOLD
DEBUG ?= 0
COMPARE ?= 0
# Version
ifeq ($(GAME_VERSION), GOLD)
BUILD_NAME := gold
else
ifeq ($(GAME_VERSION), SILVER)
BUILD_NAME := silver
else
$(error unknown version $(GAME_VERSION))
endif
endif
# Debug
ifeq ($(DEBUG), 1)
BUILD_NAME := $(BUILD_NAME)_debug
endif

View File

@ -1,6 +1,10 @@
INCLUDE "constants.asm"
if DEBUG
SECTION "ItemNames", ROMX[$6FEC], BANK[$01]
else
SECTION "ItemNames", ROMX[$6FE9], BANK[$01]
endc
ItemNames::
db "マスターボール@" ; MASTER_BALL

View File

@ -37,255 +37,255 @@ ENDM
BaseData::
MonBaseStats::
INCLUDE "data/pokemon/base_stats/fushigidane.inc"
BaseStats_Fushigidane:: INCLUDE "data/pokemon/base_stats/fushigidane.inc"
MonBaseStatsEnd::
INCLUDE "data/pokemon/base_stats/fushigisou.inc"
INCLUDE "data/pokemon/base_stats/fushigibana.inc"
INCLUDE "data/pokemon/base_stats/hitokage.inc"
INCLUDE "data/pokemon/base_stats/lizardo.inc"
INCLUDE "data/pokemon/base_stats/lizardon.inc"
INCLUDE "data/pokemon/base_stats/zenigame.inc"
INCLUDE "data/pokemon/base_stats/kameil.inc"
INCLUDE "data/pokemon/base_stats/kamex.inc"
INCLUDE "data/pokemon/base_stats/caterpie.inc"
INCLUDE "data/pokemon/base_stats/transel.inc"
INCLUDE "data/pokemon/base_stats/butterfree.inc"
INCLUDE "data/pokemon/base_stats/beedle.inc"
INCLUDE "data/pokemon/base_stats/cocoon.inc"
INCLUDE "data/pokemon/base_stats/spear.inc"
INCLUDE "data/pokemon/base_stats/poppo.inc"
INCLUDE "data/pokemon/base_stats/pigeon.inc"
INCLUDE "data/pokemon/base_stats/pigeot.inc"
INCLUDE "data/pokemon/base_stats/koratta.inc"
INCLUDE "data/pokemon/base_stats/ratta.inc"
INCLUDE "data/pokemon/base_stats/onisuzume.inc"
INCLUDE "data/pokemon/base_stats/onidrill.inc"
INCLUDE "data/pokemon/base_stats/arbo.inc"
INCLUDE "data/pokemon/base_stats/arbok.inc"
INCLUDE "data/pokemon/base_stats/pikachu.inc"
INCLUDE "data/pokemon/base_stats/raichu.inc"
INCLUDE "data/pokemon/base_stats/sand.inc"
INCLUDE "data/pokemon/base_stats/sandpan.inc"
INCLUDE "data/pokemon/base_stats/nidoran_f.inc"
INCLUDE "data/pokemon/base_stats/nidorina.inc"
INCLUDE "data/pokemon/base_stats/nidoqueen.inc"
INCLUDE "data/pokemon/base_stats/nidoran_m.inc"
INCLUDE "data/pokemon/base_stats/nidorino.inc"
INCLUDE "data/pokemon/base_stats/nidoking.inc"
INCLUDE "data/pokemon/base_stats/pippi.inc"
INCLUDE "data/pokemon/base_stats/pixy.inc"
INCLUDE "data/pokemon/base_stats/rokon.inc"
INCLUDE "data/pokemon/base_stats/kyukon.inc"
INCLUDE "data/pokemon/base_stats/purin.inc"
INCLUDE "data/pokemon/base_stats/pukurin.inc"
INCLUDE "data/pokemon/base_stats/zubat.inc"
INCLUDE "data/pokemon/base_stats/golbat.inc"
INCLUDE "data/pokemon/base_stats/nazonokusa.inc"
INCLUDE "data/pokemon/base_stats/kusaihana.inc"
INCLUDE "data/pokemon/base_stats/ruffresia.inc"
INCLUDE "data/pokemon/base_stats/paras.inc"
INCLUDE "data/pokemon/base_stats/parasect.inc"
INCLUDE "data/pokemon/base_stats/kongpang.inc"
INCLUDE "data/pokemon/base_stats/morphon.inc"
INCLUDE "data/pokemon/base_stats/digda.inc"
INCLUDE "data/pokemon/base_stats/dugtrio.inc"
INCLUDE "data/pokemon/base_stats/nyarth.inc"
INCLUDE "data/pokemon/base_stats/persian.inc"
INCLUDE "data/pokemon/base_stats/koduck.inc"
INCLUDE "data/pokemon/base_stats/golduck.inc"
INCLUDE "data/pokemon/base_stats/mankey.inc"
INCLUDE "data/pokemon/base_stats/okorizaru.inc"
INCLUDE "data/pokemon/base_stats/gardie.inc"
INCLUDE "data/pokemon/base_stats/windie.inc"
INCLUDE "data/pokemon/base_stats/nyoromo.inc"
INCLUDE "data/pokemon/base_stats/nyorozo.inc"
INCLUDE "data/pokemon/base_stats/nyorobon.inc"
INCLUDE "data/pokemon/base_stats/casey.inc"
INCLUDE "data/pokemon/base_stats/yungerer.inc"
INCLUDE "data/pokemon/base_stats/foodin.inc"
INCLUDE "data/pokemon/base_stats/wanriky.inc"
INCLUDE "data/pokemon/base_stats/goriky.inc"
INCLUDE "data/pokemon/base_stats/kairiky.inc"
INCLUDE "data/pokemon/base_stats/madatsubomi.inc"
INCLUDE "data/pokemon/base_stats/utsudon.inc"
INCLUDE "data/pokemon/base_stats/utsubot.inc"
INCLUDE "data/pokemon/base_stats/menokurage.inc"
INCLUDE "data/pokemon/base_stats/dokukurage.inc"
INCLUDE "data/pokemon/base_stats/isitsubute.inc"
INCLUDE "data/pokemon/base_stats/golone.inc"
INCLUDE "data/pokemon/base_stats/golonya.inc"
INCLUDE "data/pokemon/base_stats/ponyta.inc"
INCLUDE "data/pokemon/base_stats/gallop.inc"
INCLUDE "data/pokemon/base_stats/yadon.inc"
INCLUDE "data/pokemon/base_stats/yadoran.inc"
INCLUDE "data/pokemon/base_stats/coil.inc"
INCLUDE "data/pokemon/base_stats/rarecoil.inc"
INCLUDE "data/pokemon/base_stats/kamonegi.inc"
INCLUDE "data/pokemon/base_stats/dodo.inc"
INCLUDE "data/pokemon/base_stats/dodorio.inc"
INCLUDE "data/pokemon/base_stats/pawou.inc"
INCLUDE "data/pokemon/base_stats/jugon.inc"
INCLUDE "data/pokemon/base_stats/betbeter.inc"
INCLUDE "data/pokemon/base_stats/betbeton.inc"
INCLUDE "data/pokemon/base_stats/shellder.inc"
INCLUDE "data/pokemon/base_stats/parshen.inc"
INCLUDE "data/pokemon/base_stats/ghos.inc"
INCLUDE "data/pokemon/base_stats/ghost.inc"
INCLUDE "data/pokemon/base_stats/gangar.inc"
INCLUDE "data/pokemon/base_stats/iwark.inc"
INCLUDE "data/pokemon/base_stats/sleepe.inc"
INCLUDE "data/pokemon/base_stats/sleeper.inc"
INCLUDE "data/pokemon/base_stats/crab.inc"
INCLUDE "data/pokemon/base_stats/kingler.inc"
INCLUDE "data/pokemon/base_stats/biriridama.inc"
INCLUDE "data/pokemon/base_stats/marumine.inc"
INCLUDE "data/pokemon/base_stats/tamatama.inc"
INCLUDE "data/pokemon/base_stats/nassy.inc"
INCLUDE "data/pokemon/base_stats/karakara.inc"
INCLUDE "data/pokemon/base_stats/garagara.inc"
INCLUDE "data/pokemon/base_stats/sawamular.inc"
INCLUDE "data/pokemon/base_stats/ebiwalar.inc"
INCLUDE "data/pokemon/base_stats/beroringa.inc"
INCLUDE "data/pokemon/base_stats/dogars.inc"
INCLUDE "data/pokemon/base_stats/matadogas.inc"
INCLUDE "data/pokemon/base_stats/sihorn.inc"
INCLUDE "data/pokemon/base_stats/sidon.inc"
INCLUDE "data/pokemon/base_stats/lucky.inc"
INCLUDE "data/pokemon/base_stats/monjara.inc"
INCLUDE "data/pokemon/base_stats/garura.inc"
INCLUDE "data/pokemon/base_stats/tattu.inc"
INCLUDE "data/pokemon/base_stats/seadra.inc"
INCLUDE "data/pokemon/base_stats/tosakinto.inc"
INCLUDE "data/pokemon/base_stats/azumao.inc"
INCLUDE "data/pokemon/base_stats/hitodeman.inc"
INCLUDE "data/pokemon/base_stats/starmie.inc"
INCLUDE "data/pokemon/base_stats/barrierd.inc"
INCLUDE "data/pokemon/base_stats/strike.inc"
INCLUDE "data/pokemon/base_stats/rougela.inc"
INCLUDE "data/pokemon/base_stats/eleboo.inc"
INCLUDE "data/pokemon/base_stats/boober.inc"
INCLUDE "data/pokemon/base_stats/kailios.inc"
INCLUDE "data/pokemon/base_stats/kentauros.inc"
INCLUDE "data/pokemon/base_stats/koiking.inc"
INCLUDE "data/pokemon/base_stats/gyarados.inc"
INCLUDE "data/pokemon/base_stats/laplace.inc"
INCLUDE "data/pokemon/base_stats/metamon.inc"
INCLUDE "data/pokemon/base_stats/eievui.inc"
INCLUDE "data/pokemon/base_stats/showers.inc"
INCLUDE "data/pokemon/base_stats/thunders.inc"
INCLUDE "data/pokemon/base_stats/booster.inc"
INCLUDE "data/pokemon/base_stats/porygon.inc"
INCLUDE "data/pokemon/base_stats/omnite.inc"
INCLUDE "data/pokemon/base_stats/omstar.inc"
INCLUDE "data/pokemon/base_stats/kabuto.inc"
INCLUDE "data/pokemon/base_stats/kabutops.inc"
INCLUDE "data/pokemon/base_stats/ptera.inc"
INCLUDE "data/pokemon/base_stats/kabigon.inc"
INCLUDE "data/pokemon/base_stats/freezer.inc"
INCLUDE "data/pokemon/base_stats/thunder.inc"
INCLUDE "data/pokemon/base_stats/fire.inc"
INCLUDE "data/pokemon/base_stats/miniryu.inc"
INCLUDE "data/pokemon/base_stats/hakuryu.inc"
INCLUDE "data/pokemon/base_stats/kairyu.inc"
INCLUDE "data/pokemon/base_stats/mewtwo.inc"
INCLUDE "data/pokemon/base_stats/mew.inc"
INCLUDE "data/pokemon/base_stats/happa.inc"
INCLUDE "data/pokemon/base_stats/hanamogura.inc"
INCLUDE "data/pokemon/base_stats/hanaryu.inc"
INCLUDE "data/pokemon/base_stats/honoguma.inc"
INCLUDE "data/pokemon/base_stats/volbear.inc"
INCLUDE "data/pokemon/base_stats/dynabear.inc"
INCLUDE "data/pokemon/base_stats/kurusu.inc"
INCLUDE "data/pokemon/base_stats/aqua.inc"
INCLUDE "data/pokemon/base_stats/aquaria.inc"
INCLUDE "data/pokemon/base_stats/hoho.inc"
INCLUDE "data/pokemon/base_stats/bobo.inc"
INCLUDE "data/pokemon/base_stats/pachimee.inc"
INCLUDE "data/pokemon/base_stats/mokoko.inc"
INCLUDE "data/pokemon/base_stats/denryu.inc"
INCLUDE "data/pokemon/base_stats/mikon.inc"
INCLUDE "data/pokemon/base_stats/monja.inc"
INCLUDE "data/pokemon/base_stats/jaranra.inc"
INCLUDE "data/pokemon/base_stats/haneei.inc"
INCLUDE "data/pokemon/base_stats/puku.inc"
INCLUDE "data/pokemon/base_stats/shibirefugu.inc"
INCLUDE "data/pokemon/base_stats/pichu.inc"
INCLUDE "data/pokemon/base_stats/py.inc"
INCLUDE "data/pokemon/base_stats/pupurin.inc"
INCLUDE "data/pokemon/base_stats/mizuuo.inc"
INCLUDE "data/pokemon/base_stats/naty.inc"
INCLUDE "data/pokemon/base_stats/natio.inc"
INCLUDE "data/pokemon/base_stats/gyopin.inc"
INCLUDE "data/pokemon/base_stats/maril.inc"
INCLUDE "data/pokemon/base_stats/manbo1.inc"
INCLUDE "data/pokemon/base_stats/ikari.inc"
INCLUDE "data/pokemon/base_stats/grotess.inc"
INCLUDE "data/pokemon/base_stats/eksing.inc"
INCLUDE "data/pokemon/base_stats/para.inc"
INCLUDE "data/pokemon/base_stats/kokumo.inc"
INCLUDE "data/pokemon/base_stats/twohead.inc"
INCLUDE "data/pokemon/base_stats/yoroidori.inc"
INCLUDE "data/pokemon/base_stats/animon.inc"
INCLUDE "data/pokemon/base_stats/hinazu.inc"
INCLUDE "data/pokemon/base_stats/sunny.inc"
INCLUDE "data/pokemon/base_stats/paon.inc"
INCLUDE "data/pokemon/base_stats/donphan.inc"
INCLUDE "data/pokemon/base_stats/twinz.inc"
INCLUDE "data/pokemon/base_stats/kirinriki.inc"
INCLUDE "data/pokemon/base_stats/painter.inc"
INCLUDE "data/pokemon/base_stats/kounya.inc"
INCLUDE "data/pokemon/base_stats/rinrin.inc"
INCLUDE "data/pokemon/base_stats/berurun.inc"
INCLUDE "data/pokemon/base_stats/nyorotono.inc"
INCLUDE "data/pokemon/base_stats/yadoking.inc"
INCLUDE "data/pokemon/base_stats/annon.inc"
INCLUDE "data/pokemon/base_stats/rediba.inc"
INCLUDE "data/pokemon/base_stats/mitsuboshi.inc"
INCLUDE "data/pokemon/base_stats/puchicorn.inc"
INCLUDE "data/pokemon/base_stats/eifie.inc"
INCLUDE "data/pokemon/base_stats/blacky.inc"
INCLUDE "data/pokemon/base_stats/turban.inc"
INCLUDE "data/pokemon/base_stats/betbaby.inc"
INCLUDE "data/pokemon/base_stats/teppouo.inc"
INCLUDE "data/pokemon/base_stats/okutank.inc"
INCLUDE "data/pokemon/base_stats/gongu.inc"
INCLUDE "data/pokemon/base_stats/kapoerer.inc"
INCLUDE "data/pokemon/base_stats/pudie.inc"
INCLUDE "data/pokemon/base_stats/haneko.inc"
INCLUDE "data/pokemon/base_stats/poponeko.inc"
INCLUDE "data/pokemon/base_stats/wataneko.inc"
INCLUDE "data/pokemon/base_stats/baririna.inc"
INCLUDE "data/pokemon/base_stats/lip.inc"
INCLUDE "data/pokemon/base_stats/elebaby.inc"
INCLUDE "data/pokemon/base_stats/booby.inc"
INCLUDE "data/pokemon/base_stats/kireihana.inc"
INCLUDE "data/pokemon/base_stats/tsubomitto.inc"
INCLUDE "data/pokemon/base_stats/miltank.inc"
INCLUDE "data/pokemon/base_stats/bombseeker.inc"
INCLUDE "data/pokemon/base_stats/gift.inc"
INCLUDE "data/pokemon/base_stats/kotora.inc"
INCLUDE "data/pokemon/base_stats/raitora.inc"
INCLUDE "data/pokemon/base_stats/madame.inc"
INCLUDE "data/pokemon/base_stats/norowara.inc"
INCLUDE "data/pokemon/base_stats/kyonpan.inc"
INCLUDE "data/pokemon/base_stats/yamikarasu.inc"
INCLUDE "data/pokemon/base_stats/happi.inc"
INCLUDE "data/pokemon/base_stats/scissors.inc"
INCLUDE "data/pokemon/base_stats/purakkusu.inc"
INCLUDE "data/pokemon/base_stats/devil.inc"
INCLUDE "data/pokemon/base_stats/helgaa.inc"
INCLUDE "data/pokemon/base_stats/wolfman.inc"
INCLUDE "data/pokemon/base_stats/warwolf.inc"
INCLUDE "data/pokemon/base_stats/porygon2.inc"
INCLUDE "data/pokemon/base_stats/nameil.inc"
INCLUDE "data/pokemon/base_stats/haganeil.inc"
INCLUDE "data/pokemon/base_stats/kingdra.inc"
INCLUDE "data/pokemon/base_stats/rai.inc"
INCLUDE "data/pokemon/base_stats/en.inc"
INCLUDE "data/pokemon/base_stats/sui.inc"
INCLUDE "data/pokemon/base_stats/nyula.inc"
INCLUDE "data/pokemon/base_stats/houou.inc"
INCLUDE "data/pokemon/base_stats/togepy.inc"
INCLUDE "data/pokemon/base_stats/bulu.inc"
INCLUDE "data/pokemon/base_stats/tail.inc"
INCLUDE "data/pokemon/base_stats/leafy.inc"
BaseStats_Fushigisou:: INCLUDE "data/pokemon/base_stats/fushigisou.inc"
BaseStats_Fushigibana:: INCLUDE "data/pokemon/base_stats/fushigibana.inc"
BaseStats_Hitokage:: INCLUDE "data/pokemon/base_stats/hitokage.inc"
BaseStats_Lizardo:: INCLUDE "data/pokemon/base_stats/lizardo.inc"
BaseStats_Lizardon:: INCLUDE "data/pokemon/base_stats/lizardon.inc"
BaseStats_Zenigame:: INCLUDE "data/pokemon/base_stats/zenigame.inc"
BaseStats_Kameil:: INCLUDE "data/pokemon/base_stats/kameil.inc"
BaseStats_Kamex:: INCLUDE "data/pokemon/base_stats/kamex.inc"
BaseStats_Caterpie:: INCLUDE "data/pokemon/base_stats/caterpie.inc"
BaseStats_Transel:: INCLUDE "data/pokemon/base_stats/transel.inc"
BaseStats_Butterfree:: INCLUDE "data/pokemon/base_stats/butterfree.inc"
BaseStats_Beedle:: INCLUDE "data/pokemon/base_stats/beedle.inc"
BaseStats_Cocoon:: INCLUDE "data/pokemon/base_stats/cocoon.inc"
BaseStats_Spear:: INCLUDE "data/pokemon/base_stats/spear.inc"
BaseStats_Poppo:: INCLUDE "data/pokemon/base_stats/poppo.inc"
BaseStats_Pigeon:: INCLUDE "data/pokemon/base_stats/pigeon.inc"
BaseStats_Pigeot:: INCLUDE "data/pokemon/base_stats/pigeot.inc"
BaseStats_Koratta:: INCLUDE "data/pokemon/base_stats/koratta.inc"
BaseStats_Ratta:: INCLUDE "data/pokemon/base_stats/ratta.inc"
BaseStats_Onisuzume:: INCLUDE "data/pokemon/base_stats/onisuzume.inc"
BaseStats_Onidrill:: INCLUDE "data/pokemon/base_stats/onidrill.inc"
BaseStats_Arbo:: INCLUDE "data/pokemon/base_stats/arbo.inc"
BaseStats_Arbok:: INCLUDE "data/pokemon/base_stats/arbok.inc"
BaseStats_Pikachu:: INCLUDE "data/pokemon/base_stats/pikachu.inc"
BaseStats_Raichu:: INCLUDE "data/pokemon/base_stats/raichu.inc"
BaseStats_Sand:: INCLUDE "data/pokemon/base_stats/sand.inc"
BaseStats_Sandpan:: INCLUDE "data/pokemon/base_stats/sandpan.inc"
BaseStats_Nidoran_f:: INCLUDE "data/pokemon/base_stats/nidoran_f.inc"
BaseStats_Nidorina:: INCLUDE "data/pokemon/base_stats/nidorina.inc"
BaseStats_Nidoqueen:: INCLUDE "data/pokemon/base_stats/nidoqueen.inc"
BaseStats_Nidoran_m:: INCLUDE "data/pokemon/base_stats/nidoran_m.inc"
BaseStats_Nidorino:: INCLUDE "data/pokemon/base_stats/nidorino.inc"
BaseStats_Nidoking:: INCLUDE "data/pokemon/base_stats/nidoking.inc"
BaseStats_Pippi:: INCLUDE "data/pokemon/base_stats/pippi.inc"
BaseStats_Pixy:: INCLUDE "data/pokemon/base_stats/pixy.inc"
BaseStats_Rokon:: INCLUDE "data/pokemon/base_stats/rokon.inc"
BaseStats_Kyukon:: INCLUDE "data/pokemon/base_stats/kyukon.inc"
BaseStats_Purin:: INCLUDE "data/pokemon/base_stats/purin.inc"
BaseStats_Pukurin:: INCLUDE "data/pokemon/base_stats/pukurin.inc"
BaseStats_Zubat:: INCLUDE "data/pokemon/base_stats/zubat.inc"
BaseStats_Golbat:: INCLUDE "data/pokemon/base_stats/golbat.inc"
BaseStats_Nazonokusa:: INCLUDE "data/pokemon/base_stats/nazonokusa.inc"
BaseStats_Kusaihana:: INCLUDE "data/pokemon/base_stats/kusaihana.inc"
BaseStats_Ruffresia:: INCLUDE "data/pokemon/base_stats/ruffresia.inc"
BaseStats_Paras:: INCLUDE "data/pokemon/base_stats/paras.inc"
BaseStats_Parasect:: INCLUDE "data/pokemon/base_stats/parasect.inc"
BaseStats_Kongpang:: INCLUDE "data/pokemon/base_stats/kongpang.inc"
BaseStats_Morphon:: INCLUDE "data/pokemon/base_stats/morphon.inc"
BaseStats_Digda:: INCLUDE "data/pokemon/base_stats/digda.inc"
BaseStats_Dugtrio:: INCLUDE "data/pokemon/base_stats/dugtrio.inc"
BaseStats_Nyarth:: INCLUDE "data/pokemon/base_stats/nyarth.inc"
BaseStats_Persian:: INCLUDE "data/pokemon/base_stats/persian.inc"
BaseStats_Koduck:: INCLUDE "data/pokemon/base_stats/koduck.inc"
BaseStats_Golduck:: INCLUDE "data/pokemon/base_stats/golduck.inc"
BaseStats_Mankey:: INCLUDE "data/pokemon/base_stats/mankey.inc"
BaseStats_Okorizaru:: INCLUDE "data/pokemon/base_stats/okorizaru.inc"
BaseStats_Gardie:: INCLUDE "data/pokemon/base_stats/gardie.inc"
BaseStats_Windie:: INCLUDE "data/pokemon/base_stats/windie.inc"
BaseStats_Nyoromo:: INCLUDE "data/pokemon/base_stats/nyoromo.inc"
BaseStats_Nyorozo:: INCLUDE "data/pokemon/base_stats/nyorozo.inc"
BaseStats_Nyorobon:: INCLUDE "data/pokemon/base_stats/nyorobon.inc"
BaseStats_Casey:: INCLUDE "data/pokemon/base_stats/casey.inc"
BaseStats_Yungerer:: INCLUDE "data/pokemon/base_stats/yungerer.inc"
BaseStats_Foodin:: INCLUDE "data/pokemon/base_stats/foodin.inc"
BaseStats_Wanriky:: INCLUDE "data/pokemon/base_stats/wanriky.inc"
BaseStats_Goriky:: INCLUDE "data/pokemon/base_stats/goriky.inc"
BaseStats_Kairiky:: INCLUDE "data/pokemon/base_stats/kairiky.inc"
BaseStats_Madatsubomi:: INCLUDE "data/pokemon/base_stats/madatsubomi.inc"
BaseStats_Utsudon:: INCLUDE "data/pokemon/base_stats/utsudon.inc"
BaseStats_Utsubot:: INCLUDE "data/pokemon/base_stats/utsubot.inc"
BaseStats_Menokurage:: INCLUDE "data/pokemon/base_stats/menokurage.inc"
BaseStats_Dokukurage:: INCLUDE "data/pokemon/base_stats/dokukurage.inc"
BaseStats_Isitsubute:: INCLUDE "data/pokemon/base_stats/isitsubute.inc"
BaseStats_Golone:: INCLUDE "data/pokemon/base_stats/golone.inc"
BaseStats_Golonya:: INCLUDE "data/pokemon/base_stats/golonya.inc"
BaseStats_Ponyta:: INCLUDE "data/pokemon/base_stats/ponyta.inc"
BaseStats_Gallop:: INCLUDE "data/pokemon/base_stats/gallop.inc"
BaseStats_Yadon:: INCLUDE "data/pokemon/base_stats/yadon.inc"
BaseStats_Yadoran:: INCLUDE "data/pokemon/base_stats/yadoran.inc"
BaseStats_Coil:: INCLUDE "data/pokemon/base_stats/coil.inc"
BaseStats_Rarecoil:: INCLUDE "data/pokemon/base_stats/rarecoil.inc"
BaseStats_Kamonegi:: INCLUDE "data/pokemon/base_stats/kamonegi.inc"
BaseStats_Dodo:: INCLUDE "data/pokemon/base_stats/dodo.inc"
BaseStats_Dodorio:: INCLUDE "data/pokemon/base_stats/dodorio.inc"
BaseStats_Pawou:: INCLUDE "data/pokemon/base_stats/pawou.inc"
BaseStats_Jugon:: INCLUDE "data/pokemon/base_stats/jugon.inc"
BaseStats_Betbeter:: INCLUDE "data/pokemon/base_stats/betbeter.inc"
BaseStats_Betbeton:: INCLUDE "data/pokemon/base_stats/betbeton.inc"
BaseStats_Shellder:: INCLUDE "data/pokemon/base_stats/shellder.inc"
BaseStats_Parshen:: INCLUDE "data/pokemon/base_stats/parshen.inc"
BaseStats_Ghos:: INCLUDE "data/pokemon/base_stats/ghos.inc"
BaseStats_Ghost:: INCLUDE "data/pokemon/base_stats/ghost.inc"
BaseStats_Gangar:: INCLUDE "data/pokemon/base_stats/gangar.inc"
BaseStats_Iwark:: INCLUDE "data/pokemon/base_stats/iwark.inc"
BaseStats_Sleepe:: INCLUDE "data/pokemon/base_stats/sleepe.inc"
BaseStats_Sleeper:: INCLUDE "data/pokemon/base_stats/sleeper.inc"
BaseStats_Crab:: INCLUDE "data/pokemon/base_stats/crab.inc"
BaseStats_Kingler:: INCLUDE "data/pokemon/base_stats/kingler.inc"
BaseStats_Biriridama:: INCLUDE "data/pokemon/base_stats/biriridama.inc"
BaseStats_Marumine:: INCLUDE "data/pokemon/base_stats/marumine.inc"
BaseStats_Tamatama:: INCLUDE "data/pokemon/base_stats/tamatama.inc"
BaseStats_Nassy:: INCLUDE "data/pokemon/base_stats/nassy.inc"
BaseStats_Karakara:: INCLUDE "data/pokemon/base_stats/karakara.inc"
BaseStats_Garagara:: INCLUDE "data/pokemon/base_stats/garagara.inc"
BaseStats_Sawamular:: INCLUDE "data/pokemon/base_stats/sawamular.inc"
BaseStats_Ebiwalar:: INCLUDE "data/pokemon/base_stats/ebiwalar.inc"
BaseStats_Beroringa:: INCLUDE "data/pokemon/base_stats/beroringa.inc"
BaseStats_Dogars:: INCLUDE "data/pokemon/base_stats/dogars.inc"
BaseStats_Matadogas:: INCLUDE "data/pokemon/base_stats/matadogas.inc"
BaseStats_Sihorn:: INCLUDE "data/pokemon/base_stats/sihorn.inc"
BaseStats_Sidon:: INCLUDE "data/pokemon/base_stats/sidon.inc"
BaseStats_Lucky:: INCLUDE "data/pokemon/base_stats/lucky.inc"
BaseStats_Monjara:: INCLUDE "data/pokemon/base_stats/monjara.inc"
BaseStats_Garura:: INCLUDE "data/pokemon/base_stats/garura.inc"
BaseStats_Tattu:: INCLUDE "data/pokemon/base_stats/tattu.inc"
BaseStats_Seadra:: INCLUDE "data/pokemon/base_stats/seadra.inc"
BaseStats_Tosakinto:: INCLUDE "data/pokemon/base_stats/tosakinto.inc"
BaseStats_Azumao:: INCLUDE "data/pokemon/base_stats/azumao.inc"
BaseStats_Hitodeman:: INCLUDE "data/pokemon/base_stats/hitodeman.inc"
BaseStats_Starmie:: INCLUDE "data/pokemon/base_stats/starmie.inc"
BaseStats_Barrierd:: INCLUDE "data/pokemon/base_stats/barrierd.inc"
BaseStats_Strike:: INCLUDE "data/pokemon/base_stats/strike.inc"
BaseStats_Rougela:: INCLUDE "data/pokemon/base_stats/rougela.inc"
BaseStats_Eleboo:: INCLUDE "data/pokemon/base_stats/eleboo.inc"
BaseStats_Boober:: INCLUDE "data/pokemon/base_stats/boober.inc"
BaseStats_Kailios:: INCLUDE "data/pokemon/base_stats/kailios.inc"
BaseStats_Kentauros:: INCLUDE "data/pokemon/base_stats/kentauros.inc"
BaseStats_Koiking:: INCLUDE "data/pokemon/base_stats/koiking.inc"
BaseStats_Gyarados:: INCLUDE "data/pokemon/base_stats/gyarados.inc"
BaseStats_Laplace:: INCLUDE "data/pokemon/base_stats/laplace.inc"
BaseStats_Metamon:: INCLUDE "data/pokemon/base_stats/metamon.inc"
BaseStats_Eievui:: INCLUDE "data/pokemon/base_stats/eievui.inc"
BaseStats_Showers:: INCLUDE "data/pokemon/base_stats/showers.inc"
BaseStats_Thunders:: INCLUDE "data/pokemon/base_stats/thunders.inc"
BaseStats_Booster:: INCLUDE "data/pokemon/base_stats/booster.inc"
BaseStats_Porygon:: INCLUDE "data/pokemon/base_stats/porygon.inc"
BaseStats_Omnite:: INCLUDE "data/pokemon/base_stats/omnite.inc"
BaseStats_Omstar:: INCLUDE "data/pokemon/base_stats/omstar.inc"
BaseStats_Kabuto:: INCLUDE "data/pokemon/base_stats/kabuto.inc"
BaseStats_Kabutops:: INCLUDE "data/pokemon/base_stats/kabutops.inc"
BaseStats_Ptera:: INCLUDE "data/pokemon/base_stats/ptera.inc"
BaseStats_Kabigon:: INCLUDE "data/pokemon/base_stats/kabigon.inc"
BaseStats_Freezer:: INCLUDE "data/pokemon/base_stats/freezer.inc"
BaseStats_Thunder:: INCLUDE "data/pokemon/base_stats/thunder.inc"
BaseStats_Fire:: INCLUDE "data/pokemon/base_stats/fire.inc"
BaseStats_Miniryu:: INCLUDE "data/pokemon/base_stats/miniryu.inc"
BaseStats_Hakuryu:: INCLUDE "data/pokemon/base_stats/hakuryu.inc"
BaseStats_Kairyu:: INCLUDE "data/pokemon/base_stats/kairyu.inc"
BaseStats_Mewtwo:: INCLUDE "data/pokemon/base_stats/mewtwo.inc"
BaseStats_Mew:: INCLUDE "data/pokemon/base_stats/mew.inc"
BaseStats_Happa:: INCLUDE "data/pokemon/base_stats/happa.inc"
BaseStats_Hanamogura:: INCLUDE "data/pokemon/base_stats/hanamogura.inc"
BaseStats_Hanaryu:: INCLUDE "data/pokemon/base_stats/hanaryu.inc"
BaseStats_Honoguma:: INCLUDE "data/pokemon/base_stats/honoguma.inc"
BaseStats_Volbear:: INCLUDE "data/pokemon/base_stats/volbear.inc"
BaseStats_Dynabear:: INCLUDE "data/pokemon/base_stats/dynabear.inc"
BaseStats_Kurusu:: INCLUDE "data/pokemon/base_stats/kurusu.inc"
BaseStats_Aqua:: INCLUDE "data/pokemon/base_stats/aqua.inc"
BaseStats_Aquaria:: INCLUDE "data/pokemon/base_stats/aquaria.inc"
BaseStats_Hoho:: INCLUDE "data/pokemon/base_stats/hoho.inc"
BaseStats_Bobo:: INCLUDE "data/pokemon/base_stats/bobo.inc"
BaseStats_Pachimee:: INCLUDE "data/pokemon/base_stats/pachimee.inc"
BaseStats_Mokoko:: INCLUDE "data/pokemon/base_stats/mokoko.inc"
BaseStats_Denryu:: INCLUDE "data/pokemon/base_stats/denryu.inc"
BaseStats_Mikon:: INCLUDE "data/pokemon/base_stats/mikon.inc"
BaseStats_Monja:: INCLUDE "data/pokemon/base_stats/monja.inc"
BaseStats_Jaranra:: INCLUDE "data/pokemon/base_stats/jaranra.inc"
BaseStats_Haneei:: INCLUDE "data/pokemon/base_stats/haneei.inc"
BaseStats_Puku:: INCLUDE "data/pokemon/base_stats/puku.inc"
BaseStats_Shibirefugu:: INCLUDE "data/pokemon/base_stats/shibirefugu.inc"
BaseStats_Pichu:: INCLUDE "data/pokemon/base_stats/pichu.inc"
BaseStats_Py:: INCLUDE "data/pokemon/base_stats/py.inc"
BaseStats_Pupurin:: INCLUDE "data/pokemon/base_stats/pupurin.inc"
BaseStats_Mizuuo:: INCLUDE "data/pokemon/base_stats/mizuuo.inc"
BaseStats_Naty:: INCLUDE "data/pokemon/base_stats/naty.inc"
BaseStats_Natio:: INCLUDE "data/pokemon/base_stats/natio.inc"
BaseStats_Gyopin:: INCLUDE "data/pokemon/base_stats/gyopin.inc"
BaseStats_Maril:: INCLUDE "data/pokemon/base_stats/maril.inc"
BaseStats_Manbo1:: INCLUDE "data/pokemon/base_stats/manbo1.inc"
BaseStats_Ikari:: INCLUDE "data/pokemon/base_stats/ikari.inc"
BaseStats_Grotess:: INCLUDE "data/pokemon/base_stats/grotess.inc"
BaseStats_Eksing:: INCLUDE "data/pokemon/base_stats/eksing.inc"
BaseStats_Para:: INCLUDE "data/pokemon/base_stats/para.inc"
BaseStats_Kokumo:: INCLUDE "data/pokemon/base_stats/kokumo.inc"
BaseStats_Twohead:: INCLUDE "data/pokemon/base_stats/twohead.inc"
BaseStats_Yoroidori:: INCLUDE "data/pokemon/base_stats/yoroidori.inc"
BaseStats_Animon:: INCLUDE "data/pokemon/base_stats/animon.inc"
BaseStats_Hinazu:: INCLUDE "data/pokemon/base_stats/hinazu.inc"
BaseStats_Sunny:: INCLUDE "data/pokemon/base_stats/sunny.inc"
BaseStats_Paon:: INCLUDE "data/pokemon/base_stats/paon.inc"
BaseStats_Donphan:: INCLUDE "data/pokemon/base_stats/donphan.inc"
BaseStats_Twinz:: INCLUDE "data/pokemon/base_stats/twinz.inc"
BaseStats_Kirinriki:: INCLUDE "data/pokemon/base_stats/kirinriki.inc"
BaseStats_Painter:: INCLUDE "data/pokemon/base_stats/painter.inc"
BaseStats_Kounya:: INCLUDE "data/pokemon/base_stats/kounya.inc"
BaseStats_Rinrin:: INCLUDE "data/pokemon/base_stats/rinrin.inc"
BaseStats_Berurun:: INCLUDE "data/pokemon/base_stats/berurun.inc"
BaseStats_Nyorotono:: INCLUDE "data/pokemon/base_stats/nyorotono.inc"
BaseStats_Yadoking:: INCLUDE "data/pokemon/base_stats/yadoking.inc"
BaseStats_Annon:: INCLUDE "data/pokemon/base_stats/annon.inc"
BaseStats_Rediba:: INCLUDE "data/pokemon/base_stats/rediba.inc"
BaseStats_Mitsuboshi:: INCLUDE "data/pokemon/base_stats/mitsuboshi.inc"
BaseStats_Puchicorn:: INCLUDE "data/pokemon/base_stats/puchicorn.inc"
BaseStats_Eifie:: INCLUDE "data/pokemon/base_stats/eifie.inc"
BaseStats_Blacky:: INCLUDE "data/pokemon/base_stats/blacky.inc"
BaseStats_Turban:: INCLUDE "data/pokemon/base_stats/turban.inc"
BaseStats_Betbaby:: INCLUDE "data/pokemon/base_stats/betbaby.inc"
BaseStats_Teppouo:: INCLUDE "data/pokemon/base_stats/teppouo.inc"
BaseStats_Okutank:: INCLUDE "data/pokemon/base_stats/okutank.inc"
BaseStats_Gongu:: INCLUDE "data/pokemon/base_stats/gongu.inc"
BaseStats_Kapoerer:: INCLUDE "data/pokemon/base_stats/kapoerer.inc"
BaseStats_Pudie:: INCLUDE "data/pokemon/base_stats/pudie.inc"
BaseStats_Haneko:: INCLUDE "data/pokemon/base_stats/haneko.inc"
BaseStats_Poponeko:: INCLUDE "data/pokemon/base_stats/poponeko.inc"
BaseStats_Wataneko:: INCLUDE "data/pokemon/base_stats/wataneko.inc"
BaseStats_Baririna:: INCLUDE "data/pokemon/base_stats/baririna.inc"
BaseStats_Lip:: INCLUDE "data/pokemon/base_stats/lip.inc"
BaseStats_Elebaby:: INCLUDE "data/pokemon/base_stats/elebaby.inc"
BaseStats_Booby:: INCLUDE "data/pokemon/base_stats/booby.inc"
BaseStats_Kireihana:: INCLUDE "data/pokemon/base_stats/kireihana.inc"
BaseStats_Tsubomitto:: INCLUDE "data/pokemon/base_stats/tsubomitto.inc"
BaseStats_Miltank:: INCLUDE "data/pokemon/base_stats/miltank.inc"
BaseStats_Bombseeker:: INCLUDE "data/pokemon/base_stats/bombseeker.inc"
BaseStats_Gift:: INCLUDE "data/pokemon/base_stats/gift.inc"
BaseStats_Kotora:: INCLUDE "data/pokemon/base_stats/kotora.inc"
BaseStats_Raitora:: INCLUDE "data/pokemon/base_stats/raitora.inc"
BaseStats_Madame:: INCLUDE "data/pokemon/base_stats/madame.inc"
BaseStats_Norowara:: INCLUDE "data/pokemon/base_stats/norowara.inc"
BaseStats_Kyonpan:: INCLUDE "data/pokemon/base_stats/kyonpan.inc"
BaseStats_Yamikarasu:: INCLUDE "data/pokemon/base_stats/yamikarasu.inc"
BaseStats_Happi:: INCLUDE "data/pokemon/base_stats/happi.inc"
BaseStats_Scissors:: INCLUDE "data/pokemon/base_stats/scissors.inc"
BaseStats_Purakkusu:: INCLUDE "data/pokemon/base_stats/purakkusu.inc"
BaseStats_Devil:: INCLUDE "data/pokemon/base_stats/devil.inc"
BaseStats_Helgaa:: INCLUDE "data/pokemon/base_stats/helgaa.inc"
BaseStats_Wolfman:: INCLUDE "data/pokemon/base_stats/wolfman.inc"
BaseStats_Warwolf:: INCLUDE "data/pokemon/base_stats/warwolf.inc"
BaseStats_Porygon2:: INCLUDE "data/pokemon/base_stats/porygon2.inc"
BaseStats_Nameil:: INCLUDE "data/pokemon/base_stats/nameil.inc"
BaseStats_Haganeil:: INCLUDE "data/pokemon/base_stats/haganeil.inc"
BaseStats_Kingdra:: INCLUDE "data/pokemon/base_stats/kingdra.inc"
BaseStats_Rai:: INCLUDE "data/pokemon/base_stats/rai.inc"
BaseStats_En:: INCLUDE "data/pokemon/base_stats/en.inc"
BaseStats_Sui:: INCLUDE "data/pokemon/base_stats/sui.inc"
BaseStats_Nyula:: INCLUDE "data/pokemon/base_stats/nyula.inc"
BaseStats_Houou:: INCLUDE "data/pokemon/base_stats/houou.inc"
BaseStats_Togepy:: INCLUDE "data/pokemon/base_stats/togepy.inc"
BaseStats_Bulu:: INCLUDE "data/pokemon/base_stats/bulu.inc"
BaseStats_Tail:: INCLUDE "data/pokemon/base_stats/tail.inc"
BaseStats_Leafy:: INCLUDE "data/pokemon/base_stats/leafy.inc"

View File

@ -6,7 +6,11 @@
db TYPE_DARK, TYPE_NORMAL ; type
db 255 ; catch rate
db 100 ; base exp
if DEBUG || def(SILVER)
db ITEM_BERRY, ITEM_TAG ; items
else
db ITEM_APPLE, ITEM_TAG ; item
endc
db GENDER_50_50 ; gender ratio
db 100, 4, 70 ; unknown
dn 7, 7 ; sprite dimensions

View File

@ -3,7 +3,7 @@
add_predef: MACRO
\1Predef::
dab \1
dba \1
ENDM
PredefPointers:: ; 1:62d3
@ -11,90 +11,91 @@ PredefPointers:: ; 1:62d3
; Please be a peach and nuke the hell out of these:
; WE NEED LABELS!
; Thank youu~
dbw 1, $6445 ; 0
dbw 1, $5D27
dbw 1, $6713
dbw 1, $66B1
dbw 1, $4031
dbw 3, $4E10
dbw 3, $4D6F
dbw 3, $4DE3
dbw 3, $4DE3 ; 8
dbw 3, $4DE3
dbw 3, $4DF9
dbw 3, $4E10
dbw 3, $4D33
dbw 3, $366C
dbw 3, $4E3C
dbw 3, $5A28
dbw 3, $5886 ; 10
dbw 3, $5A4F
dbw 3, $5AC8
dbw 3, $5CFC
dbw 3, $5C16
dbw 3, $5D5C
dbw 3, $5E79
dbw 3, $4E7C
dbw 3, $5F7D ; 18
dbw 3, $5F91
dbw 4, $528F
dbw 4, $52C1
dbw 10, $4C98
dbw 11, $5663
dbw 15, $55CE
dbw 15, $7019
dbw 15, $7068 ; 20
dbw 15, $704A
dbw 15, $508C
dbw 15, $567C
dbw 15, $61A4
dbw 15, $6F19
dbw 15, $6874
dbw 15, $691E
dbw 15, $6963 ; 28
dbw 16, $61F8
dbw 16, $6252
dbw 16, $5FA1
dbw 10, $4DA4
dbw 10, $4D6E
dbw 16, $4AC7
dbw 16, $4000
dbw 16, $4B5C ; 30
dbw 20, $4000
dbw 20, $4BFE
dbw 20, $4BCD
dbw 20, $4B92
dbw 20, $48C4
dbw 20, $4771
dbw 20, $4774
dbw 20, $481F ; 38
dbw 20, $46D4
dbw 20, $469E
dbw 20, $42B5
dbw 20, $4244
dbw 20, $4248
dbw 20, $40C6
dbw 20, $40A0
dbw 20, $4073 ; 40
dbw 20, $4ED9
dbw 50, $76FF
dbw 50, $7710
dbw 50, $7733
dbw 5, $45B8
dbw 5, $46DC
dbw 5, $45DE
dbw 50, $4000 ; 48
dbw 5, $457A
dbw 5, $43E0
dbw 2, $5695
dbw 2, $528B
dbw 2, $4786
dbw 35, $44BE
dbw 35, $49C6
dbw 35, $4940 ; 50
dbw 51, $4001
dbw 51, $4000
dbw 51, $4000
dbw 63, $5B66
dbw 4, $640B
add_predef Function_6445
add_predef Function_5d27
add_predef Function_6713
add_predef Function_66b1
add_predef Function_4031
add_predef Function_ce10
add_predef Function_cd6f
add_predef Function_cde3
add_predef Function_cde3_2
add_predef Function_cde3_3
add_predef Function_cdf9
add_predef Function_ce10_2
add_predef Function_cd33
Function_366cPredef::
dbw 3, Function_366c
add_predef Function_ce3c
add_predef Function_da28
add_predef Function_d886
add_predef Function_da4f
add_predef Function_dac8
add_predef Function_dcfc
add_predef Function_dc16
add_predef Function_dd5c
add_predef Function_de79
add_predef Function_ce7c
add_predef Function_df7d
add_predef Function_df91
add_predef Function_1128f
add_predef Function_112c1
add_predef Function_28c98
add_predef Function_2d663
add_predef Function_3d5ce
add_predef Function_3f019
add_predef Function_3f068
add_predef Function_3f04a
add_predef Function_3d08c
add_predef Function_3d67c
add_predef Function_3e1a4
add_predef Function_3ef19
add_predef Function_3e874
add_predef Function_3e91e
add_predef Function_3e963
add_predef Function_421f8
add_predef Function_42252
add_predef Function_41fa1
add_predef Function_28da4
add_predef Function_28d6e
add_predef Function_40ac7
add_predef Function_40000
add_predef Function_40b5c
add_predef Function_50000
add_predef Function_50bfe
add_predef Function_50bcd
add_predef Function_50b92
add_predef Function_508c4
add_predef Function_50771
add_predef Function_50774
add_predef Function_5081f
add_predef Function_506d4
add_predef Function_5069e
add_predef Function_502b5
add_predef Function_50244
add_predef Function_50248
add_predef Function_500c6
add_predef Function_500a0
add_predef Function_50073
add_predef Function_50ed9
add_predef Function_cb6ff
add_predef Function_cb710
add_predef Function_cb733
add_predef Function_145b8
add_predef Function_146dc
add_predef Function_145de
add_predef Function_c8000
add_predef Function_1457a
add_predef Function_143e0
add_predef Function_9695
add_predef Function_928b
add_predef Function_8786
add_predef Function_8c4be
add_predef Function_8c9c6
add_predef Function_8c940
add_predef Function_cc001
add_predef Function_cc000
add_predef Function_cc000_2
add_predef Function_fdb66
add_predef Function_1240b
dbw $ff, InexplicablyEmptyFunction

View File

@ -38,7 +38,11 @@ SuperPalettes::
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, 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
else
RGB 28,28,28, 18,18,18, 21,00,04, 04,04,04 ; LOGO_1
endc
RGB 28,28,28, 31,20,10, 21,00,04, 04,04,04 ; LOGO_2
RGB 28,28,28, 30,26,16, 16,12,09, 04,04,04 ; GAME_FREAK
RGB 28,28,28, 15,28,26, 12,22,26, 03,16,14 ; INTRO_WATER

View File

@ -1,6 +1,10 @@
INCLUDE "constants.asm"
if DEBUG
SECTION "Tileset Headers", ROMX[$488D], BANK[$03]
else
SECTION "Tileset Headers", ROMX[$4875], BANK[$03]
endc
Tileset_00: ; 0xc88d
db $06 ; bank

View File

@ -3,10 +3,10 @@ INCLUDE "constants.asm"
; Trainer data structure:
; - db "NAME@", TRAINERTYPE_* constant
; - 1 to 6 Pokémon:
; * for TRAINERTYPE_NORMAL: db level, species
; * for TRAINERTYPE_ITEM: db level, species, item
; * for TRAINERTYPE_MOVES: db level, species, 4 moves
; * for TRAINERTYPE_ITEM_MOVES: db level, species, item, 4 moves
; * for TRAINERTYPE_NORMAL: db level, species
; * for TRAINERTYPE_ITEM: db level, species, item
; * for TRAINERTYPE_MOVES: db level, species, 4 moves
; * for TRAINERTYPE_ITEM_MOVES: db level, species, item, 4 moves
; - db -1 ; end
SECTION "Trainer Parties", ROMX[$5110], BANK[$E]
@ -15,6 +15,7 @@ INCLUDE "data/trainers/party_pointers.inc"
; TODO: decode all data
if def(GOLD)
SECTION "Trainer Parties 1 TEMPORARY", ROMX[$51BF],BANK[$E]
AkaneGroup::
BugCatcherBoyGroup::
@ -205,3 +206,195 @@ SportsmanGroup::
db "しげき@", TRAINERTYPE_ITEM
db 8, DEX_DONPHAN, ITEM_NONE
db -1 ; end
else
SECTION "Trainer Parties 1 TEMPORARY", ROMX[$51BF],BANK[$E]
AkaneGroup::
BugCatcherBoyGroup::
; BUG_CATCHER_BOY_KENJI
db "けんじ@", TRAINERTYPE_ITEM_MOVES
db 9, DEX_REDIBA, ITEM_NONE, MOVE_SCRATCH, MOVE_QUICK_ATTACK, MOVE_NONE, MOVE_NONE
db -1 ; end
; BUG_CATCHER_BOY_KEN
db "けん@", TRAINERTYPE_ITEM_MOVES
db 7, DEX_KONGPANG, ITEM_NONE, MOVE_STUN_SPORE, MOVE_LEECH_LIFE, 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::
SECTION "Trainer Parties 4 TEMPORARY", ROMX[$54BA],BANK[$E]
WataruGroup::
SECTION "Trainer Parties 5 TEMPORARY", ROMX[$54E0],BANK[$E]
GerugeMemberMGroup::
SECTION "Trainer Parties 6 TEMPORARY", ROMX[$54FE],BANK[$E]
Trio1Group::
BeautyGroup::
SECTION "Trainer Parties 7 TEMPORARY", ROMX[$55EB],BANK[$E]
FledglingGroup::
SECTION "Trainer Parties 8 TEMPORARY", ROMX[$56CE],BANK[$E]
PokeManiacGroup::
SECTION "Trainer Parties 9 TEMPORARY", ROMX[$57BC],BANK[$E]
GentlemanGroup::
SECTION "Trainer Parties 10 TEMPORARY", ROMX[$57E0],BANK[$E]
TeacherMGroup::
SECTION "Trainer Parties 11 TEMPORARY", ROMX[$57EC],BANK[$E]
TeacherFGroup::
SECTION "Trainer Parties 12 TEMPORARY", ROMX[$57F2],BANK[$E]
ManchildGroup::
SECTION "Trainer Parties 13 TEMPORARY", ROMX[$58C3],BANK[$E]
RockerGroup::
SECTION "Trainer Parties 14 TEMPORARY", ROMX[$58F2],BANK[$E]
HikerGroup::
SECTION "Trainer Parties 15 TEMPORARY", ROMX[$5995],BANK[$E]
KimonoGirlGroup::
; KIMONO_GIRL_KOUME
db "こうめ@", TRAINERTYPE_ITEM_MOVES
db 9, DEX_DONPHAN, ITEM_NONE, MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_NONE, MOVE_NONE
db -1 ; end
; KIMONO_GIRL_TAMAO
db "たまお@", TRAINERTYPE_ITEM_MOVES
db 10, DEX_PURIN, ITEM_NONE, MOVE_CHARM, MOVE_POUND, MOVE_ENCORE, MOVE_NONE
db -1 ; end
SECTION "Trainer Parties 16 TEMPORARY", ROMX[$518A],BANK[$E]
HayatoGroup::
SECTION "Trainer Parties 17 TEMPORARY", ROMX[$5216],BANK[$E]
TsukishiGroup::
LassGroup::
SECTION "Trainer Parties 18 TEMPORARY", ROMX[$526F],BANK[$E]
EnokiGroup::
SECTION "Trainer Parties 19 TEMPORARY", ROMX[$528F],BANK[$E]
OkeraGroup::
SECTION "Trainer Parties 20 TEMPORARY", ROMX[$533D],BANK[$E]
GamaGroup::
SECTION "Trainer Parties 21 TEMPORARY", ROMX[$5542],BANK[$E]
Trio2Group::
SECTION "Trainer Parties 22 TEMPORARY", ROMX[$5554],BANK[$E]
Trio3Group::
SECTION "Trainer Parties 23 TEMPORARY", ROMX[$5673],BANK[$E]
ProfessionalMGroup::
ProfessionalFGroup::
SECTION "Trainer Parties 24 TEMPORARY", ROMX[$5812],BANK[$E]
SwimmerMGroup::
SECTION "Trainer Parties 25 TEMPORARY", ROMX[$5821],BANK[$E]
SuperNerdGroup::
SECTION "Trainer Parties 26 TEMPORARY", ROMX[$5833],BANK[$E]
EngineerGroup::
SECTION "Trainer Parties 27 TEMPORARY", ROMX[$5965],BANK[$E]
JugglerGroup::
SECTION "Trainer Parties 28 TEMPORARY", ROMX[$5971],BANK[$E]
TwinsGroup::
SECTION "Trainer Parties 29 TEMPORARY", ROMX[$5976],BANK[$E]
SchoolboyGroup::
; SCHOOLBOY_TETSUYA
db "てつや@", TRAINERTYPE_ITEM
db 8, DEX_YADOKING, ITEM_NONE
db -1 ; end
SECTION "Trainer Parties 30 TEMPORARY", ROMX[$597F],BANK[$E]
FirebreatherGroup::
; FIREBREATHER_AKITO
db "あきと@", TRAINERTYPE_ITEM
db 8, DEX_BOOBY, ITEM_NONE
db -1 ; end
SECTION "Trainer Parties 31 TEMPORARY", ROMX[$5320],BANK[$E]
BlueGroup::
SECTION "Trainer Parties 32 TEMPORARY", ROMX[$5375],BANK[$E]
RivalGroup::
SECTION "Trainer Parties 33 TEMPORARY", ROMX[$5404],BANK[$E]
SakakiGroup::
SECTION "Trainer Parties 34 TEMPORARY", ROMX[$5427],BANK[$E]
ProtagonistGroup::
SECTION "Trainer Parties 35 TEMPORARY", ROMX[$5433],BANK[$E]
SibaGroup::
KasumiGroup::
FisherGroup::
SECTION "Trainer Parties 36 TEMPORARY", ROMX[$5476],BANK[$E]
KannaGroup::
SECTION "Trainer Parties 37 TEMPORARY", ROMX[$555D],BANK[$E]
RocketFGroup::
SECTION "Trainer Parties 38 TEMPORARY", ROMX[$557E],BANK[$E]
YoungsterGroup::
SECTION "Trainer Parties 39 TEMPORARY", ROMX[$564F],BANK[$E]
ProdigyGroup::
SECTION "Trainer Parties 40 TEMPORARY", ROMX[$578C],BANK[$E]
RocketMGroup::
SECTION "Trainer Parties 41 TEMPORARY", ROMX[$5808],BANK[$E]
SwimmerFGroup::
SECTION "Trainer Parties 42 TEMPORARY", ROMX[$5817],BANK[$E]
SailorGroup::
SECTION "Trainer Parties 43 TEMPORARY", ROMX[$58FE],BANK[$E]
BikerGroup::
SECTION "Trainer Parties 44 TEMPORARY", ROMX[$594D],BANK[$E]
RockClimberGroup::
SECTION "Trainer Parties 45 TEMPORARY", ROMX[$5959],BANK[$E]
BurglarGroup::
SECTION "Trainer Parties 46 TEMPORARY", ROMX[$5969],BANK[$E]
BlackbeltGroup::
SECTION "Trainer Parties 47 TEMPORARY", ROMX[$596D],BANK[$E]
PsychicGroup::
KungFuMasterGroup::
FortuneTellerGroup::
HooliganGroup::
SageGroup::
MediumGroup::
SoldierGroup::
GerugeMemberFGroup::
SECTION "Trainer Parties 48 TEMPORARY", ROMX[$5988],BANK[$E]
SportsmanGroup::
; SPORTSMAN_SHIGEKI
db "てつじ@", TRAINERTYPE_ITEM_MOVES
db 9, DEX_DONPHAN, ITEM_NONE, MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_NONE, MOVE_NONE
db -1 ; end
endc

View File

@ -1,6 +1,10 @@
INCLUDE "constants.asm"
if DEBUG
SECTION "Predef pointers", ROMX[$62B0], BANK[$01]
else
SECTION "Predef pointers", ROMX[$62AD], BANK[$01]
endc
GetPredefPointer:: ; 1:62b0
ld a, h

View File

@ -6,7 +6,11 @@ IntroSequence:: ; 5d8c
; TODO
if DEBUG
SECTION "Title screen TEMPORARY", ROMX[$62A5],BANK[1] ; TODO: merge this with the main section above
else
SECTION "Title screen TEMPORARY", ROMX[$62A2],BANK[1] ; TODO: merge this with the main section above
endc
GameInit:: ; 62a5
call ClearWindowData

15
gfx.asm
View File

@ -35,11 +35,19 @@ INCBIN "gfx/sgb/sgb_border_alt.2bpp"
SECTION "SGB Border GFX", ROMX[$6B1C], BANK[$02]
SGBBorderGFX::
INCBIN "gfx/sgb/sgb_border.2bpp"
if def(GOLD)
INCBIN "gfx/sgb/sgb_border_gold.2bpp"
else
INCBIN "gfx/sgb/sgb_border_silver.2bpp"
endc
SECTION "Title Screen GFX", ROMX[$47CF], BANK[$04]
TitleScreenGFX::
INCBIN "gfx/title/title.2bpp"
if def(GOLD)
INCBIN "gfx/title/title_gold.2bpp"
else
INCBIN "gfx/title/title_silver.2bpp"
endc
SECTION "Mail Icon GFX", ROMX[$5BB1], BANK[$04]
MailIconGFX::
@ -51,9 +59,12 @@ INCBIN "gfx/trainer_card/trainer_card.2bpp"
TrainerCardLeadersGFX::
INCBIN "gfx/trainer_card/leaders.2bpp"
if DEBUG
; Not sure how to parse this from the non-debug ROM, so I'll leave this be for now
SECTION "Unused Leader", ROMX[$7BA3], BANK[$04]
UnusedLeaderNameGFX::
INCBIN "gfx/trainer_card/unused_leader_name.2bpp"
endc
SECTION "Bank 6 Tilesets 00", ROMX[$4000], BANK[$06]
Tileset_00_GFX:

View File

Before

Width:  |  Height:  |  Size: 589 B

After

Width:  |  Height:  |  Size: 589 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 B

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
gfx/title/title_silver.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,6 +1,10 @@
INCLUDE "constants.asm"
if DEBUG
SECTION "Audio interface", ROM0[$3CBF]
else
SECTION "Audio interface", ROM0[$3C83]
endc
DisableAudio:: ; 3cbf
push hl

View File

@ -1,6 +1,10 @@
INCLUDE "constants.asm"
if DEBUG
SECTION "Bankswitch", ROM0[$32C2]
else
SECTION "Bankswitch", ROM0[$3286]
endc
; Moved to a rst vector in final US releases (not sure about JP)
; All rst vectors are unused at this point in development

View File

@ -1,6 +1,10 @@
INCLUDE "constants.asm"
if DEBUG
SECTION "Sprite clearing", ROM0[$32DC]
else
SECTION "Sprite clearing", ROM0[$32A0]
endc
ClearSprites:: ; 32dc
ld hl, wVirtualOAM

View File

@ -1,6 +1,10 @@
INCLUDE "constants.asm"
if DEBUG
SECTION "Copy functions", ROM0[$32F7]
else
SECTION "Copy functions", ROM0[$32BB]
endc
; Copy bc bytes from a:hl to de.
FarCopyBytes:: ; 32f7

View File

@ -1,6 +1,10 @@
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

View File

@ -1,6 +1,10 @@
INCLUDE "constants.asm"
if DEBUG
SECTION "Farcall", ROM0[$2FA8]
else
SECTION "FarCall", ROM0[$2F6C]
endc
FarCall_hl:: ; 2fa8
push af

View File

@ -7,7 +7,19 @@ SECTION "Entry point", ROM0[$100]
SECTION "Global check value", ROM0[$14E]
; The ROM has an incorrect global check, so set it here
; It is not corrected by RGBFIX
if def(GOLD)
if DEBUG
db $21, $C6
else
db $7e, $49
endc
else
if DEBUG
db $c9, $2f
else
db $b1, $7a
endc
endc
SECTION "Init", ROM0[$52F]

41
home/math.asm Normal file
View File

@ -0,0 +1,41 @@
include "constants.asm"
if DEBUG
SECTION "Home Math", ROM0[$341F]
else
SECTION "Home Math", ROM0[$33E3]
endc
_341F:: ; 341f
; Returns hl + a * 6
and a
ret z
ld bc, 6
.loop:
add hl, bc
dec a
jr nz, .loop
ret
AddAMulBC:: ; 3429
; Returns hl + a * bc
and a
ret z
.loop:
add hl, bc
dec a
jr nz, .loop
ret
memcmp:: ; 3430
; Compare c bytes at hl and de
; Returns z if all equal, nz otherwise.
.loop:
ld a, [de]
cp [hl]
ret nz
inc de
inc hl
dec c
jr nz, .loop
ret

View File

@ -1,6 +1,10 @@
INCLUDE "constants.asm"
SECTION "3A4B", ROM0[$3a4b]
if DEBUG
SECTION "3A4B", ROM0[$3A4B]
else
SECTION "3A4B", ROM0[$3A0F]
endc
; copies the base stat data of a pokemon to wMonHeader
; INPUT:
; [wcb5b] = pokemon ID in dex order
@ -43,7 +47,11 @@ GetMonHeader:: ; 3a4b (0:3a4b)
pop bc
ret
SECTION "3AED", ROM0[$3aed]
if DEBUG
SECTION "3AED", ROM0[$3AED]
else
SECTION "3AED", ROM0[$3AB1]
endc
; Uncompresses the front or back sprite of the specified mon
; assumes the corresponding mon header is already loaded

View File

@ -1,6 +1,10 @@
INCLUDE "constants.asm"
if DEBUG
SECTION "Predef", ROM0[$2FDE]
else
SECTION "Predef", ROM0[$2FA2]
endc
Predef:: ; 2fde
ld [wPredefID], a

View File

@ -1,25 +1,29 @@
; rst vectors
SECTION "rst00", ROM0[$000]
rst $38
rst $38
SECTION "rst08", ROM0[$008]
rst $38
rst $38
SECTION "rst10", ROM0[$010]
rst $38
rst $38
SECTION "rst18", ROM0[$018]
rst $38
rst $38
SECTION "rst20", ROM0[$020]
rst $38
rst $38
SECTION "rst28", ROM0[$028]
rst $38
rst $38
SECTION "rst30", ROM0[$030]
rst $38
rst $38
SECTION "rst38", ROM0[$038]
jp $F080 ; Jumps in the middle of unmapped memory. Probably used to trigger a breakpoint of sorts.
if DEBUG && def(SILVER)
rst $38
else
jp $F080 ; Jumps in the middle of unmapped memory. Probably used to trigger a breakpoint of sorts.
endc

View File

@ -1,6 +1,10 @@
INCLUDE "constants.asm"
if DEBUG
SECTION "SRAM functions", ROM0[$32A7]
else
SECTION "SRAM functions", ROM0[$326B]
endc
OpenSRAM:: ; 32a7
push af

View File

@ -1,6 +1,10 @@
INCLUDE "constants.asm"
if DEBUG
SECTION "Empty function", ROM0[$2F97]
else
SECTION "Empty function", ROM0[$2F5B]
endc
InexplicablyEmptyFunction:: ; 2f97
REPT 16
@ -34,3 +38,86 @@ _2007:: ; 2007
ld [wce5f], a
call CloseSRAM
ret
SECTION "Unknown functions 2", ROM0[$2075]
_2075:: ; 2075
; Prepares a buffer for the clock display, which in the Debug ROM is displayed on the bottom of the screen.
; This function is called every frame, and loads special tiles into the $66-$7a space.
ld hl, wcbd2
ld bc, $14
ld a, " "
call ByteFill
if DEBUG
ld hl, $d153
bit 0, [hl]
jr z, ._209e
ld hl, $d65b
ld de, wcbd2 + 4
ld c, $01
call _20CD
ld hl, $d65a
ld de, wcbd2 + 8
ld c, $01
call _20CD
ret
._209e:
endc
ld hl, hHours
ld de, wcbd2
call _20DC
ld hl, hMinutes
ld de, wcbd2 + 3
call _20DC
ldh a, [hDays]
and 7
add $71 ; Sunday
ld [wcbd2 + 6], a
ld a, $78 ; power
ld [wcbd2 + 9], a
inc a ; mobile
ld [wcbd2 + 11], a
ldh a, [hSeconds]
and 1
ret z
ld a, $70 ; :
ld [wcbd2 + 2], a
ret
_20CD:: ; 20cd
; PrintAsHex
ld a, [hli]
ld b, a
swap a
call _20F1
ld a, b
call _20F1
dec c
jr nz, _20CD
ret
_20DC:: ; 20dc
; PrintAsDec
ld a, [hli]
ld b, 0
._20df:
inc b
sub 10
jr nc, ._20df
dec b
add 10
push af
ld a, b
call _20F1
pop af
call _20F1
ret
_20F1:: ; 20f1
and %1111
add $66 ; digit 0
ld [de], a
inc de
ret

View File

@ -4,7 +4,13 @@ hOAMDMA:: ; ff80
ds 10
ds 14 ; TODO
ds 3 ; TODO
hHours:: db ; ff8d
hMinutes:: db ; ff8e
hSeconds:: db ; ff8f
hDays:: db ; ff90
ds 7 ; TODO
hROMBank:: ; ff98

View File

@ -1 +1,4 @@
2eadbed83b775c097ff79e5128d1184f *pokegold-spaceworld.gb
3c407114de28d17b7113a2c0cee9a37c *pokegold_spaceworld.gb
2eadbed83b775c097ff79e5128d1184f *pokegold_debug_spaceworld.gb
c52a677c35f15320d5b495e14809f00d *pokesilver_spaceworld.gb
fa65d3759bb17c489de171a598ba4913 *pokesilver_debug_spaceworld.gb

111
shim.sym
View File

@ -1,111 +0,0 @@
; ROM0
00:0884 UpdateJoypad
00:0d1a LoadFontExtra
00:0d0a LoadFont
00:0E2A ClearTileMap
00:0e3d DrawTextBox
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
00:1FCC ClearWindowData.bytefill
00:20ff RunMapScript
00:232c LoadMapWarp
00:23e5 OverworldFadeIn
00:3270 Random
00:3429 AddAMulBC
00:3621 WaitBGMap
00:362B SetPalettes
00:3634 ClearPalettes
00:363C GetMemSGBLayout
00:363E GetSGBLayout
00:3648 SetHPPal
00:3655 SetHPPal.done
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 ; What the f*** is this???
01:53cc MainMenu
02:4856 DecompTownMapTilemap
02:48da DecompTownMapTilemap.tilemap ; compressed
02:4f32 PokegearRadioGfx
02:4c7c DrawMap
02:4dc2 TownMapGfx
02:5695 CheckSGB ; ?
03:4791 DebugWarp
03:479f DebugWarp.Destinations
04:5677 DoPlayerMovement
0e:4b78 LoadTrainerClassName
0e:4ba0 LoadTrainerClassName.got_name
0e:4ba9 LoadTrainerClass
10:40A6 ShowPokedexMenu
23:4349 OverworldFadeOut
23:60cc MenuMonIconGfx
30:4000 OverworldSpriteGfx
3A:4D9D _PlayCryHeader
3A:4E22 _PlaySFX
3A:4F11 LoadChannel
3A:4F6C LoadMusicByte
3A:52C7 Music
3f:64ce MonsterTest
3f:654e PicTest
3f:6750 PicTestMenu
3f:6755 PicTestMenu.loop
;00:BFFF sWindowStackTop
00:c5e8 wMapScriptNumber
00:ca22 wTrainerClass
00:CBF2 wWindowData
00:CBF2 wWindowStackPointer
00:CC02 wMenuDataHeader
00:CC12 wMenuData2
00:CC22 wMenuData3
00:cdbe wTargetMapUnk
00:cdbf wTargetMapGroup
00:cdc0 wTargetMapId
00:CE62 wTextBoxFlags
00:ce67 wPlayerName
01:d165 wTMCounts
01:d19e wItems
01:d258 wRivalName
01:D264 wPlayerBikeSurfState
01:d656 wMapGroup
01:d657 wMapId
01:d66a wMapScriptPtr
01:D7D2 wPartyMonOT
01:DA3B wUnk_DA3B ; In final, $DE7D in NamesPointers (6th entry)

179
shim_gold.sym Normal file
View File

@ -0,0 +1,179 @@
00:0884 UpdateJoypad
00:0D0A LoadFont
00:0D1A LoadFontExtra
00:0E2A ClearTileMap
00:0E3D DrawTextBox
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
00:1FCC ClearWindowData.bytefill
00:20E1 RunMapScript
00:230E LoadMapWarp
00:23C7 OverworldFadeIn
00:3234 Random
00:3621 WaitBGMap
00:362B SetPalettes
00:3634 ClearPalettes
00:363C GetMemSGBLayout
00:363E 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
01:4031 Function_4031
01:53CC MainMenu
01:5D27 Function_5d27
01:6442 Function_6445
01:66AE Function_66b1
01:6710 Function_6713
02:4786 Function_8786
02:4856 DecompTownMapTilemap
02:48DA DecompTownMapTilemap.tilemap
02:4C7C DrawMap
02:4DC2 TownMapGfx
02:4F32 PokegearRadioGfx
02:528B Function_928b
02:5695 CheckSGB
02:5695 Function_9695
03:4791 DebugWarp
03:479F DebugWarp.Destinations
03:4D1B Function_cd33
03:4D57 Function_cd6f
03:4DCB Function_cde3
03:4DCB Function_cde3_2
03:4DCB Function_cde3_3
03:4DE1 Function_cdf9
03:4DF8 Function_ce10
03:4DF8 Function_ce10_2
03:4E24 Function_ce3c
03:4E64 Function_ce7c
03:586E Function_d886
03:5A10 Function_da28
03:5A37 Function_da4f
03:5AB0 Function_dac8
03:5BFE Function_dc16
03:5CE4 Function_dcfc
03:5D44 Function_dd5c
03:5E61 Function_de79
03:5F65 Function_df7d
03:5F79 Function_df91
04:528F Function_1128f
04:52C1 Function_112c1
04:5677 DoPlayerMovement
04:640B Function_1240b
05:43E0 Function_143e0
05:457A Function_1457a
05:45B8 Function_145b8
05:45DE Function_145de
05:46DC Function_146dc
0A:4C98 Function_28c98
0A:4D6E Function_28d6e
0A:4DA4 Function_28da4
0B:5663 Function_2d663
0E:4B78 LoadTrainerClassName
0E:4BA0 LoadTrainerClassName.got_name
0E:4BA9 LoadTrainerClass
0F:508C Function_3d08c
0F:55CE Function_3d5ce
0F:567C Function_3d67c
0F:61A4 Function_3e1a4
0F:6874 Function_3e874
0F:691E Function_3e91e
0F:6963 Function_3e963
0F:6F19 Function_3ef19
0F:7019 Function_3f019
0F:704A Function_3f04a
0F:7068 Function_3f068
10:4000 Function_40000
10:40A6 ShowPokedexMenu
10:4AC7 Function_40ac7
10:4B5C Function_40b5c
10:5FA1 Function_41fa1
10:61F8 Function_421f8
10:6252 Function_42252
14:4000 Function_50000
14:4073 Function_50073
14:40A0 Function_500a0
14:40C6 Function_500c6
14:4244 Function_50244
14:4248 Function_50248
14:42B5 Function_502b5
14:469E Function_5069e
14:46D4 Function_506d4
14:4771 Function_50771
14:4774 Function_50774
14:481F Function_5081f
14:48C4 Function_508c4
14:4B92 Function_50b92
14:4BCD Function_50bcd
14:4BFE Function_50bfe
14:4ED9 Function_50ed9
23:4349 OverworldFadeOut
23:44BE Function_8c4be
23:4940 Function_8c940
23:49C6 Function_8c9c6
23:60CC MenuMonIconGfx
30:4000 OverworldSpriteGfx
32:4000 Function_c8000
32:76FF Function_cb6ff
32:7710 Function_cb710
32:7733 Function_cb733
33:4000 Function_cc000
33:4000 Function_cc000_2
33:4001 Function_cc001
3A:4D9D _PlayCryHeader
3A:4E22 _PlaySFX
3A:4F11 LoadChannel
3A:4F6C LoadMusicByte
3A:52C7 Music
3F:5B66 Function_fdb66
3F:64CE MonsterTest
3F:654E PicTest
3F:6750 PicTestMenu
3F:6755 PicTestMenu.loop
00:C5E8 wMapScriptNumber
00:CA22 wTrainerClass
00:CBF2 wWindowData
00:CBF2 wWindowStackPointer
00:CC02 wMenuDataHeader
00:CC12 wMenuData2
00:CC22 wMenuData3
00:CDBE wTargetMapUnk
00:CDBF wTargetMapGroup
00:CDC0 wTargetMapId
00:CE62 wTextBoxFlags
00:CE67 wPlayerName
01:D165 wTMCounts
01:D19E wItems
01:D258 wRivalName
01:D264 wPlayerBikeSurfState
01:D656 wMapGroup
01:D657 wMapId
01:D66A wMapScriptPtr
01:D7D2 wPartyMonOT
01:DA3B wUnk_DA3B

179
shim_gold_debug.sym Normal file
View File

@ -0,0 +1,179 @@
00:0884 UpdateJoypad
00:0D0A LoadFont
00:0D1A LoadFontExtra
00:0E2A ClearTileMap
00:0E3D DrawTextBox
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
00:1FCC ClearWindowData.bytefill
00:20FF RunMapScript
00:232C LoadMapWarp
00:23E5 OverworldFadeIn
00:3270 Random
00:3621 WaitBGMap
00:362B SetPalettes
00:3634 ClearPalettes
00:363C GetMemSGBLayout
00:363E GetSGBLayout
00:3648 SetHPPal
00:3655 SetHPPal.done
00:366C 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
01:4031 Function_4031
01:53CC MainMenu
01:5D27 Function_5d27
01:6445 Function_6445
01:66B1 Function_66b1
01:6713 Function_6713
02:4786 Function_8786
02:4856 DecompTownMapTilemap
02:48DA DecompTownMapTilemap.tilemap
02:4C7C DrawMap
02:4DC2 TownMapGfx
02:4F32 PokegearRadioGfx
02:528B Function_928b
02:5695 CheckSGB
02:5695 Function_9695
03:4791 DebugWarp
03:479F DebugWarp.Destinations
03:4D33 Function_cd33
03:4D6F Function_cd6f
03:4DE3 Function_cde3
03:4DE3 Function_cde3_2
03:4DE3 Function_cde3_3
03:4DF9 Function_cdf9
03:4E10 Function_ce10
03:4E10 Function_ce10_2
03:4E3C Function_ce3c
03:4E7C Function_ce7c
03:5886 Function_d886
03:5A28 Function_da28
03:5A4F Function_da4f
03:5AC8 Function_dac8
03:5C16 Function_dc16
03:5CFC Function_dcfc
03:5D5C Function_dd5c
03:5E79 Function_de79
03:5F7D Function_df7d
03:5F91 Function_df91
04:528F Function_1128f
04:52C1 Function_112c1
04:5677 DoPlayerMovement
04:640B Function_1240b
05:43E0 Function_143e0
05:457A Function_1457a
05:45B8 Function_145b8
05:45DE Function_145de
05:46DC Function_146dc
0A:4C98 Function_28c98
0A:4D6E Function_28d6e
0A:4DA4 Function_28da4
0B:5663 Function_2d663
0E:4B78 LoadTrainerClassName
0E:4BA0 LoadTrainerClassName.got_name
0E:4BA9 LoadTrainerClass
0F:508C Function_3d08c
0F:55CE Function_3d5ce
0F:567C Function_3d67c
0F:61A4 Function_3e1a4
0F:6874 Function_3e874
0F:691E Function_3e91e
0F:6963 Function_3e963
0F:6F19 Function_3ef19
0F:7019 Function_3f019
0F:704A Function_3f04a
0F:7068 Function_3f068
10:4000 Function_40000
10:40A6 ShowPokedexMenu
10:4AC7 Function_40ac7
10:4B5C Function_40b5c
10:5FA1 Function_41fa1
10:61F8 Function_421f8
10:6252 Function_42252
14:4000 Function_50000
14:4073 Function_50073
14:40A0 Function_500a0
14:40C6 Function_500c6
14:4244 Function_50244
14:4248 Function_50248
14:42B5 Function_502b5
14:469E Function_5069e
14:46D4 Function_506d4
14:4771 Function_50771
14:4774 Function_50774
14:481F Function_5081f
14:48C4 Function_508c4
14:4B92 Function_50b92
14:4BCD Function_50bcd
14:4BFE Function_50bfe
14:4ED9 Function_50ed9
23:4349 OverworldFadeOut
23:44BE Function_8c4be
23:4940 Function_8c940
23:49C6 Function_8c9c6
23:60CC MenuMonIconGfx
30:4000 OverworldSpriteGfx
32:4000 Function_c8000
32:76FF Function_cb6ff
32:7710 Function_cb710
32:7733 Function_cb733
33:4000 Function_cc000
33:4000 Function_cc000_2
33:4001 Function_cc001
3A:4D9D _PlayCryHeader
3A:4E22 _PlaySFX
3A:4F11 LoadChannel
3A:4F6C LoadMusicByte
3A:52C7 Music
3F:5B66 Function_fdb66
3F:64CE MonsterTest
3F:654E PicTest
3F:6750 PicTestMenu
3F:6755 PicTestMenu.loop
00:C5E8 wMapScriptNumber
00:CA22 wTrainerClass
00:CBF2 wWindowData
00:CBF2 wWindowStackPointer
00:CC02 wMenuDataHeader
00:CC12 wMenuData2
00:CC22 wMenuData3
00:CDBE wTargetMapUnk
00:CDBF wTargetMapGroup
00:CDC0 wTargetMapId
00:CE62 wTextBoxFlags
00:CE67 wPlayerName
01:D165 wTMCounts
01:D19E wItems
01:D258 wRivalName
01:D264 wPlayerBikeSurfState
01:D656 wMapGroup
01:D657 wMapId
01:D66A wMapScriptPtr
01:D7D2 wPartyMonOT
01:DA3B wUnk_DA3B

179
shim_silver.sym Normal file
View File

@ -0,0 +1,179 @@
00:0884 UpdateJoypad
00:0D0A LoadFont
00:0D1A LoadFontExtra
00:0E2A ClearTileMap
00:0E3D DrawTextBox
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
00:1FCC ClearWindowData.bytefill
00:20E1 RunMapScript
00:230E LoadMapWarp
00:23C7 OverworldFadeIn
00:3234 Random
00:3621 WaitBGMap
00:362B SetPalettes
00:3634 ClearPalettes
00:363C GetMemSGBLayout
00:363E 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
01:4031 Function_4031
01:53CC MainMenu
01:5D27 Function_5d27
01:6442 Function_6445
01:66AE Function_66b1
01:6710 Function_6713
02:4786 Function_8786
02:4856 DecompTownMapTilemap
02:48DA DecompTownMapTilemap.tilemap
02:4C7C DrawMap
02:4DC2 TownMapGfx
02:4F32 PokegearRadioGfx
02:528B Function_928b
02:5695 CheckSGB
02:5695 Function_9695
03:4791 DebugWarp
03:479F DebugWarp.Destinations
03:4D1B Function_cd33
03:4D57 Function_cd6f
03:4DCB Function_cde3
03:4DCB Function_cde3_2
03:4DCB Function_cde3_3
03:4DE1 Function_cdf9
03:4DF8 Function_ce10
03:4DF8 Function_ce10_2
03:4E24 Function_ce3c
03:4E64 Function_ce7c
03:586E Function_d886
03:5A10 Function_da28
03:5A37 Function_da4f
03:5AB0 Function_dac8
03:5BFE Function_dc16
03:5CE4 Function_dcfc
03:5D44 Function_dd5c
03:5E61 Function_de79
03:5F65 Function_df7d
03:5F79 Function_df91
04:528F Function_1128f
04:52C1 Function_112c1
04:5677 DoPlayerMovement
04:640B Function_1240b
05:43E0 Function_143e0
05:457A Function_1457a
05:45B8 Function_145b8
05:45DE Function_145de
05:46DC Function_146dc
0A:4C98 Function_28c98
0A:4D6E Function_28d6e
0A:4DA4 Function_28da4
0B:5663 Function_2d663
0E:4B78 LoadTrainerClassName
0E:4BA0 LoadTrainerClassName.got_name
0E:4BA9 LoadTrainerClass
0F:508C Function_3d08c
0F:55CE Function_3d5ce
0F:567C Function_3d67c
0F:61A4 Function_3e1a4
0F:6874 Function_3e874
0F:691E Function_3e91e
0F:6963 Function_3e963
0F:6F19 Function_3ef19
0F:7019 Function_3f019
0F:704A Function_3f04a
0F:7068 Function_3f068
10:4000 Function_40000
10:40A6 ShowPokedexMenu
10:4AC7 Function_40ac7
10:4B5C Function_40b5c
10:5FA1 Function_41fa1
10:61F8 Function_421f8
10:6252 Function_42252
14:4000 Function_50000
14:4073 Function_50073
14:40A0 Function_500a0
14:40C6 Function_500c6
14:4244 Function_50244
14:4248 Function_50248
14:42B5 Function_502b5
14:469E Function_5069e
14:46D4 Function_506d4
14:4771 Function_50771
14:4774 Function_50774
14:481F Function_5081f
14:48C4 Function_508c4
14:4B92 Function_50b92
14:4BCD Function_50bcd
14:4BFE Function_50bfe
14:4ED9 Function_50ed9
23:4349 OverworldFadeOut
23:44BE Function_8c4be
23:4940 Function_8c940
23:49C6 Function_8c9c6
23:60CC MenuMonIconGfx
30:4000 OverworldSpriteGfx
32:4000 Function_c8000
32:76FF Function_cb6ff
32:7710 Function_cb710
32:7733 Function_cb733
33:4000 Function_cc000
33:4000 Function_cc000_2
33:4001 Function_cc001
3A:4D9D _PlayCryHeader
3A:4E22 _PlaySFX
3A:4F11 LoadChannel
3A:4F6C LoadMusicByte
3A:52C7 Music
3F:5B66 Function_fdb66
3F:64CE MonsterTest
3F:654E PicTest
3F:6750 PicTestMenu
3F:6755 PicTestMenu.loop
00:C5E8 wMapScriptNumber
00:CA22 wTrainerClass
00:CBF2 wWindowData
00:CBF2 wWindowStackPointer
00:CC02 wMenuDataHeader
00:CC12 wMenuData2
00:CC22 wMenuData3
00:CDBE wTargetMapUnk
00:CDBF wTargetMapGroup
00:CDC0 wTargetMapId
00:CE62 wTextBoxFlags
00:CE67 wPlayerName
01:D165 wTMCounts
01:D19E wItems
01:D258 wRivalName
01:D264 wPlayerBikeSurfState
01:D656 wMapGroup
01:D657 wMapId
01:D66A wMapScriptPtr
01:D7D2 wPartyMonOT
01:DA3B wUnk_DA3B

179
shim_silver_debug.sym Normal file
View File

@ -0,0 +1,179 @@
00:0884 UpdateJoypad
00:0D0A LoadFont
00:0D1A LoadFontExtra
00:0E2A ClearTileMap
00:0E3D DrawTextBox
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
00:1FCC ClearWindowData.bytefill
00:20FF RunMapScript
00:232C LoadMapWarp
00:23E5 OverworldFadeIn
00:3270 Random
00:3621 WaitBGMap
00:362B SetPalettes
00:3634 ClearPalettes
00:363C GetMemSGBLayout
00:363E GetSGBLayout
00:3648 SetHPPal
00:3655 SetHPPal.done
00:366C 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
01:4031 Function_4031
01:53CC MainMenu
01:5D27 Function_5d27
01:6445 Function_6445
01:66B1 Function_66b1
01:6713 Function_6713
02:4786 Function_8786
02:4856 DecompTownMapTilemap
02:48DA DecompTownMapTilemap.tilemap
02:4C7C DrawMap
02:4DC2 TownMapGfx
02:4F32 PokegearRadioGfx
02:528B Function_928b
02:5695 CheckSGB
02:5695 Function_9695
03:4791 DebugWarp
03:479F DebugWarp.Destinations
03:4D33 Function_cd33
03:4D6F Function_cd6f
03:4DE3 Function_cde3
03:4DE3 Function_cde3_2
03:4DE3 Function_cde3_3
03:4DF9 Function_cdf9
03:4E10 Function_ce10
03:4E10 Function_ce10_2
03:4E3C Function_ce3c
03:4E7C Function_ce7c
03:5886 Function_d886
03:5A28 Function_da28
03:5A4F Function_da4f
03:5AC8 Function_dac8
03:5C16 Function_dc16
03:5CFC Function_dcfc
03:5D5C Function_dd5c
03:5E79 Function_de79
03:5F7D Function_df7d
03:5F91 Function_df91
04:528F Function_1128f
04:52C1 Function_112c1
04:5677 DoPlayerMovement
04:640B Function_1240b
05:43E0 Function_143e0
05:457A Function_1457a
05:45B8 Function_145b8
05:45DE Function_145de
05:46DC Function_146dc
0A:4C98 Function_28c98
0A:4D6E Function_28d6e
0A:4DA4 Function_28da4
0B:5663 Function_2d663
0E:4B78 LoadTrainerClassName
0E:4BA0 LoadTrainerClassName.got_name
0E:4BA9 LoadTrainerClass
0F:508C Function_3d08c
0F:55CE Function_3d5ce
0F:567C Function_3d67c
0F:61A4 Function_3e1a4
0F:6874 Function_3e874
0F:691E Function_3e91e
0F:6963 Function_3e963
0F:6F19 Function_3ef19
0F:7019 Function_3f019
0F:704A Function_3f04a
0F:7068 Function_3f068
10:4000 Function_40000
10:40A6 ShowPokedexMenu
10:4AC7 Function_40ac7
10:4B5C Function_40b5c
10:5FA1 Function_41fa1
10:61F8 Function_421f8
10:6252 Function_42252
14:4000 Function_50000
14:4073 Function_50073
14:40A0 Function_500a0
14:40C6 Function_500c6
14:4244 Function_50244
14:4248 Function_50248
14:42B5 Function_502b5
14:469E Function_5069e
14:46D4 Function_506d4
14:4771 Function_50771
14:4774 Function_50774
14:481F Function_5081f
14:48C4 Function_508c4
14:4B92 Function_50b92
14:4BCD Function_50bcd
14:4BFE Function_50bfe
14:4ED9 Function_50ed9
23:4349 OverworldFadeOut
23:44BE Function_8c4be
23:4940 Function_8c940
23:49C6 Function_8c9c6
23:60CC MenuMonIconGfx
30:4000 OverworldSpriteGfx
32:4000 Function_c8000
32:76FF Function_cb6ff
32:7710 Function_cb710
32:7733 Function_cb733
33:4000 Function_cc000
33:4000 Function_cc000_2
33:4001 Function_cc001
3A:4D9D _PlayCryHeader
3A:4E22 _PlaySFX
3A:4F11 LoadChannel
3A:4F6C LoadMusicByte
3A:52C7 Music
3F:5B66 Function_fdb66
3F:64CE MonsterTest
3F:654E PicTest
3F:6750 PicTestMenu
3F:6755 PicTestMenu.loop
00:C5E8 wMapScriptNumber
00:CA22 wTrainerClass
00:CBF2 wWindowData
00:CBF2 wWindowStackPointer
00:CC02 wMenuDataHeader
00:CC12 wMenuData2
00:CC22 wMenuData3
00:CDBE wTargetMapUnk
00:CDBF wTargetMapGroup
00:CDC0 wTargetMapId
00:CE62 wTextBoxFlags
00:CE67 wPlayerName
01:D165 wTMCounts
01:D19E wItems
01:D258 wRivalName
01:D264 wPlayerBikeSurfState
01:D656 wMapGroup
01:D657 wMapId
01:D66A wMapScriptPtr
01:D7D2 wPartyMonOT
01:DA3B wUnk_DA3B

View File

@ -4,7 +4,8 @@ CFLAGS := -O3 -std=c99 -Wall -Wextra
tools := \
pkmncompress \
gfx
gfx \
make_shim
all: $(tools)

163
tools/make_shim.c Normal file
View File

@ -0,0 +1,163 @@
#include <stdio.h>
#include <getopt.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
struct Section {
unsigned short end;
bool invalid;
char * name;
bool banked;
};
typedef struct Section section_t;
// These functions are like strspn and strcspn, but from the right of the string rather than the left.
size_t strrspn(const char *s1, const char *s2) {
const char * _s1 = s1;
const char * _s2;
while (*_s1++);
_s1--;
while (_s1 > s1) {
for (_s2 = s2; *_s2; _s2++) {
if (_s1[-1] == *_s2) {
break;
}
}
if (*_s2 == 0)
break;
_s1--;
}
return _s1 - s1;
}
size_t strrcspn(const char *s1, const char *s2) {
const char * _s1 = s1;
const char * _s2;
while (*_s1++);
_s1--;
while (_s1 > s1) {
for (_s2 = s2; *_s2; _s2++) {
if (_s1[-1] == *_s2)
break;
}
if (*_s2)
break;
_s1--;
}
return _s1 - s1;
}
#define RIP(errmsg) { \
errno = EIO; \
perror(errmsg); \
if (file) fclose(file); \
if (line) free(line); \
return 1; \
}
int main(int argc, char * argv[]) {
int ch;
size_t lsize = 0;
char * line = NULL;
section_t section_list[] = {
{0x4000, false, "ROM0", false},
{0x8000, false, "ROMX", true},
{0xA000, false, "VRAM", true},
{0xC000, false, "SRAM", true},
{0xD000, false, "WRAM0", false},
{0xE000, false, "WRAMX", true},
{0xFE00, true, "Echo RAM", false},
{0xFEA0, false, "OAM", false},
{0xFF80, true, "FEXX / IO", false},
{0xFFFF, false, "HRAM", false},
{}
};
while ((ch = getopt(argc, argv, "wdt")) != -1) {
switch (ch) {
case 'w':
case 'd':
section_list[4].end = 0xE000;
break;
case 't':
section_list[0].end = 0x8000;
break;
}
}
for (int arg_idx = optind; arg_idx < argc; arg_idx++) {
FILE * file = fopen(argv[arg_idx], "r");
if (file == NULL)
RIP("file io");
while (getline(&line, &lsize, file) > 0) {
unsigned short bank = 0;
unsigned short pointer = 0;
char * symbol = NULL;
char * end;
char * addr_p;
// line = line.split(";")[0].strip()
line += strspn(line, " \t\n");
end = strchr(line, ';');
if (end) *end = 0;
line[strrspn(line, " \t\n")] = 0;
if (!*line)
continue;
// Get the bank, address, and symbol
end = line + strcspn(line, " \t\n");
symbol = end + strspn(end, " \t\n");
if (!*symbol)
RIP("parse");
*end = 0;
addr_p = strchr(line, ':');
if (!addr_p)
RIP("parse");
*addr_p++ = 0;
pointer = strtoul(addr_p, &end, 16);
if (pointer == 0 && end == addr_p)
RIP("parse");
bank = strtoul(line, &end, 16);
if (bank == 0 && end == line)
RIP("parse");
// Main loop
const char * section = NULL;
section_t * section_type;
for (section_type = section_list; section_type->end; section_type++) {
if (pointer < section_type->end) {
if (section_type->invalid) {
fprintf(stderr, "Warning: cannot shim '%s' in section type '%s'\n", symbol, section_type->name);
} else {
section = section_type->name;
if (!section_type->banked)
bank = 0;
}
break;
}
}
if (section == NULL)
// Found section, but cannot shim it
continue;
printf("SECTION \"Shim for %s\", %s[$%04X]", symbol, section, pointer);
if (bank)
printf(", BANK[$%04X]", bank);
printf("\n%s::\n\n", symbol);
fflush(stdout);
}
fclose(file);
}
free(line);
return 0;
}

View File

@ -1,60 +1,40 @@
#!/usr/bin/env python
from __future__ import print_function
from sys import argv, stderr, exit
import argparse
from sys import stderr
from collections import OrderedDict, namedtuple
Section = namedtuple('Section', ('end', 'invalud', 'banked'))
section_list = OrderedDict(
ROM0=Section(0x4000, False, False),
ROMX=Section(0x8000, False, True),
VRAM=Section(0xA000, False, True),
SRAM=Section(0xC000, False, True),
WRAM0=Section(0xD000, False, False),
WRAMX=Section(0xE000, False, True),
EchoRAM=Section(0xFE00, True, False),
OAM=Section(0xFEA0, False, False),
IO=Section(0xFF80, True, False),
HRAM=Section(0xFFFF, False, False)
)
parser = argparse.ArgumentParser()
parser.add_argument('files', nargs='+', type=argparse.FileType())
parser.add_argument('-w', action='store_true')
parser.add_argument('-d', action='store_true')
parser.add_argument('-t', action='store_true')
args = parser.parse_args()
section_list = [
{'end': 0x4000, 'invalid': False, 'name': "ROM0", 'banked': False},
{'end': 0x8000, 'invalid': False, 'name': "ROMX", 'banked': True},
{'end': 0xA000, 'invalid': False, 'name': "VRAM", 'banked': True},
{'end': 0xC000, 'invalid': False, 'name': "SRAM", 'banked': True},
{'end': 0xD000, 'invalid': False, 'name': "WRAM0", 'banked': False},
{'end': 0xE000, 'invalid': False, 'name': "WRAMX", 'banked': True},
{'end': 0xFE00, 'invalid': True , 'name': "Echo RAM"},
{'end': 0xFEA0, 'invalid': False, 'name': "OAM", 'banked': False},
{'end': 0xFF80, 'invalid': True , 'name': "FEXX / IO"},
{'end': 0xFFFF, 'invalid': False, 'name': "HRAM", 'banked': False}
]
if args.w or args.d:
section_list['WRAM0'].end = 0xE000
if args.t:
section_list['ROM0'].end = 0x8000
argv_id = 1
file_list = []
options = []
while argv_id < len(argv):
arg = argv[argv_id]
if arg[0] != '-':
file_list.append(arg)
argv_id += 1
continue
# An empty '--' stops parsing arguments
if arg == '--':
argv_id += 1
break
if arg[1] == '-':
options.append(option[2:])
elif arg[1] != '-':
for option in arg[1:]:
options.append(option)
argv_id += 1
# Add remaining files to the list
for arg in argv[argv_id:]:
file_list.append(arg)
if 'w' in options or 'd' in options:
section_list[4]['end'] = 0xE000
if 't' in options:
section_list[0]['end'] = 0x8000
for file_name in file_list:
for file_name in args.files:
for line in open(file_name, "rt"):
# Strip out the comment
@ -68,19 +48,19 @@ for file_name in file_list:
bank, pointer = address.split(":")
bank = int(bank, 16)
pointer = int(pointer, 16)
except:
except ValueError:
print("Error: Cannot parse line: %s" % line, file=stderr)
exit(1)
raise from None
section = None
for section_type in section_list:
if pointer < section_type['end']:
if section_type['invalid']:
for name, section_type in section_list.items():
if pointer < section_type.end:
if section_type.invalid:
print("Warning: cannot shim '%s' in section type '%s'" % (symbol, section_type['name']), file=stderr)
section = False
else:
section = section_type['name']
if not section_type['banked']:
section = name
if not section_type.banked:
bank = None
break
else:

View File

@ -94,6 +94,11 @@ wVBCopyDoubleSize:: ds 1
wVBCopyDoubleSrc:: ds 2
wVBCopyDoubleDst:: ds 2
SECTION "CBD2", WRAM0[$CBD2]
wcbd2:: ; cbd2
ds $14
SECTION "CC33", WRAM0[$CC33] ; Please merge when more is disassembled
wVBlankOccurred: db