mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-12-21 10:01:36 +13:00
Merge branch 'master' of https://github.com/pret/pokered
This commit is contained in:
commit
772520c2c2
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
|
|
@ -16,7 +16,7 @@ jobs:
|
|||
uses: actions/checkout@master
|
||||
with:
|
||||
path: rgbds
|
||||
ref: v0.5.2
|
||||
ref: v0.6.1
|
||||
repository: gbdev/rgbds
|
||||
|
||||
- name: Install rgbds
|
||||
|
|
|
|||
22
INSTALL.md
22
INSTALL.md
|
|
@ -42,9 +42,9 @@ Run setup and leave the default settings. At the "**Select Packages**" step, cho
|
|||
|
||||
Double click on the text that says "**Skip**" next to each package to select the most recent version to install.
|
||||
|
||||
Then follow the [**rgbds** install instructions](https://rgbds.gbdev.io/install#pre-built) for Windows with Cygwin to install **rgbds 0.5.2**.
|
||||
Then follow the [**rgbds** install instructions](https://rgbds.gbdev.io/install#pre-built) for Windows with Cygwin to install **rgbds 0.6.1**.
|
||||
|
||||
**Note:** If you already have an older rgbds, you will need to update to 0.5.2. Ignore this if you have never installed rgbds before. If a version newer than 0.5.2 does not work, try downloading 0.5.2.
|
||||
**Note:** If you already have an installed rgbds older than 0.6.0, you will need to update to 0.6.0 or 0.6.1. Ignore this if you have never installed rgbds before. If a version newer than 0.6.1 does not work, try downloading 0.6.1.
|
||||
|
||||
Now open the **Cygwin terminal** and enter the following commands.
|
||||
|
||||
|
|
@ -67,7 +67,7 @@ Install [**Homebrew**](https://brew.sh/). Follow the official instructions.
|
|||
|
||||
Open **Terminal** and prepare to enter commands.
|
||||
|
||||
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#pre-built) for macOS to install **rgbds 0.5.2**.
|
||||
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#pre-built) for macOS to install **rgbds 0.6.1**.
|
||||
|
||||
Now you're ready to [build **pokered**](#build-pokered).
|
||||
|
||||
|
|
@ -84,7 +84,7 @@ To install the software required for **pokered**:
|
|||
sudo apt-get install make gcc git
|
||||
```
|
||||
|
||||
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.5.2** from source.
|
||||
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.6.1** from source.
|
||||
|
||||
### OpenSUSE
|
||||
|
||||
|
|
@ -94,7 +94,7 @@ To install the software required for **pokered**:
|
|||
sudo zypper install make gcc git
|
||||
```
|
||||
|
||||
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.5.2** from source.
|
||||
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.6.1** from source.
|
||||
|
||||
### Arch Linux
|
||||
|
||||
|
|
@ -104,9 +104,9 @@ To install the software required for **pokered**:
|
|||
sudo pacman -S make gcc git
|
||||
```
|
||||
|
||||
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#pre-built) for Arch Linux to install **rgbds 0.5.2**.
|
||||
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#pre-built) for Arch Linux to install **rgbds 0.6.1**.
|
||||
|
||||
If you want to compile and install **rgbds** yourself instead, then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.5.2** from source.
|
||||
If you want to compile and install **rgbds** yourself instead, then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.6.1** from source.
|
||||
|
||||
### Termux
|
||||
|
||||
|
|
@ -122,7 +122,7 @@ To install **rgbds**:
|
|||
sudo apt install rgbds
|
||||
```
|
||||
|
||||
If you want to compile and install **rgbds** yourself instead, then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.5.2** from source.
|
||||
If you want to compile and install **rgbds** yourself instead, then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.6.1** from source.
|
||||
|
||||
### Other distros
|
||||
|
||||
|
|
@ -133,7 +133,7 @@ If your distro is not listed here, try to find the required software in its repo
|
|||
- `git`
|
||||
- `rgbds`
|
||||
|
||||
If `rgbds` is not available, you'll need to follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.5.2** from source.
|
||||
If `rgbds` is not available, you'll need to follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.6.1** from source.
|
||||
|
||||
Now you're ready to [build **pokered**](#build-pokered).
|
||||
|
||||
|
|
@ -155,8 +155,8 @@ make
|
|||
|
||||
### Build with a local rgbds version
|
||||
|
||||
If you have different projects that require different versions of `rgbds`, it might not be convenient to install rgbds 0.5.2 globally. Instead, you can put its files in a directory within pokered, such as `pokered/rgbds-0.5.2/`. Then specify it when you run `make`:
|
||||
If you have different projects that require different versions of `rgbds`, it might not be convenient to install rgbds 0.6.1 globally. Instead, you can put its files in a directory within pokered, such as `pokered/rgbds-0.6.1/`. Then specify it when you run `make`:
|
||||
|
||||
```bash
|
||||
make RGBDS=rgbds-0.5.2/
|
||||
make RGBDS=rgbds-0.6.1/
|
||||
```
|
||||
|
|
|
|||
35
Makefile
35
Makefile
|
|
@ -69,7 +69,7 @@ tools:
|
|||
$(MAKE) -C tools/
|
||||
|
||||
|
||||
RGBASMFLAGS = -h -L -Weverything -Wnumeric-string=2 -Wtruncation=1
|
||||
RGBASMFLAGS = -hL -Q8 -P includes.asm -Weverything -Wnumeric-string=2 -Wtruncation=1
|
||||
# Create a sym/map for debug purposes if `make` run with `DEBUG=1`
|
||||
ifeq ($(DEBUG),1)
|
||||
RGBASMFLAGS += -E
|
||||
|
|
@ -83,26 +83,27 @@ $(kep_obj): RGBASMFLAGS += -D _KEP -D _DEBUG
|
|||
rgbdscheck.o: rgbdscheck.asm
|
||||
$(RGBASM) -o $@ $<
|
||||
|
||||
# The dep rules have to be explicit or else missing files won't be reported.
|
||||
# As a side effect, they're evaluated immediately instead of when the rule is invoked.
|
||||
# It doesn't look like $(shell) can be deferred so there might not be a better way.
|
||||
define DEP
|
||||
$1: $2 $$(shell tools/scan_includes $2) | rgbdscheck.o
|
||||
$$(RGBASM) $$(RGBASMFLAGS) -o $$@ $$<
|
||||
endef
|
||||
|
||||
# Build tools when building the rom.
|
||||
# This has to happen before the rules are processed, since that's when scan_includes is run.
|
||||
ifeq (,$(filter clean tidy tools,$(MAKECMDGOALS)))
|
||||
|
||||
$(info $(shell $(MAKE) -C tools))
|
||||
|
||||
# The dep rules have to be explicit or else missing files won't be reported.
|
||||
# As a side effect, they're evaluated immediately instead of when the rule is invoked.
|
||||
# It doesn't look like $(shell) can be deferred so there might not be a better way.
|
||||
preinclude_deps := includes.asm $(shell tools/scan_includes includes.asm)
|
||||
define DEP
|
||||
$1: $2 $$(shell tools/scan_includes $2) $(preinclude_deps) | rgbdscheck.o
|
||||
$$(RGBASM) $$(RGBASMFLAGS) -o $$@ $$<
|
||||
endef
|
||||
|
||||
# Dependencies for objects (drop _red and _blue from asm file basenames)
|
||||
$(foreach obj, $(kep_obj), $(eval $(call DEP,$(obj),$(obj:_kep.o=.asm))))
|
||||
|
||||
# Dependencies for VC files that need to run scan_includes
|
||||
%.constants.sym: %.constants.asm $(shell tools/scan_includes %.constants.asm) | rgbdscheck.o
|
||||
$(RGBASM) $< > $@
|
||||
%.constants.sym: %.constants.asm $(shell tools/scan_includes %.constants.asm) $(preinclude_deps) | rgbdscheck.o
|
||||
$(RGBASM) $(RGBASMFLAGS) $< > $@
|
||||
|
||||
endif
|
||||
|
||||
|
|
@ -121,13 +122,13 @@ kep_opt = -jsv -n 0 -k 01 -l 0x33 -m 0x13 -r 03 -t "KEP Hack"
|
|||
|
||||
### Misc file-specific graphics rules
|
||||
|
||||
gfx/battle/attack_anim_1.2bpp: tools/gfx += --trim-whitespace
|
||||
gfx/battle/attack_anim_2.2bpp: tools/gfx += --trim-whitespace
|
||||
gfx/battle/move_anim_0.2bpp: tools/gfx += --trim-whitespace
|
||||
gfx/battle/move_anim_1.2bpp: tools/gfx += --trim-whitespace
|
||||
|
||||
gfx/intro/red_nidorino_1.2bpp: rgbgfx += -h
|
||||
gfx/intro/red_nidorino_2.2bpp: rgbgfx += -h
|
||||
gfx/intro/red_nidorino_3.2bpp: rgbgfx += -h
|
||||
gfx/intro/gengar.2bpp: rgbgfx += -h
|
||||
gfx/intro/red_nidorino_1.2bpp: rgbgfx += -Z
|
||||
gfx/intro/red_nidorino_2.2bpp: rgbgfx += -Z
|
||||
gfx/intro/red_nidorino_3.2bpp: rgbgfx += -Z
|
||||
gfx/intro/gengar.2bpp: rgbgfx += -Z
|
||||
gfx/intro/gengar.2bpp: tools/gfx += --remove-duplicates --preserve=0x19,0x76
|
||||
|
||||
gfx/credits/the_end.2bpp: tools/gfx += --interleave --png=$<
|
||||
|
|
|
|||
|
|
@ -297,6 +297,8 @@ To set up the repository, see [**INSTALL.md**](INSTALL.md).
|
|||
|
||||
## See also
|
||||
|
||||
- [**Wiki**][wiki] (includes [tutorials][tutorials])
|
||||
- [**Symbols**][symbols]
|
||||
- **Discord:** [pret][discord]
|
||||
- **IRC:** [libera#pret][irc]
|
||||
|
||||
|
|
@ -319,6 +321,9 @@ Other disassembly projects:
|
|||
[pokeruby]: https://github.com/pret/pokeruby
|
||||
[pokefirered]: https://github.com/pret/pokefirered
|
||||
[pokeemerald]: https://github.com/pret/pokeemerald
|
||||
[wiki]: https://github.com/pret/pokered/wiki
|
||||
[tutorials]: https://github.com/pret/pokered/wiki/Tutorials
|
||||
[symbols]: https://github.com/pret/pokered/tree/symbols
|
||||
[discord]: https://discord.gg/d5dubZ3
|
||||
[irc]: https://web.libera.chat/?#pret
|
||||
[ci]: https://github.com/pret/pokered/actions
|
||||
|
|
|
|||
|
|
@ -1,6 +1,3 @@
|
|||
INCLUDE "constants.asm"
|
||||
|
||||
|
||||
SECTION "Sound Effect Headers 1", ROMX
|
||||
INCLUDE "audio/headers/sfxheaders1.asm"
|
||||
|
||||
|
|
|
|||
|
|
@ -746,7 +746,8 @@
|
|||
|
||||
; Indigo Plateau events
|
||||
const_next $8E0
|
||||
const ELITE4_EVENTS_START
|
||||
DEF INDIGO_PLATEAU_EVENTS_START EQU const_value
|
||||
const_skip
|
||||
const EVENT_BEAT_LORELEIS_ROOM_TRAINER_0
|
||||
const_skip 4
|
||||
const EVENT_AUTOWALKED_INTO_LORELEIS_ROOM
|
||||
|
|
@ -766,7 +767,8 @@
|
|||
const_skip
|
||||
const EVENT_BEAT_CHAMPION_RIVAL
|
||||
const_skip 5
|
||||
const ELITE4_CHAMPION_EVENTS_END
|
||||
const_skip
|
||||
DEF INDIGO_PLATEAU_EVENTS_END EQU const_value - 1
|
||||
|
||||
; Victory Road 1F events
|
||||
const_next $910
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
MACRO mapconst
|
||||
MACRO map_const
|
||||
const \1
|
||||
DEF \1_HEIGHT EQU \2
|
||||
DEF \1_WIDTH EQU \3
|
||||
DEF \1_WIDTH EQU \2
|
||||
DEF \1_HEIGHT EQU \3
|
||||
ENDM
|
||||
|
||||
; map ids
|
||||
|
|
@ -16,257 +16,257 @@ ENDM
|
|||
; Each map also has associated data in maps.asm.
|
||||
; Order: towns/cities, then routes, then indoor/dungeon maps
|
||||
const_def
|
||||
mapconst PALLET_TOWN, 9, 10 ; $00
|
||||
mapconst VIRIDIAN_CITY, 18, 20 ; $01
|
||||
mapconst PEWTER_CITY, 18, 20 ; $02
|
||||
mapconst CERULEAN_CITY, 18, 20 ; $03
|
||||
mapconst VERMILION_CITY, 18, 20 ; $04
|
||||
mapconst LAVENDER_TOWN, 9, 10 ; $05
|
||||
mapconst CELADON_CITY, 18, 25 ; $06
|
||||
mapconst CELADON_UNIVERSITY_OUTSIDE, 20, 21 ; $07
|
||||
mapconst FUCHSIA_CITY, 18, 20 ; $08
|
||||
mapconst SAFFRON_CITY, 18, 20 ; $0A
|
||||
mapconst CINNABAR_ISLAND, 15, 14 ; $0A
|
||||
mapconst INDIGO_PLATEAU, 9, 10 ; $0B
|
||||
mapconst CITRINE_CITY, 18, 20 ; $0C
|
||||
map_const PALLET_TOWN, 10, 9 ; $00
|
||||
map_const VIRIDIAN_CITY, 20, 18 ; $01
|
||||
map_const PEWTER_CITY, 20, 18 ; $02
|
||||
map_const CERULEAN_CITY, 20, 18 ; $03
|
||||
map_const VERMILION_CITY, 20, 18 ; $04
|
||||
map_const LAVENDER_TOWN, 10, 9 ; $05
|
||||
map_const CELADON_CITY, 25, 18 ; $06
|
||||
map_const CELADON_UNIVERSITY_OUTSIDE, 21, 20 ; $07
|
||||
map_const FUCHSIA_CITY, 20, 18 ; $08
|
||||
map_const SAFFRON_CITY, 20, 18 ; $0A
|
||||
map_const CINNABAR_ISLAND, 14, 15 ; $0A
|
||||
map_const INDIGO_PLATEAU, 10, 9 ; $0B
|
||||
map_const CITRINE_CITY, 20, 18 ; $0C
|
||||
DEF NUM_CITY_MAPS EQU const_value
|
||||
DEF FIRST_ROUTE_MAP EQU const_value
|
||||
mapconst ROUTE_1, 18, 10 ; $0D
|
||||
mapconst ROUTE_2, 36, 10 ; $0E
|
||||
mapconst ROUTE_3, 9, 35 ; $0F
|
||||
mapconst ROUTE_4, 9, 45 ; $10
|
||||
mapconst ROUTE_5, 18, 10 ; $11
|
||||
mapconst ROUTE_6, 18, 10 ; $12
|
||||
mapconst ROUTE_7, 9, 10 ; $13
|
||||
mapconst ROUTE_8, 9, 30 ; $14
|
||||
mapconst ROUTE_9, 13, 30 ; $15
|
||||
mapconst ROUTE_10, 40, 10 ; $16
|
||||
mapconst ROUTE_11, 9, 30 ; $17
|
||||
mapconst ROUTE_12, 54, 10 ; $18
|
||||
mapconst ROUTE_13, 9, 30 ; $19
|
||||
mapconst ROUTE_14, 27, 10 ; $1A
|
||||
mapconst ROUTE_15, 9, 30 ; $1B
|
||||
mapconst ROUTE_16, 9, 20 ; $1C
|
||||
mapconst ROUTE_17, 72, 10 ; $1D
|
||||
mapconst ROUTE_18, 9, 25 ; $1E
|
||||
mapconst ROUTE_19, 27, 10 ; $1F
|
||||
mapconst ROUTE_20, 15, 50 ; $20
|
||||
mapconst ROUTE_21, 45, 10 ; $21
|
||||
mapconst ROUTE_22, 9, 20 ; $22
|
||||
mapconst ROUTE_23, 72, 10 ; $23
|
||||
mapconst ROUTE_24, 18, 10 ; $24
|
||||
mapconst ROUTE_25, 9, 37 ; $25
|
||||
map_const ROUTE_1, 10, 18 ; $0D
|
||||
map_const ROUTE_2, 10, 36 ; $0E
|
||||
map_const ROUTE_3, 35, 9 ; $0F
|
||||
map_const ROUTE_4, 45, 9 ; $10
|
||||
map_const ROUTE_5, 10, 18 ; $11
|
||||
map_const ROUTE_6, 10, 18 ; $12
|
||||
map_const ROUTE_7, 10, 9 ; $13
|
||||
map_const ROUTE_8, 30, 9 ; $14
|
||||
map_const ROUTE_9, 30, 13 ; $15
|
||||
map_const ROUTE_10, 10, 40 ; $16
|
||||
map_const ROUTE_11, 30, 9 ; $17
|
||||
map_const ROUTE_12, 10, 54 ; $18
|
||||
map_const ROUTE_13, 30, 9 ; $19
|
||||
map_const ROUTE_14, 10, 27 ; $1A
|
||||
map_const ROUTE_15, 30, 9 ; $1B
|
||||
map_const ROUTE_16, 20, 9 ; $1C
|
||||
map_const ROUTE_17, 10, 72 ; $1D
|
||||
map_const ROUTE_18, 25, 9 ; $1E
|
||||
map_const ROUTE_19, 10, 27 ; $1F
|
||||
map_const ROUTE_20, 50, 15 ; $20
|
||||
map_const ROUTE_21, 10, 45 ; $21
|
||||
map_const ROUTE_22, 20, 9 ; $22
|
||||
map_const ROUTE_23, 10, 72 ; $23
|
||||
map_const ROUTE_24, 10, 18 ; $24
|
||||
map_const ROUTE_25, 37, 9 ; $25
|
||||
DEF FIRST_INDOOR_MAP EQU const_value
|
||||
mapconst REDS_HOUSE_1F, 4, 4 ; $26
|
||||
mapconst REDS_HOUSE_2F, 4, 4 ; $27
|
||||
mapconst BLUES_HOUSE, 4, 4 ; $28
|
||||
mapconst OAKS_LAB, 6, 7 ; $29
|
||||
mapconst VIRIDIAN_POKECENTER, 4, 7 ; $2A
|
||||
mapconst VIRIDIAN_MART, 4, 4 ; $2B
|
||||
mapconst VIRIDIAN_SCHOOL_HOUSE, 4, 4 ; $2C
|
||||
mapconst VIRIDIAN_NICKNAME_HOUSE, 4, 4 ; $2D
|
||||
mapconst VIRIDIAN_GYM, 9, 10 ; $2E
|
||||
mapconst DIGLETTS_CAVE_ROUTE_2, 4, 4 ; $2F
|
||||
mapconst VIRIDIAN_FOREST_NORTH_GATE, 4, 5 ; $30
|
||||
mapconst ROUTE_2_TRADE_HOUSE, 4, 4 ; $31
|
||||
mapconst ROUTE_2_GATE, 4, 5 ; $32
|
||||
mapconst VIRIDIAN_FOREST_SOUTH_GATE, 4, 5 ; $33
|
||||
mapconst VIRIDIAN_FOREST, 24, 17 ; $34
|
||||
mapconst MUSEUM_1F, 4, 10 ; $35
|
||||
mapconst MUSEUM_2F, 4, 7 ; $36
|
||||
mapconst PEWTER_GYM, 7, 5 ; $37
|
||||
mapconst PEWTER_NIDORAN_HOUSE, 4, 4 ; $38
|
||||
mapconst PEWTER_MART, 4, 4 ; $39
|
||||
mapconst PEWTER_SPEECH_HOUSE, 4, 4 ; $3A
|
||||
mapconst PEWTER_POKECENTER, 4, 7 ; $3B
|
||||
mapconst MT_MOON_1F, 18, 20 ; $3C
|
||||
mapconst MT_MOON_B1F, 14, 14 ; $3D
|
||||
mapconst MT_MOON_B2F, 18, 20 ; $3E
|
||||
mapconst CERULEAN_TRASHED_HOUSE, 4, 4 ; $3F
|
||||
mapconst CERULEAN_TRADE_HOUSE, 4, 4 ; $40
|
||||
mapconst CERULEAN_POKECENTER, 4, 7 ; $41
|
||||
mapconst CERULEAN_GYM, 7, 5 ; $42
|
||||
mapconst BIKE_SHOP, 4, 4 ; $43
|
||||
mapconst CERULEAN_MART, 4, 4 ; $44
|
||||
mapconst MT_MOON_POKECENTER, 4, 7 ; $45
|
||||
mapconst VIRIDIAN_PRE_GYM, 7, 5 ; $46 - was CERULEAN_TRASHED_HOUSE_COPY
|
||||
mapconst ROUTE_5_GATE, 3, 4 ; $47
|
||||
mapconst UNDERGROUND_PATH_ROUTE_5, 4, 4 ; $48
|
||||
mapconst DAYCARE, 4, 4 ; $49
|
||||
mapconst ROUTE_6_GATE, 3, 4 ; $4A
|
||||
mapconst UNDERGROUND_PATH_ROUTE_6, 4, 4 ; $4B
|
||||
mapconst CELESTE_HILL, 12, 12 ; $4C - Was copy of above & unused
|
||||
mapconst ROUTE_7_GATE, 4, 3 ; $4D
|
||||
mapconst UNDERGROUND_PATH_ROUTE_7, 4, 4 ; $4E
|
||||
mapconst UNDERGROUND_PATH_ROUTE_7_COPY, 4, 4 ; $4F - Unused
|
||||
mapconst ROUTE_8_GATE, 4, 3 ; $50
|
||||
mapconst UNDERGROUND_PATH_ROUTE_8, 4, 4 ; $51
|
||||
mapconst ROCK_TUNNEL_POKECENTER, 4, 7 ; $52
|
||||
mapconst ROCK_TUNNEL_1F, 18, 20 ; $53
|
||||
mapconst POWER_PLANT, 18, 20 ; $54
|
||||
mapconst ROUTE_11_GATE_1F, 5, 4 ; $55
|
||||
mapconst DIGLETTS_CAVE_ROUTE_11, 4, 4 ; $56
|
||||
mapconst ROUTE_11_GATE_2F, 4, 4 ; $57
|
||||
mapconst ROUTE_12_GATE_1F, 4, 5 ; $58
|
||||
mapconst BILLS_HOUSE, 4, 7 ; $59
|
||||
mapconst VERMILION_POKECENTER, 4, 7 ; $5A
|
||||
mapconst POKEMON_FAN_CLUB, 4, 4 ; $5B
|
||||
mapconst VERMILION_MART, 4, 4 ; $5C
|
||||
mapconst VERMILION_GYM, 9, 5 ; $5D
|
||||
mapconst VERMILION_PIDGEY_HOUSE, 4, 4 ; $5E
|
||||
mapconst VERMILION_DOCK, 6, 14 ; $5F
|
||||
mapconst SS_ANNE_1F, 9, 20 ; $60
|
||||
mapconst SS_ANNE_2F, 9, 20 ; $61
|
||||
mapconst SS_ANNE_3F, 3, 10 ; $62
|
||||
mapconst SS_ANNE_B1F, 4, 15 ; $63
|
||||
mapconst SS_ANNE_BOW, 7, 10 ; $64
|
||||
mapconst SS_ANNE_KITCHEN, 8, 7 ; $65
|
||||
mapconst SS_ANNE_CAPTAINS_ROOM, 4, 3 ; $66
|
||||
mapconst SS_ANNE_1F_ROOMS, 8, 12 ; $67
|
||||
mapconst SS_ANNE_2F_ROOMS, 8, 12 ; $68
|
||||
mapconst SS_ANNE_B1F_ROOMS, 8, 12 ; $69
|
||||
mapconst SILPH_GAUNTLET_1F, 9, 10 ; $6A - Was UNUSED_MAP_69
|
||||
mapconst SILPH_GAUNTLET_2F, 10, 13 ; $6B - Was UNUSED_MAP_6A
|
||||
mapconst SILPH_GAUNTLET_3F, 13, 17 ; $6C - Was UNUSED_MAP_6B
|
||||
mapconst VICTORY_ROAD_1F, 9, 10 ; $6D
|
||||
mapconst SILPH_GAUNTLET_4F, 9, 10 ; $6E - Was UNUSED_MAP_6D
|
||||
mapconst SILPH_GAUNTLET_5F, 9, 10 ; $6F - Was UNUSED_MAP_6E
|
||||
mapconst SILPH_GAUNTLET_6F, 12, 12 ; $70 - Was UNUSED_MAP_6F
|
||||
mapconst SILPH_GAUNTLET_7F, 5, 6 ; $71 - Was UNUSED_MAP_70
|
||||
mapconst LANCES_ROOM, 13, 13 ; $72
|
||||
mapconst FARAWAY_ISLAND_OUTSIDE, 18, 15 ; $73 - Was UNUSED_MAP_72
|
||||
mapconst FARAWAY_ISLAND_INSIDE, 11, 15 ; $74 - Was UNUSED_MAP_73
|
||||
mapconst POKEMON_MANSION_B2F, 12, 15 ; $75 - Was UNUSED_MAP_74
|
||||
mapconst MT_MOON_CRATER, 25, 25 ; $76 - Was UNUSED_MAP_75
|
||||
mapconst HALL_OF_FAME, 4, 5 ; $77
|
||||
mapconst UNDERGROUND_PATH_NORTH_SOUTH, 24, 4 ; $78
|
||||
mapconst CHAMPIONS_ROOM, 4, 4 ; $79
|
||||
mapconst UNDERGROUND_PATH_WEST_EAST, 4, 25 ; $7A
|
||||
mapconst CELADON_MART_1F, 4, 10 ; $7B
|
||||
mapconst CELADON_MART_2F, 4, 10 ; $7C
|
||||
mapconst CELADON_MART_3F, 4, 10 ; $7D
|
||||
mapconst CELADON_MART_4F, 4, 10 ; $7E
|
||||
mapconst CELADON_MART_ROOF, 4, 10 ; $7F
|
||||
mapconst CELADON_MART_ELEVATOR, 2, 2 ; $80
|
||||
mapconst CELADON_MANSION_1F, 6, 4 ; $81
|
||||
mapconst CELADON_MANSION_2F, 6, 4 ; $82
|
||||
mapconst CELADON_MANSION_3F, 6, 4 ; $83
|
||||
mapconst CELADON_MANSION_ROOF, 6, 4 ; $84
|
||||
mapconst CELADON_MANSION_ROOF_HOUSE, 4, 4 ; $85
|
||||
mapconst CELADON_POKECENTER, 4, 7 ; $86
|
||||
mapconst CELADON_GYM, 9, 5 ; $87
|
||||
mapconst GAME_CORNER, 9, 10 ; $88
|
||||
mapconst CELADON_MART_5F, 4, 10 ; $89
|
||||
mapconst GAME_CORNER_PRIZE_ROOM, 4, 5 ; $8A
|
||||
mapconst CELADON_DINER, 4, 5 ; $8B
|
||||
mapconst CELADON_CHIEF_HOUSE, 4, 4 ; $8C
|
||||
mapconst CELADON_HOTEL, 4, 7 ; $8D
|
||||
mapconst LAVENDER_POKECENTER, 4, 7 ; $8E
|
||||
mapconst POKEMON_TOWER_1F, 9, 10 ; $8F
|
||||
mapconst POKEMON_TOWER_2F, 9, 10 ; $90
|
||||
mapconst POKEMON_TOWER_3F, 9, 10 ; $91 - Currently unused
|
||||
mapconst POKEMON_TOWER_4F, 9, 10 ; $92 - Currently unused
|
||||
mapconst POKEMON_TOWER_5F, 9, 10 ; $93 - Currently unused
|
||||
mapconst POKEMON_TOWER_6F, 9, 10 ; $94
|
||||
mapconst POKEMON_TOWER_7F, 9, 10 ; $95
|
||||
mapconst MR_FUJIS_HOUSE, 4, 4 ; $96
|
||||
mapconst LAVENDER_MART, 4, 4 ; $97
|
||||
mapconst LAVENDER_CUBONE_HOUSE, 4, 4 ; $98
|
||||
mapconst FUCHSIA_MART, 4, 4 ; $99
|
||||
mapconst FUCHSIA_BILLS_GRANDPAS_HOUSE, 4, 4 ; $9A
|
||||
mapconst FUCHSIA_POKECENTER, 4, 7 ; $9B
|
||||
mapconst WARDENS_HOUSE, 4, 5 ; $9C
|
||||
mapconst SAFARI_ZONE_GATE, 3, 4 ; $9D
|
||||
mapconst FUCHSIA_GYM, 9, 5 ; $9E
|
||||
mapconst FUCHSIA_MEETING_ROOM, 4, 7 ; $9F
|
||||
mapconst SEAFOAM_ISLANDS_B1F, 9, 15 ; $A0
|
||||
mapconst SEAFOAM_ISLANDS_B2F, 9, 15 ; $A1
|
||||
mapconst SEAFOAM_ISLANDS_B3F, 9, 15 ; $A2
|
||||
mapconst SEAFOAM_ISLANDS_B4F, 9, 15 ; $A3
|
||||
mapconst VERMILION_OLD_ROD_HOUSE, 4, 4 ; $A4 - Now unused
|
||||
mapconst FUCHSIA_GOOD_ROD_HOUSE, 4, 4 ; $A5
|
||||
mapconst POKEMON_MANSION_1F, 14, 15 ; $A6
|
||||
mapconst CINNABAR_GYM, 9, 10 ; $A7
|
||||
mapconst CINNABAR_LAB, 4, 9 ; $A8
|
||||
mapconst CINNABAR_LAB_TRADE_ROOM, 4, 4 ; $A9
|
||||
mapconst CINNABAR_LAB_METRONOME_ROOM, 4, 4 ; $AA
|
||||
mapconst CINNABAR_LAB_FOSSIL_ROOM, 4, 4 ; $AB
|
||||
mapconst CINNABAR_POKECENTER, 4, 7 ; $AC
|
||||
mapconst CINNABAR_MART, 4, 4 ; $AD
|
||||
mapconst CINNABAR_MART_COPY, 4, 4 ; $AE - Unused
|
||||
mapconst INDIGO_PLATEAU_LOBBY, 6, 8 ; $AF
|
||||
mapconst COPYCATS_HOUSE_1F, 4, 4 ; $B0
|
||||
mapconst COPYCATS_HOUSE_2F, 4, 4 ; $B1
|
||||
mapconst FIGHTING_DOJO, 6, 5 ; $B2
|
||||
mapconst SAFFRON_GYM, 9, 10 ; $B3
|
||||
mapconst SAFFRON_PIDGEY_HOUSE, 4, 4 ; $B4
|
||||
mapconst SAFFRON_MART, 4, 4 ; $B5
|
||||
mapconst SILPH_CO_1F, 9, 15 ; $B6
|
||||
mapconst SAFFRON_POKECENTER, 4, 7 ; $B7
|
||||
mapconst MR_PSYCHICS_HOUSE, 4, 4 ; $B8
|
||||
mapconst ROUTE_15_GATE_1F, 5, 4 ; $B9
|
||||
mapconst ROUTE_15_GATE_2F, 4, 4 ; $BA
|
||||
mapconst ROUTE_16_GATE_1F, 7, 4 ; $BB
|
||||
mapconst ROUTE_16_GATE_2F, 4, 4 ; $BC
|
||||
mapconst ROUTE_16_FLY_HOUSE, 4, 4 ; $BD
|
||||
mapconst ROUTE_12_SUPER_ROD_HOUSE, 4, 4 ; $BE
|
||||
mapconst ROUTE_18_GATE_1F, 5, 4 ; $BF
|
||||
mapconst ROUTE_18_GATE_2F, 4, 4 ; $C0
|
||||
mapconst SEAFOAM_ISLANDS_1F, 9, 15 ; $C1
|
||||
mapconst ROUTE_22_GATE, 4, 5 ; $C2
|
||||
mapconst VICTORY_ROAD_2F, 9, 15 ; $C3
|
||||
mapconst ROUTE_12_GATE_2F, 4, 4 ; $C4
|
||||
mapconst VERMILION_TRADE_HOUSE, 4, 4 ; $C5
|
||||
mapconst DIGLETTS_CAVE, 18, 20 ; $C6
|
||||
mapconst VICTORY_ROAD_3F, 9, 15 ; $C7
|
||||
mapconst ROCKET_HIDEOUT_B1F, 14, 11 ; $C8
|
||||
mapconst ROCKET_HIDEOUT_B2F, 14, 15 ; $C9 - Currently unused
|
||||
mapconst ROCKET_HIDEOUT_B3F, 14, 15 ; $CA - Currently unused
|
||||
mapconst ROCKET_HIDEOUT_B4F, 12, 15 ; $CB - Currently unused
|
||||
mapconst ROCKET_HIDEOUT_ELEVATOR, 4, 3 ; $CC - Currently unused
|
||||
mapconst UNUSED_MAP_CC, 0, 0 ; $CD - Unused
|
||||
mapconst UNUSED_MAP_CD, 0, 0 ; $CE - Unused
|
||||
mapconst UNUSED_MAP_CE, 0, 0 ; $CF - Unused
|
||||
mapconst SILPH_CO_2F, 9, 15 ; $D0
|
||||
mapconst SILPH_CO_3F, 9, 15 ; $D1
|
||||
mapconst SILPH_CO_4F, 9, 15 ; $D2
|
||||
mapconst SILPH_CO_5F, 9, 15 ; $D3
|
||||
mapconst SILPH_CO_6F, 9, 13 ; $D4
|
||||
mapconst SILPH_CO_7F, 9, 13 ; $D5
|
||||
mapconst SILPH_CO_8F, 9, 13 ; $D6
|
||||
mapconst POKEMON_MANSION_2F, 14, 15 ; $D7
|
||||
mapconst POKEMON_MANSION_3F, 9, 15 ; $D8
|
||||
mapconst POKEMON_MANSION_B1F, 14, 15 ; $D9
|
||||
mapconst SAFARI_ZONE_EAST, 13, 15 ; $DA
|
||||
mapconst SAFARI_ZONE_NORTH, 18, 20 ; $DB
|
||||
mapconst SAFARI_ZONE_WEST, 13, 15 ; $DC
|
||||
mapconst SAFARI_ZONE_CENTER, 13, 15 ; $DD
|
||||
mapconst SAFARI_ZONE_CENTER_REST_HOUSE, 4, 4 ; $DE
|
||||
mapconst SAFARI_ZONE_SECRET_HOUSE, 4, 4 ; $DF
|
||||
mapconst SAFARI_ZONE_WEST_REST_HOUSE, 4, 4 ; $E0
|
||||
mapconst SAFARI_ZONE_EAST_REST_HOUSE, 4, 4 ; $E1
|
||||
mapconst SAFARI_ZONE_NORTH_REST_HOUSE, 4, 4 ; $E2
|
||||
mapconst CERULEAN_CAVE_2F, 9, 15 ; $E3
|
||||
mapconst CERULEAN_CAVE_B1F, 9, 15 ; $E4
|
||||
mapconst CERULEAN_CAVE_1F, 9, 15 ; $E5
|
||||
mapconst NAME_RATERS_HOUSE, 4, 4 ; $E6
|
||||
mapconst CERULEAN_BADGE_HOUSE, 4, 4 ; $E7
|
||||
mapconst CINNABAR_VOLCANO, 12, 14 ; $E8 - Was UNUSED_MAP_E7
|
||||
mapconst ROCK_TUNNEL_B1F, 18, 20 ; $E9
|
||||
mapconst SILPH_CO_9F, 9, 13 ; $EA
|
||||
mapconst SILPH_CO_10F, 9, 8 ; $EB
|
||||
mapconst SILPH_CO_11F, 9, 9 ; $EC
|
||||
mapconst SILPH_CO_ELEVATOR, 2, 2 ; $ED
|
||||
mapconst UNUSED_MAP_ED, 0, 0 ; $EE - Unused
|
||||
mapconst UNDERWATER_TUNNEL, 9, 15 ; $EF - Was UNUSED_MAP_EE
|
||||
mapconst TRADE_CENTER, 4, 5 ; $F0
|
||||
mapconst COLOSSEUM, 4, 5 ; $F1
|
||||
mapconst CELADON_UNIVERSITY_INSIDE, 10, 11 ; $F2 - Was UNUSED_MAP_F1
|
||||
mapconst CELADON_UNIVERSITY_POKECENTER, 4, 7 ; $F3 - Was UNUSED_MAP_F2
|
||||
mapconst BILLS_GARDEN, 10, 10 ; $F4 - Was UNUSED_MAP_F3
|
||||
mapconst LORELEIS_ROOM, 6, 5 ; $F5
|
||||
mapconst BRUNOS_ROOM, 6, 5 ; $F6
|
||||
mapconst AGATHAS_ROOM, 6, 5 ; $F7 - Maps F8 - FE currently have no data, bear in mind we need room for everything in citrine
|
||||
map_const REDS_HOUSE_1F, 4, 4 ; $26
|
||||
map_const REDS_HOUSE_2F, 4, 4 ; $27
|
||||
map_const BLUES_HOUSE, 4, 4 ; $28
|
||||
map_const OAKS_LAB, 7, 6 ; $29
|
||||
map_const VIRIDIAN_POKECENTER, 7, 4 ; $2A
|
||||
map_const VIRIDIAN_MART, 4, 4 ; $2B
|
||||
map_const VIRIDIAN_SCHOOL_HOUSE, 4, 4 ; $2C
|
||||
map_const VIRIDIAN_NICKNAME_HOUSE, 4, 4 ; $2D
|
||||
map_const VIRIDIAN_GYM, 10, 9 ; $2E
|
||||
map_const DIGLETTS_CAVE_ROUTE_2, 4, 4 ; $2F
|
||||
map_const VIRIDIAN_FOREST_NORTH_GATE, 5, 4 ; $30
|
||||
map_const ROUTE_2_TRADE_HOUSE, 4, 4 ; $31
|
||||
map_const ROUTE_2_GATE, 5, 4 ; $32
|
||||
map_const VIRIDIAN_FOREST_SOUTH_GATE, 5, 4 ; $33
|
||||
map_const VIRIDIAN_FOREST, 17, 24 ; $34
|
||||
map_const MUSEUM_1F, 10, 4 ; $35
|
||||
map_const MUSEUM_2F, 7, 4 ; $36
|
||||
map_const PEWTER_GYM, 5, 7 ; $37
|
||||
map_const PEWTER_NIDORAN_HOUSE, 4, 4 ; $38
|
||||
map_const PEWTER_MART, 4, 4 ; $39
|
||||
map_const PEWTER_SPEECH_HOUSE, 4, 4 ; $3A
|
||||
map_const PEWTER_POKECENTER, 7, 4 ; $3B
|
||||
map_const MT_MOON_1F, 20, 18 ; $3C
|
||||
map_const MT_MOON_B1F, 14, 14 ; $3D
|
||||
map_const MT_MOON_B2F, 20, 18 ; $3E
|
||||
map_const CERULEAN_TRASHED_HOUSE, 4, 4 ; $3F
|
||||
map_const CERULEAN_TRADE_HOUSE, 4, 4 ; $40
|
||||
map_const CERULEAN_POKECENTER, 7, 4 ; $41
|
||||
map_const CERULEAN_GYM, 5, 7 ; $42
|
||||
map_const BIKE_SHOP, 4, 4 ; $43
|
||||
map_const CERULEAN_MART, 4, 4 ; $44
|
||||
map_const MT_MOON_POKECENTER, 7, 4 ; $45
|
||||
map_const VIRIDIAN_PRE_GYM, 5, 7 ; $46 - was CERULEAN_TRASHED_HOUSE_COPY
|
||||
map_const ROUTE_5_GATE, 4, 3 ; $47
|
||||
map_const UNDERGROUND_PATH_ROUTE_5, 4, 4 ; $48
|
||||
map_const DAYCARE, 4, 4 ; $49
|
||||
map_const ROUTE_6_GATE, 4, 3 ; $4A
|
||||
map_const UNDERGROUND_PATH_ROUTE_6, 4, 4 ; $4B
|
||||
map_const CELESTE_HILL, 12, 12 ; $4C - Was copy of above & unused
|
||||
map_const ROUTE_7_GATE, 3, 4 ; $4D
|
||||
map_const UNDERGROUND_PATH_ROUTE_7, 4, 4 ; $4E
|
||||
map_const UNDERGROUND_PATH_ROUTE_7_COPY, 4, 4 ; $4F - Unused
|
||||
map_const ROUTE_8_GATE, 3, 4 ; $50
|
||||
map_const UNDERGROUND_PATH_ROUTE_8, 4, 4 ; $51
|
||||
map_const ROCK_TUNNEL_POKECENTER, 7, 4 ; $52
|
||||
map_const ROCK_TUNNEL_1F, 20, 18 ; $53
|
||||
map_const POWER_PLANT, 20, 18 ; $54
|
||||
map_const ROUTE_11_GATE_1F, 4, 5 ; $55
|
||||
map_const DIGLETTS_CAVE_ROUTE_11, 4, 4 ; $56
|
||||
map_const ROUTE_11_GATE_2F, 4, 4 ; $57
|
||||
map_const ROUTE_12_GATE_1F, 5, 4 ; $58
|
||||
map_const BILLS_HOUSE, 7, 4 ; $59
|
||||
map_const VERMILION_POKECENTER, 7, 4 ; $5A
|
||||
map_const POKEMON_FAN_CLUB, 4, 4 ; $5B
|
||||
map_const VERMILION_MART, 4, 4 ; $5C
|
||||
map_const VERMILION_GYM, 5, 9 ; $5D
|
||||
map_const VERMILION_PIDGEY_HOUSE, 4, 4 ; $5E
|
||||
map_const VERMILION_DOCK, 14, 6 ; $5F
|
||||
map_const SS_ANNE_1F, 20, 9 ; $60
|
||||
map_const SS_ANNE_2F, 20, 9 ; $61
|
||||
map_const SS_ANNE_3F, 10, 3 ; $62
|
||||
map_const SS_ANNE_B1F, 15, 4 ; $63
|
||||
map_const SS_ANNE_BOW, 10, 7 ; $64
|
||||
map_const SS_ANNE_KITCHEN, 7, 8 ; $65
|
||||
map_const SS_ANNE_CAPTAINS_ROOM, 3, 4 ; $66
|
||||
map_const SS_ANNE_1F_ROOMS, 12, 8 ; $67
|
||||
map_const SS_ANNE_2F_ROOMS, 12, 8 ; $68
|
||||
map_const SS_ANNE_B1F_ROOMS, 12, 8 ; $69
|
||||
map_const SILPH_GAUNTLET_1F, 10, 9 ; $6A - Was UNUSED_MAP_69
|
||||
map_const SILPH_GAUNTLET_2F, 13, 10 ; $6B - Was UNUSED_MAP_6A
|
||||
map_const SILPH_GAUNTLET_3F, 17, 13 ; $6C - Was UNUSED_MAP_6B
|
||||
map_const VICTORY_ROAD_1F, 10, 9 ; $6D
|
||||
map_const SILPH_GAUNTLET_4F, 10, 9 ; $6E - Was UNUSED_MAP_6D
|
||||
map_const SILPH_GAUNTLET_5F, 10, 9 ; $6F - Was UNUSED_MAP_6E
|
||||
map_const SILPH_GAUNTLET_6F, 12, 12 ; $70 - Was UNUSED_MAP_6F
|
||||
map_const SILPH_GAUNTLET_7F, 6, 5 ; $71 - Was UNUSED_MAP_70
|
||||
map_const LANCES_ROOM, 13, 13 ; $72
|
||||
map_const FARAWAY_ISLAND_OUTSIDE, 15, 18 ; $73 - Was UNUSED_MAP_72
|
||||
map_const FARAWAY_ISLAND_INSIDE, 15, 11 ; $74 - Was UNUSED_MAP_73
|
||||
map_const POKEMON_MANSION_B2F, 15, 12 ; $75 - Was UNUSED_MAP_74
|
||||
map_const MT_MOON_CRATER, 25, 25 ; $76 - Was UNUSED_MAP_75
|
||||
map_const HALL_OF_FAME, 5, 4 ; $77
|
||||
map_const UNDERGROUND_PATH_NORTH_SOUTH, 4, 24 ; $78 ; UndergroundPathNorthSouth.blk is actually 4x23
|
||||
map_const CHAMPIONS_ROOM, 4, 4 ; $79
|
||||
map_const UNDERGROUND_PATH_WEST_EAST, 25, 4 ; $7A
|
||||
map_const CELADON_MART_1F, 10, 4 ; $7B
|
||||
map_const CELADON_MART_2F, 10, 4 ; $7C
|
||||
map_const CELADON_MART_3F, 10, 4 ; $7D
|
||||
map_const CELADON_MART_4F, 10, 4 ; $7E
|
||||
map_const CELADON_MART_ROOF, 10, 4 ; $7F
|
||||
map_const CELADON_MART_ELEVATOR, 2, 2 ; $80
|
||||
map_const CELADON_MANSION_1F, 4, 6 ; $81
|
||||
map_const CELADON_MANSION_2F, 4, 6 ; $82
|
||||
map_const CELADON_MANSION_3F, 4, 6 ; $83
|
||||
map_const CELADON_MANSION_ROOF, 4, 6 ; $84
|
||||
map_const CELADON_MANSION_ROOF_HOUSE, 4, 4 ; $85
|
||||
map_const CELADON_POKECENTER, 7, 4 ; $86
|
||||
map_const CELADON_GYM, 5, 9 ; $87
|
||||
map_const GAME_CORNER, 10, 9 ; $88
|
||||
map_const CELADON_MART_5F, 10, 4 ; $89
|
||||
map_const GAME_CORNER_PRIZE_ROOM, 5, 4 ; $8A
|
||||
map_const CELADON_DINER, 5, 4 ; $8B
|
||||
map_const CELADON_CHIEF_HOUSE, 4, 4 ; $8C
|
||||
map_const CELADON_HOTEL, 7, 4 ; $8D
|
||||
map_const LAVENDER_POKECENTER, 7, 4 ; $8E
|
||||
map_const POKEMON_TOWER_1F, 10, 9 ; $8F
|
||||
map_const POKEMON_TOWER_2F, 10, 9 ; $90
|
||||
map_const POKEMON_TOWER_3F, 10, 9 ; $91 - Currently unused
|
||||
map_const POKEMON_TOWER_4F, 10, 9 ; $92 - Currently unused
|
||||
map_const POKEMON_TOWER_5F, 10, 9 ; $93 - Currently unused
|
||||
map_const POKEMON_TOWER_6F, 10, 9 ; $94
|
||||
map_const POKEMON_TOWER_7F, 10, 9 ; $95
|
||||
map_const MR_FUJIS_HOUSE, 4, 4 ; $96
|
||||
map_const LAVENDER_MART, 4, 4 ; $97
|
||||
map_const LAVENDER_CUBONE_HOUSE, 4, 4 ; $98
|
||||
map_const FUCHSIA_MART, 4, 4 ; $99
|
||||
map_const FUCHSIA_BILLS_GRANDPAS_HOUSE, 4, 4 ; $9A
|
||||
map_const FUCHSIA_POKECENTER, 7, 4 ; $9B
|
||||
map_const WARDENS_HOUSE, 5, 4 ; $9C
|
||||
map_const SAFARI_ZONE_GATE, 4, 3 ; $9D
|
||||
map_const FUCHSIA_GYM, 5, 9 ; $9E
|
||||
map_const FUCHSIA_MEETING_ROOM, 7, 4 ; $9F
|
||||
map_const SEAFOAM_ISLANDS_B1F, 15, 9 ; $A0
|
||||
map_const SEAFOAM_ISLANDS_B2F, 15, 9 ; $A1
|
||||
map_const SEAFOAM_ISLANDS_B3F, 15, 9 ; $A2
|
||||
map_const SEAFOAM_ISLANDS_B4F, 15, 9 ; $A3
|
||||
map_const VERMILION_OLD_ROD_HOUSE, 4, 4 ; $A4 - Now unused
|
||||
map_const FUCHSIA_GOOD_ROD_HOUSE, 4, 4 ; $A5
|
||||
map_const POKEMON_MANSION_1F, 15, 14 ; $A6
|
||||
map_const CINNABAR_GYM, 10, 9 ; $A7
|
||||
map_const CINNABAR_LAB, 9, 4 ; $A8
|
||||
map_const CINNABAR_LAB_TRADE_ROOM, 4, 4 ; $A9
|
||||
map_const CINNABAR_LAB_METRONOME_ROOM, 4, 4 ; $AA
|
||||
map_const CINNABAR_LAB_FOSSIL_ROOM, 4, 4 ; $AB
|
||||
map_const CINNABAR_POKECENTER, 7, 4 ; $AC
|
||||
map_const CINNABAR_MART, 4, 4 ; $AD
|
||||
map_const CINNABAR_MART_COPY, 4, 4 ; $AE - Unused
|
||||
map_const INDIGO_PLATEAU_LOBBY, 8, 6 ; $AF
|
||||
map_const COPYCATS_HOUSE_1F, 4, 4 ; $B0
|
||||
map_const COPYCATS_HOUSE_2F, 4, 4 ; $B1
|
||||
map_const FIGHTING_DOJO, 5, 6 ; $B2
|
||||
map_const SAFFRON_GYM, 10, 9 ; $B3
|
||||
map_const SAFFRON_PIDGEY_HOUSE, 4, 4 ; $B4
|
||||
map_const SAFFRON_MART, 4, 4 ; $B5
|
||||
map_const SILPH_CO_1F, 15, 9 ; $B6
|
||||
map_const SAFFRON_POKECENTER, 7, 4 ; $B7
|
||||
map_const MR_PSYCHICS_HOUSE, 4, 4 ; $B8
|
||||
map_const ROUTE_15_GATE_1F, 4, 5 ; $B9
|
||||
map_const ROUTE_15_GATE_2F, 4, 4 ; $BA
|
||||
map_const ROUTE_16_GATE_1F, 4, 7 ; $BB
|
||||
map_const ROUTE_16_GATE_2F, 4, 4 ; $BC
|
||||
map_const ROUTE_16_FLY_HOUSE, 4, 4 ; $BD
|
||||
map_const ROUTE_12_SUPER_ROD_HOUSE, 4, 4 ; $BE
|
||||
map_const ROUTE_18_GATE_1F, 4, 5 ; $BF
|
||||
map_const ROUTE_18_GATE_2F, 4, 4 ; $C0
|
||||
map_const SEAFOAM_ISLANDS_1F, 15, 9 ; $C1
|
||||
map_const ROUTE_22_GATE, 5, 4 ; $C2
|
||||
map_const VICTORY_ROAD_2F, 15, 9 ; $C3
|
||||
map_const ROUTE_12_GATE_2F, 4, 4 ; $C4
|
||||
map_const VERMILION_TRADE_HOUSE, 4, 4 ; $C5
|
||||
map_const DIGLETTS_CAVE, 20, 18 ; $C6
|
||||
map_const VICTORY_ROAD_3F, 15, 9 ; $C7
|
||||
map_const ROCKET_HIDEOUT_B1F, 11, 14 ; $C8
|
||||
map_const ROCKET_HIDEOUT_B2F, 15, 14 ; $C9 - Currently unused
|
||||
map_const ROCKET_HIDEOUT_B3F, 15, 14 ; $CA - Currently unused
|
||||
map_const ROCKET_HIDEOUT_B4F, 15, 12 ; $CB - Currently unused
|
||||
map_const ROCKET_HIDEOUT_ELEVATOR, 3, 4 ; $CC - Currently unused
|
||||
map_const UNUSED_MAP_CC, 0, 0 ; $CD - Unused
|
||||
map_const UNUSED_MAP_CD, 0, 0 ; $CE - Unused
|
||||
map_const UNUSED_MAP_CE, 0, 0 ; $CF - Unused
|
||||
map_const SILPH_CO_2F, 15, 9 ; $D0
|
||||
map_const SILPH_CO_3F, 15, 9 ; $D1
|
||||
map_const SILPH_CO_4F, 15, 9 ; $D2
|
||||
map_const SILPH_CO_5F, 15, 9 ; $D3
|
||||
map_const SILPH_CO_6F, 13, 9 ; $D4
|
||||
map_const SILPH_CO_7F, 13, 9 ; $D5
|
||||
map_const SILPH_CO_8F, 13, 9 ; $D6
|
||||
map_const POKEMON_MANSION_2F, 15, 14 ; $D7
|
||||
map_const POKEMON_MANSION_3F, 15, 9 ; $D8
|
||||
map_const POKEMON_MANSION_B1F, 15, 14 ; $D9
|
||||
map_const SAFARI_ZONE_EAST, 15, 13 ; $DA
|
||||
map_const SAFARI_ZONE_NORTH, 20, 18 ; $DB
|
||||
map_const SAFARI_ZONE_WEST, 15, 13 ; $DC
|
||||
map_const SAFARI_ZONE_CENTER, 15, 13 ; $DD
|
||||
map_const SAFARI_ZONE_CENTER_REST_HOUSE, 4, 4 ; $DE
|
||||
map_const SAFARI_ZONE_SECRET_HOUSE, 4, 4 ; $DF
|
||||
map_const SAFARI_ZONE_WEST_REST_HOUSE, 4, 4 ; $E0
|
||||
map_const SAFARI_ZONE_EAST_REST_HOUSE, 4, 4 ; $E1
|
||||
map_const SAFARI_ZONE_NORTH_REST_HOUSE, 4, 4 ; $E2
|
||||
map_const CERULEAN_CAVE_2F, 15, 9 ; $E3
|
||||
map_const CERULEAN_CAVE_B1F, 15, 9 ; $E4
|
||||
map_const CERULEAN_CAVE_1F, 15, 9 ; $E5
|
||||
map_const NAME_RATERS_HOUSE, 4, 4 ; $E6
|
||||
map_const CERULEAN_BADGE_HOUSE, 4, 4 ; $E7
|
||||
map_const CINNABAR_VOLCANO, 14, 12 ; $E8 - Was UNUSED_MAP_E7
|
||||
map_const ROCK_TUNNEL_B1F, 20, 18 ; $E9
|
||||
map_const SILPH_CO_9F, 13, 9 ; $EA
|
||||
map_const SILPH_CO_10F, 8, 9 ; $EB
|
||||
map_const SILPH_CO_11F, 9, 9 ; $EC
|
||||
map_const SILPH_CO_ELEVATOR, 2, 2 ; $ED
|
||||
map_const UNUSED_MAP_ED, 0, 0 ; $EE - Unused
|
||||
map_const UNDERWATER_TUNNEL, 15, 9 ; $EF - Was UNUSED_MAP_EE
|
||||
map_const TRADE_CENTER, 5, 4 ; $F0
|
||||
map_const COLOSSEUM, 5, 4 ; $F1
|
||||
map_const CELADON_UNIVERSITY_INSIDE, 11, 10 ; $F2 - Was UNUSED_MAP_F1
|
||||
map_const CELADON_UNIVERSITY_POKECENTER, 7, 4 ; $F3 - Was UNUSED_MAP_F2
|
||||
map_const BILLS_GARDEN, 10, 10 ; $F4 - Was UNUSED_MAP_F3
|
||||
map_const LORELEIS_ROOM, 5, 6 ; $F5
|
||||
map_const BRUNOS_ROOM, 5, 6 ; $F6
|
||||
map_const AGATHAS_ROOM, 5, 6 ; $F7 - Maps F8 - FE currently have no data, bear in mind we need room for everything in citrine
|
||||
DEF NUM_MAPS EQU const_value
|
||||
|
||||
; Indoor maps, such as houses, use this as the Map ID in their exit warps
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
; spritestatedata1 struct members (see macros/wram.asm)
|
||||
; spritestatedata1 struct members (see macros/ram.asm)
|
||||
const_def
|
||||
const SPRITESTATEDATA1_PICTUREID ; 0
|
||||
const SPRITESTATEDATA1_MOVEMENTSTATUS ; 1
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
const SPRITESTATEDATA1_0F ; f
|
||||
DEF SPRITESTATEDATA1_LENGTH EQU const_value
|
||||
|
||||
; spritestatedata2 struct members (see macros/wram.asm)
|
||||
; spritestatedata2 struct members (see macros/ram.asm)
|
||||
const_def
|
||||
const SPRITESTATEDATA2_WALKANIMATIONCOUNTER ; 0
|
||||
const SPRITESTATEDATA2_01 ; 1
|
||||
|
|
|
|||
|
|
@ -45,93 +45,96 @@ DEF FIRST_SE_ID EQU const_value
|
|||
|
||||
; subanimations that are part of move animations
|
||||
; SubanimationPointers indexes (see data/battle_anims/subanimations.asm)
|
||||
|
||||
; The 0 or 1 in the name of a subanim indicates whether to use tileset 0 or 1 data/moves/animations.asm.
|
||||
; "Both" indicates either can be used for different images using the same animation.
|
||||
const_def
|
||||
const SUBANIM_00
|
||||
const SUBANIM_01
|
||||
const SUBANIM_02
|
||||
const SUBANIM_03
|
||||
const SUBANIM_04
|
||||
const SUBANIM_05
|
||||
const SUBANIM_06
|
||||
const SUBANIM_07
|
||||
const SUBANIM_08
|
||||
const SUBANIM_09
|
||||
const SUBANIM_0A
|
||||
const SUBANIM_0B
|
||||
const SUBANIM_0C
|
||||
const SUBANIM_0D
|
||||
const SUBANIM_0E
|
||||
const SUBANIM_0F
|
||||
const SUBANIM_10
|
||||
const SUBANIM_11
|
||||
const SUBANIM_12
|
||||
const SUBANIM_13
|
||||
const SUBANIM_14
|
||||
const SUBANIM_15
|
||||
const SUBANIM_16
|
||||
const SUBANIM_17
|
||||
const SUBANIM_18
|
||||
const SUBANIM_19
|
||||
const SUBANIM_1A
|
||||
const SUBANIM_1B
|
||||
const SUBANIM_1C
|
||||
const SUBANIM_1D
|
||||
const SUBANIM_1E
|
||||
const SUBANIM_1F
|
||||
const SUBANIM_20
|
||||
const SUBANIM_21
|
||||
const SUBANIM_22
|
||||
const SUBANIM_23
|
||||
const SUBANIM_24
|
||||
const SUBANIM_25
|
||||
const SUBANIM_26
|
||||
const SUBANIM_27
|
||||
const SUBANIM_28
|
||||
const SUBANIM_29
|
||||
const SUBANIM_2A
|
||||
const SUBANIM_2B
|
||||
const SUBANIM_2C
|
||||
const SUBANIM_2D
|
||||
const SUBANIM_2E
|
||||
const SUBANIM_2F
|
||||
const SUBANIM_30
|
||||
const SUBANIM_31
|
||||
const SUBANIM_32
|
||||
const SUBANIM_33
|
||||
const SUBANIM_34
|
||||
const SUBANIM_35
|
||||
const SUBANIM_36
|
||||
const SUBANIM_37
|
||||
const SUBANIM_38
|
||||
const SUBANIM_39
|
||||
const SUBANIM_3A
|
||||
const SUBANIM_3B
|
||||
const SUBANIM_3C
|
||||
const SUBANIM_3D
|
||||
const SUBANIM_3E
|
||||
const SUBANIM_3F
|
||||
const SUBANIM_40
|
||||
const SUBANIM_41
|
||||
const SUBANIM_42
|
||||
const SUBANIM_43
|
||||
const SUBANIM_44
|
||||
const SUBANIM_45
|
||||
const SUBANIM_46
|
||||
const SUBANIM_47
|
||||
const SUBANIM_48
|
||||
const SUBANIM_49
|
||||
const SUBANIM_4A
|
||||
const SUBANIM_4B
|
||||
const SUBANIM_4C
|
||||
const SUBANIM_4D
|
||||
const SUBANIM_4E
|
||||
const SUBANIM_4F
|
||||
const SUBANIM_50
|
||||
const SUBANIM_51
|
||||
const SUBANIM_52
|
||||
const SUBANIM_53
|
||||
const SUBANIM_54
|
||||
const SUBANIM_55
|
||||
const SUBANIM_0_STAR
|
||||
const SUBANIM_0_STAR_TWICE
|
||||
const SUBANIM_0_STAR_THRICE
|
||||
const SUBANIM_0_STAR_DESCENDING
|
||||
const SUBANIM_1_STAR_BIG_MOVING
|
||||
const SUBANIM_1_STAR_BIG
|
||||
const SUBANIM_0_BALL_TOSS_HIGH
|
||||
const SUBANIM_0_BALL_TOSS_MIDDLE
|
||||
const SUBANIM_0_BALL_TOSS_LOW
|
||||
const SUBANIM_0_BALL_SHAKE_ENEMY
|
||||
const SUBANIM_0_BALL_POOF_ENEMY
|
||||
const SUBANIM_0_BALL_BLOCK
|
||||
const SUBANIM_1_FLAME_COLUMN_1
|
||||
const SUBANIM_1_FLAME_COLUMN_2
|
||||
const SUBANIM_1_FLAME_COLUMN_3
|
||||
const SUBANIM_0_SCRATCHES
|
||||
const SUBANIM_1_TORNADO
|
||||
const SUBANIM_1_FLAMES
|
||||
const SUBANIM_0_HEART_1_MUSIC
|
||||
const SUBANIM_1_BLOB_TOSS
|
||||
const SUBANIM_1_BLOB_DRIP_ENEMY
|
||||
const SUBANIM_1_SHOUT
|
||||
const SUBANIM_0_SLICE
|
||||
const SUBANIM_0_BIRDIES_CIRCLING_ENEMY
|
||||
const SUBANIM_1_SWORDS_CIRCLING
|
||||
const SUBANIM_1_CLOUD_TOSS
|
||||
const SUBANIM_0_WATER_COLUMNS
|
||||
const SUBANIM_1_SEED_TOSS
|
||||
const SUBANIM_1_SEED_LAND
|
||||
const SUBANIM_0_ROCKS_LIFT
|
||||
const SUBANIM_0_ROCKS_TOSS
|
||||
const SUBANIM_1_FLAME_BEAM
|
||||
const SUBANIM_1_FLAME_STAR
|
||||
const SUBANIM_0_CIRCLES_1_SQUARES_CENTERING_ENEMY
|
||||
const SUBANIM_0_CIRCLE_1_SQUARE_TOSS_BACK
|
||||
const SUBANIM_0_BIND
|
||||
const SUBANIM_0_STATUS_PARALYZED
|
||||
const SUBANIM_0_STATUS_CONFUSED
|
||||
const SUBANIM_0_STATUS_CONFUSED_ENEMY
|
||||
const SUBANIM_0_STATUS_POISONED
|
||||
const SUBANIM_1_SAND
|
||||
const SUBANIM_1_LIGHTNING_BALL
|
||||
const SUBANIM_0_SLICE_BOTH_SIDES
|
||||
const SUBANIM_1_LIGHTNING
|
||||
const SUBANIM_0_WATER_DROPLETS
|
||||
const SUBANIM_0_CIRCLES_CENTERING
|
||||
const SUBANIM_0_BEAM
|
||||
const SUBANIM_0_ICE_RISE
|
||||
const SUBANIM_0_ROCKS_FALL_ENEMY
|
||||
const SUBANIM_0_SOUND_WAVE
|
||||
const SUBANIM_0_CIRCLE_1_SQUARE_HALF_TOSS ; unused
|
||||
const SUBANIM_1_BARRIER
|
||||
const SUBANIM_1_SELFDESTRUCT
|
||||
const SUBANIM_0_WATER_BUBBLES
|
||||
const SUBANIM_0_CIRCLES_FALLING
|
||||
const SUBANIM_0_STRING_SHOT
|
||||
const SUBANIM_0_ICE_FALL
|
||||
const SUBANIM_0_CIRCLE_1_SQUARE_APPEARS ; unused
|
||||
const SUBANIM_0_STATUS_SLEEP
|
||||
const SUBANIM_0_STATUS_SLEEP_ENEMY
|
||||
const SUBANIM_0_WATER_1_FIRE_BARRIER ; unused
|
||||
const SUBANIM_0_WATER_1_FIRE_GEYSER ; unused
|
||||
const SUBANIM_1_STAR_BIG_TOSS
|
||||
const SUBANIM_1_STARS_SMALL_TOSS
|
||||
const SUBANIM_1_MUSIC_CIRCLING_ENEMY
|
||||
const SUBANIM_1_CIRCLE_BLACK_TOSS
|
||||
const SUBANIM_1_EXPLOSION_SMALL_ENEMY
|
||||
const SUBANIM_0_CIRCLE_1_SQUARE_CLOSING
|
||||
const SUBANIM_1_LEAVES_TOSS
|
||||
const SUBANIM_0_HORN_JAB_TWICE
|
||||
const SUBANIM_0_HORN_JAB_THRICE
|
||||
const SUBANIM_0_BALL_POOF
|
||||
const SUBANIM_2_TRADE_BALL_DROP
|
||||
const SUBANIM_2_TRADE_BALL_SHAKE
|
||||
const SUBANIM_2_TRADE_BALL_APPEAR
|
||||
const SUBANIM_2_TRADE_BALL_POOF
|
||||
const SUBANIM_0_EGG_SHAKING
|
||||
const SUBANIM_1_TRIANGLE_TOSS
|
||||
const SUBANIM_1_SPHERE_BIG
|
||||
const SUBANIM_1_SPHERE_BIG_RISE
|
||||
const SUBANIM_1_SPHERE_BIG_FALL
|
||||
const SUBANIM_0_SHELL
|
||||
const SUBANIM_0_COIN_BOUNCE
|
||||
const SUBANIM_0_SAFARI_ROCK
|
||||
const SUBANIM_0_SAFARI_BAIT
|
||||
const SUBANIM_0_STAR_HIGH
|
||||
DEF NUM_SUBANIMS EQU const_value
|
||||
|
||||
; types of subanimations
|
||||
|
|
|
|||
|
|
@ -191,14 +191,14 @@ DEF NUM_ATTACKS EQU const_value - 1
|
|||
const SHOWPIC_ANIM
|
||||
const STATUS_AFFECTED_ANIM
|
||||
const ANIM_A8
|
||||
const ANIM_A9
|
||||
const ENEMY_HUD_SHAKE_ANIM
|
||||
const TRADE_BALL_DROP_ANIM
|
||||
const TRADE_BALL_SHAKE_ANIM
|
||||
const TRADE_BALL_TILT_ANIM
|
||||
const TRADE_BALL_POOF_ANIM
|
||||
const XSTATITEM_ANIM ; use X Attack/Defense/Speed/Special
|
||||
const ANIM_AF
|
||||
const ANIM_B0
|
||||
const XSTATITEM_DUPLICATE_ANIM
|
||||
const SHRINKING_SQUARE_ANIM
|
||||
const ANIM_B1
|
||||
const ANIM_B2
|
||||
const ANIM_B3
|
||||
|
|
@ -210,18 +210,18 @@ DEF NUM_ATTACKS EQU const_value - 1
|
|||
const ANIM_B9
|
||||
const BURN_PSN_ANIM ; Plays when a monster is burned or poisoned
|
||||
const ANIM_BB
|
||||
const ANIM_BC
|
||||
const SLP_PLAYER_ANIM
|
||||
const SLP_ANIM ; sleeping monster
|
||||
const ANIM_BE
|
||||
const CONF_PLAYER_ANIM
|
||||
const CONF_ANIM ; confused monster
|
||||
const ANIM_C0
|
||||
const SLIDE_DOWN_ANIM
|
||||
const TOSS_ANIM ; toss Poké Ball
|
||||
const SHAKE_ANIM ; shaking Poké Ball when catching monster
|
||||
const POOF_ANIM ; puff of smoke
|
||||
const BLOCKBALL_ANIM ; trainer knocks away Poké Ball
|
||||
const GREATTOSS_ANIM ; toss Great Ball
|
||||
const ULTRATOSS_ANIM ; toss Ultra Ball or Master Ball
|
||||
const ANIM_C7
|
||||
const SHAKE_SCREEN_ANIM
|
||||
const HIDEPIC_ANIM ; monster disappears
|
||||
const ROCK_ANIM ; throw rock
|
||||
const BAIT_ANIM ; throw bait
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ DEF BASE_TMHM rb (NUM_TM_HM + 7) / 8
|
|||
rb_skip
|
||||
DEF BASE_DATA_SIZE EQU _RS
|
||||
|
||||
; party_struct members (see macros/wram.asm)
|
||||
; party_struct members (see macros/ram.asm)
|
||||
rsreset
|
||||
DEF MON_SPECIES rb
|
||||
DEF MON_HP rw
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ DEF SLOTS_SOMEONESKEYS EQU $ff
|
|||
const_def
|
||||
const TRADE_FOR_TERRY
|
||||
const TRADE_FOR_MARCEL
|
||||
const TRADE_FOR_CHIKUCHIKU
|
||||
const TRADE_FOR_CHIKUCHIKU ; unused
|
||||
const TRADE_FOR_SAILOR
|
||||
const TRADE_FOR_DUX
|
||||
const TRADE_FOR_MARC
|
||||
|
|
@ -57,7 +57,7 @@ DEF NUM_NPC_TRADES EQU const_value
|
|||
; InGameTradeTextPointers indexes (see engine/events/in_game_trades.asm)
|
||||
const_def
|
||||
const TRADE_DIALOGSET_CASUAL
|
||||
const TRADE_DIALOGSET_POLITE
|
||||
const TRADE_DIALOGSET_EVOLUTION
|
||||
const TRADE_DIALOGSET_HAPPY
|
||||
const TRADE_DIALOGSET_SELF
|
||||
const TRADE_DIALOGSET_REGION ; consistency with LGPE
|
||||
|
|
|
|||
41
constants/sprite_set_constants.asm
Normal file
41
constants/sprite_set_constants.asm
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
; sprite set ids
|
||||
; indexes for SpriteSets (see data/maps/sprite_sets.asm)
|
||||
; values for MapSpriteSets and SplitMapSpriteSets (see data/maps/sprite_sets.asm)
|
||||
const_def 1
|
||||
const SPRITESET_PALLET_VIRIDIAN ; 01
|
||||
const SPRITESET_PEWTER_CERULEAN ; 02
|
||||
const SPRITESET_LAVENDER ; 03
|
||||
const SPRITESET_VERMILION ; 04
|
||||
const SPRITESET_CELADON ; 05
|
||||
const SPRITESET_INDIGO ; 06
|
||||
const SPRITESET_SAFFRON ; 07
|
||||
const SPRITESET_SILENCE_BRIDGE ; 08
|
||||
const SPRITESET_CYCLING_ROAD ; 09
|
||||
const SPRITESET_FUCHSIA ; 0a
|
||||
DEF NUM_SPRITE_SETS EQU const_value - 1
|
||||
|
||||
; split sprite set ids
|
||||
; indexes for SplitMapSpriteSets (see data/maps/sprite_sets.asm)
|
||||
; values for MapSpriteSets (see data/maps/sprite_sets.asm)
|
||||
const_next $f1
|
||||
DEF FIRST_SPLIT_SET EQU const_value
|
||||
const SPLITSET_ROUTE_2 ; f1
|
||||
const SPLITSET_ROUTE_10 ; f2
|
||||
const SPLITSET_ROUTE_11 ; f3
|
||||
const SPLITSET_ROUTE_12 ; f4
|
||||
const SPLITSET_ROUTE_15 ; f5
|
||||
const SPLITSET_ROUTE_16 ; f6
|
||||
const SPLITSET_ROUTE_18 ; f7
|
||||
const SPLITSET_ROUTE_20 ; f8
|
||||
const SPLITSET_ROUTE_5 ; f9
|
||||
const SPLITSET_ROUTE_6 ; fa
|
||||
const SPLITSET_ROUTE_7 ; fb
|
||||
const SPLITSET_ROUTE_8 ; fc
|
||||
DEF NUM_SPLIT_SETS EQU const_value - FIRST_SPLIT_SET
|
||||
|
||||
; split directions
|
||||
DEF EAST_WEST EQU 1
|
||||
DEF NORTH_SOUTH EQU 2
|
||||
|
||||
; each sprite set has 9 walking sprites and 2 still sprites
|
||||
DEF SPRITE_SET_LENGTH EQU 9 + 2
|
||||
|
|
@ -13,7 +13,9 @@ DEF PHYSICAL EQU const_value
|
|||
const GHOST ; $08
|
||||
const STEEL ; $09
|
||||
|
||||
DEF UNUSED_TYPES EQU const_value
|
||||
const_next 20
|
||||
DEF UNUSED_TYPES_END EQU const_value
|
||||
|
||||
DEF SPECIAL EQU const_value
|
||||
const FIRE ; $14
|
||||
|
|
|
|||
|
|
@ -1,91 +1,91 @@
|
|||
SubanimationPointers:
|
||||
table_width 2, SubanimationPointers
|
||||
dw Subanimation00
|
||||
dw Subanimation01
|
||||
dw Subanimation02
|
||||
dw Subanimation03
|
||||
dw Subanimation04
|
||||
dw Subanimation05
|
||||
dw Subanimation06
|
||||
dw Subanimation07
|
||||
dw Subanimation08
|
||||
dw Subanimation09
|
||||
dw Subanimation0a
|
||||
dw Subanimation0b
|
||||
dw Subanimation0c
|
||||
dw Subanimation0d
|
||||
dw Subanimation0e
|
||||
dw Subanimation0f
|
||||
dw Subanimation10
|
||||
dw Subanimation11
|
||||
dw Subanimation12
|
||||
dw Subanimation13
|
||||
dw Subanimation14
|
||||
dw Subanimation15
|
||||
dw Subanimation16
|
||||
dw Subanimation17
|
||||
dw Subanimation18
|
||||
dw Subanimation19
|
||||
dw Subanimation1a
|
||||
dw Subanimation1b
|
||||
dw Subanimation1c
|
||||
dw Subanimation1d
|
||||
dw Subanimation1e
|
||||
dw Subanimation1f
|
||||
dw Subanimation20
|
||||
dw Subanimation21
|
||||
dw Subanimation22
|
||||
dw Subanimation23
|
||||
dw Subanimation24
|
||||
dw Subanimation25
|
||||
dw Subanimation26
|
||||
dw Subanimation27
|
||||
dw Subanimation28
|
||||
dw Subanimation29
|
||||
dw Subanimation2a
|
||||
dw Subanimation2b
|
||||
dw Subanimation2c
|
||||
dw Subanimation2d
|
||||
dw Subanimation2e
|
||||
dw Subanimation2f
|
||||
dw Subanimation30
|
||||
dw Subanimation31
|
||||
dw Subanimation32
|
||||
dw Subanimation33
|
||||
dw Subanimation34
|
||||
dw Subanimation35
|
||||
dw Subanimation36
|
||||
dw Subanimation37
|
||||
dw Subanimation38
|
||||
dw Subanimation39
|
||||
dw Subanimation3a
|
||||
dw Subanimation3b
|
||||
dw Subanimation3c
|
||||
dw Subanimation3d
|
||||
dw Subanimation3e
|
||||
dw Subanimation3f
|
||||
dw Subanimation40
|
||||
dw Subanimation41
|
||||
dw Subanimation42
|
||||
dw Subanimation43
|
||||
dw Subanimation44
|
||||
dw Subanimation45
|
||||
dw Subanimation46
|
||||
dw Subanimation47
|
||||
dw Subanimation48
|
||||
dw Subanimation49
|
||||
dw Subanimation4a
|
||||
dw Subanimation4b
|
||||
dw Subanimation4c
|
||||
dw Subanimation4d
|
||||
dw Subanimation4e
|
||||
dw Subanimation4f
|
||||
dw Subanimation50
|
||||
dw Subanimation51
|
||||
dw Subanimation52
|
||||
dw Subanimation53
|
||||
dw Subanimation54
|
||||
dw Subanimation55
|
||||
dw Subanim_0Star
|
||||
dw Subanim_0StarTwice
|
||||
dw Subanim_0StarThrice
|
||||
dw Subanim_0StarDescending
|
||||
dw Subanim_1StarBigMoving
|
||||
dw Subanim_1StarBig
|
||||
dw Subanim_0BallTossHigh
|
||||
dw Subanim_0BallTossMiddle
|
||||
dw Subanim_0BallTossLow
|
||||
dw Subanim_0BallShakeEnemy
|
||||
dw Subanim_0BallPoofEnemy
|
||||
dw Subanim_0BallBlock
|
||||
dw Subanim_1FlameColumn1
|
||||
dw Subanim_1FlameColumn2
|
||||
dw Subanim_1FlameColumn3
|
||||
dw Subanim_0Scratches
|
||||
dw Subanim_1Tornado
|
||||
dw Subanim_1Flames
|
||||
dw Subanim_0Heart_1Music
|
||||
dw Subanim_1BlobToss
|
||||
dw Subanim_1BlobDripEnemy
|
||||
dw Subanim_1Shout
|
||||
dw Subanim_0Slice
|
||||
dw Subanim_0BirdiesCirclingEnemy
|
||||
dw Subanim_1SwordsCircling
|
||||
dw Subanim_1CloudToss
|
||||
dw Subanim_0WaterColumns
|
||||
dw Subanim_1SeedToss
|
||||
dw Subanim_1SeedLand
|
||||
dw Subanim_0RocksLift
|
||||
dw Subanim_0RocksToss
|
||||
dw Subanim_1FlameBeam
|
||||
dw Subanim_1FlameStar
|
||||
dw Subanim_0Circles_1Squares_CenteringEnemy
|
||||
dw Subanim_0Circle_1Square_TossBack
|
||||
dw Subanim_0Bind
|
||||
dw Subanim_0StatusParalyzed
|
||||
dw Subanim_0StatusConfused
|
||||
dw Subanim_0StatusConfusedEnemy
|
||||
dw Subanim_0StatusPoisoned
|
||||
dw Subanim_1Sand
|
||||
dw Subanim_1LightningBall
|
||||
dw Subanim_0SliceBothSides
|
||||
dw Subanim_1Lightning
|
||||
dw Subanim_0WaterDroplets
|
||||
dw Subanim_0CirclesCentering
|
||||
dw Subanim_0Beam
|
||||
dw Subanim_0IceRise
|
||||
dw Subanim_0RocksFallEnemy
|
||||
dw Subanim_0SoundWave
|
||||
dw Subanim_0Circle_1Square_HalfToss ; unused
|
||||
dw Subanim_1Barrier
|
||||
dw Subanim_1Selfdestruct
|
||||
dw Subanim_0WaterBubbles
|
||||
dw Subanim_0CirclesFalling
|
||||
dw Subanim_0StringShot
|
||||
dw Subanim_0IceFall
|
||||
dw Subanim_0Circle_1Square_Appears ; unused
|
||||
dw Subanim_0StatusSleep
|
||||
dw Subanim_0StatusSleepEnemy
|
||||
dw Subanim_0Water_1Fire_Barrier ; unused
|
||||
dw Subanim_0Water_1Fire_Geyser ; unused
|
||||
dw Subanim_1StarBigToss
|
||||
dw Subanim_1StarsSmallToss
|
||||
dw Subanim_1MusicCirclingEnemy
|
||||
dw Subanim_1CircleBlackToss
|
||||
dw Subanim_1ExplosionSmallEnemy
|
||||
dw Subanim_0Circle_1Square_Closing
|
||||
dw Subanim_1LeavesToss
|
||||
dw Subanim_0HornJabTwice
|
||||
dw Subanim_0HornJabThrice
|
||||
dw Subanim_0BallPoof
|
||||
dw Subanim_2TradeBallDrop
|
||||
dw Subanim_2TradeBallShake
|
||||
dw Subanim_2TradeBallAppear
|
||||
dw Subanim_2TradeBallPoof
|
||||
dw Subanim_0EggShaking
|
||||
dw Subanim_1TriangleToss
|
||||
dw Subanim_1SphereBig
|
||||
dw Subanim_1SphereBigRise
|
||||
dw Subanim_1SphereBigFall
|
||||
dw Subanim_0Shell
|
||||
dw Subanim_0CoinBounce
|
||||
dw Subanim_0SafariRock
|
||||
dw Subanim_0SafariBait
|
||||
dw Subanim_0StarHigh
|
||||
assert_table_length NUM_SUBANIMS
|
||||
|
||||
; format:
|
||||
|
|
@ -98,17 +98,17 @@ MACRO subanim
|
|||
db (\1 << 5) | \2
|
||||
ENDM
|
||||
|
||||
Subanimation04:
|
||||
Subanim_1StarBigMoving:
|
||||
subanim SUBANIMTYPE_HFLIP, 3
|
||||
db FRAMEBLOCK_02, BASECOORD_1A, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_02, BASECOORD_10, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_02, BASECOORD_03, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation05:
|
||||
Subanim_1StarBig:
|
||||
subanim SUBANIMTYPE_HFLIP, 1
|
||||
db FRAMEBLOCK_02, BASECOORD_10, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation08:
|
||||
Subanim_0BallTossLow:
|
||||
subanim SUBANIMTYPE_NORMAL, 11
|
||||
db FRAMEBLOCK_03, BASECOORD_30, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_03, BASECOORD_44, FRAMEBLOCKMODE_00
|
||||
|
|
@ -122,7 +122,7 @@ Subanimation08:
|
|||
db FRAMEBLOCK_03, BASECOORD_A1, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_03, BASECOORD_34, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation07:
|
||||
Subanim_0BallTossMiddle:
|
||||
subanim SUBANIMTYPE_NORMAL, 11
|
||||
db FRAMEBLOCK_03, BASECOORD_30, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_03, BASECOORD_A2, FRAMEBLOCKMODE_00
|
||||
|
|
@ -136,7 +136,7 @@ Subanimation07:
|
|||
db FRAMEBLOCK_03, BASECOORD_A6, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_03, BASECOORD_34, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation06:
|
||||
Subanim_0BallTossHigh:
|
||||
subanim SUBANIMTYPE_NORMAL, 11
|
||||
db FRAMEBLOCK_03, BASECOORD_30, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_03, BASECOORD_A2, FRAMEBLOCKMODE_00
|
||||
|
|
@ -150,14 +150,14 @@ Subanimation06:
|
|||
db FRAMEBLOCK_03, BASECOORD_A9, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_03, BASECOORD_34, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation09:
|
||||
Subanim_0BallShakeEnemy:
|
||||
subanim SUBANIMTYPE_NORMAL, 4
|
||||
db FRAMEBLOCK_03, BASECOORD_21, FRAMEBLOCKMODE_04
|
||||
db FRAMEBLOCK_04, BASECOORD_21, FRAMEBLOCKMODE_04
|
||||
db FRAMEBLOCK_03, BASECOORD_21, FRAMEBLOCKMODE_04
|
||||
db FRAMEBLOCK_05, BASECOORD_21, FRAMEBLOCKMODE_04
|
||||
|
||||
Subanimation0a:
|
||||
Subanim_0BallPoofEnemy:
|
||||
subanim SUBANIMTYPE_HFLIP, 6
|
||||
db FRAMEBLOCK_06, BASECOORD_1B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_07, BASECOORD_1B, FRAMEBLOCKMODE_00
|
||||
|
|
@ -166,18 +166,18 @@ Subanimation0a:
|
|||
db FRAMEBLOCK_0A, BASECOORD_15, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_0A, BASECOORD_15, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation0b:
|
||||
Subanim_0BallBlock:
|
||||
subanim SUBANIMTYPE_NORMAL, 4
|
||||
db FRAMEBLOCK_01, BASECOORD_2D, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_03, BASECOORD_2F, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_03, BASECOORD_35, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_03, BASECOORD_4D, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation55:
|
||||
Subanim_0StarHigh:
|
||||
subanim SUBANIMTYPE_HFLIP, 1
|
||||
db FRAMEBLOCK_01, BASECOORD_9D, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation11:
|
||||
Subanim_1Flames:
|
||||
subanim SUBANIMTYPE_HFLIP, 12
|
||||
db FRAMEBLOCK_0B, BASECOORD_26, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_0C, BASECOORD_26, FRAMEBLOCKMODE_00
|
||||
|
|
@ -192,7 +192,7 @@ Subanimation11:
|
|||
db FRAMEBLOCK_0B, BASECOORD_27, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_0C, BASECOORD_27, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation2b:
|
||||
Subanim_1Lightning:
|
||||
subanim SUBANIMTYPE_HFLIP, 11
|
||||
db FRAMEBLOCK_0D, BASECOORD_03, FRAMEBLOCKMODE_03
|
||||
db FRAMEBLOCK_0E, BASECOORD_03, FRAMEBLOCKMODE_03
|
||||
|
|
@ -206,7 +206,7 @@ Subanimation2b:
|
|||
db FRAMEBLOCK_11, BASECOORD_1B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_11, BASECOORD_1B, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation2c:
|
||||
Subanim_0WaterDroplets:
|
||||
subanim SUBANIMTYPE_HFLIP, 12
|
||||
db FRAMEBLOCK_12, BASECOORD_01, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_12, BASECOORD_0F, FRAMEBLOCKMODE_00
|
||||
|
|
@ -221,7 +221,7 @@ Subanimation2c:
|
|||
db FRAMEBLOCK_16, BASECOORD_38, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_16, BASECOORD_38, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation12:
|
||||
Subanim_0Heart_1Music:
|
||||
subanim SUBANIMTYPE_COORDFLIP, 9
|
||||
db FRAMEBLOCK_17, BASECOORD_30, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_17, BASECOORD_39, FRAMEBLOCKMODE_00
|
||||
|
|
@ -233,35 +233,35 @@ Subanimation12:
|
|||
db FRAMEBLOCK_17, BASECOORD_3F, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_17, BASECOORD_1F, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation00:
|
||||
Subanim_0Star:
|
||||
subanim SUBANIMTYPE_HFLIP, 1
|
||||
db FRAMEBLOCK_01, BASECOORD_17, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation01:
|
||||
Subanim_0StarTwice:
|
||||
subanim SUBANIMTYPE_HFLIP, 2
|
||||
db FRAMEBLOCK_01, BASECOORD_0F, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_01, BASECOORD_1D, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation02:
|
||||
Subanim_0StarThrice:
|
||||
subanim SUBANIMTYPE_HFLIP, 3
|
||||
db FRAMEBLOCK_01, BASECOORD_12, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_01, BASECOORD_15, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_01, BASECOORD_1C, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation03:
|
||||
Subanim_0StarDescending:
|
||||
subanim SUBANIMTYPE_HFLIP, 4
|
||||
db FRAMEBLOCK_01, BASECOORD_0B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_01, BASECOORD_11, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_01, BASECOORD_18, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_01, BASECOORD_1D, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation0c:
|
||||
Subanim_1FlameColumn1:
|
||||
subanim SUBANIMTYPE_HFLIP, 3
|
||||
db FRAMEBLOCK_0C, BASECOORD_20, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_0C, BASECOORD_21, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_0C, BASECOORD_23, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation0d:
|
||||
Subanim_1FlameColumn2:
|
||||
subanim SUBANIMTYPE_HFLIP, 6
|
||||
db FRAMEBLOCK_0C, BASECOORD_20, FRAMEBLOCKMODE_02
|
||||
db FRAMEBLOCK_0C, BASECOORD_15, FRAMEBLOCKMODE_00
|
||||
|
|
@ -270,7 +270,7 @@ Subanimation0d:
|
|||
db FRAMEBLOCK_0C, BASECOORD_23, FRAMEBLOCKMODE_02
|
||||
db FRAMEBLOCK_0C, BASECOORD_19, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation0e:
|
||||
Subanim_1FlameColumn3:
|
||||
subanim SUBANIMTYPE_HFLIP, 9
|
||||
db FRAMEBLOCK_0C, BASECOORD_20, FRAMEBLOCKMODE_02
|
||||
db FRAMEBLOCK_0C, BASECOORD_15, FRAMEBLOCKMODE_02
|
||||
|
|
@ -282,7 +282,7 @@ Subanimation0e:
|
|||
db FRAMEBLOCK_0C, BASECOORD_19, FRAMEBLOCKMODE_02
|
||||
db FRAMEBLOCK_0C, BASECOORD_0C, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation1f:
|
||||
Subanim_1FlameBeam:
|
||||
subanim SUBANIMTYPE_REVERSE, 5
|
||||
db FRAMEBLOCK_0C, BASECOORD_30, FRAMEBLOCKMODE_03
|
||||
db FRAMEBLOCK_0C, BASECOORD_40, FRAMEBLOCKMODE_03
|
||||
|
|
@ -290,7 +290,7 @@ Subanimation1f:
|
|||
db FRAMEBLOCK_0C, BASECOORD_42, FRAMEBLOCKMODE_03
|
||||
db FRAMEBLOCK_0C, BASECOORD_21, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation2e:
|
||||
Subanim_0Beam:
|
||||
subanim SUBANIMTYPE_HVFLIP, 14
|
||||
db FRAMEBLOCK_18, BASECOORD_43, FRAMEBLOCKMODE_02
|
||||
db FRAMEBLOCK_75, BASECOORD_52, FRAMEBLOCKMODE_04
|
||||
|
|
@ -307,14 +307,14 @@ Subanimation2e:
|
|||
db FRAMEBLOCK_1E, BASECOORD_43, FRAMEBLOCKMODE_02
|
||||
db FRAMEBLOCK_75, BASECOORD_1B, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation2f:
|
||||
Subanim_0IceRise:
|
||||
subanim SUBANIMTYPE_HFLIP, 4
|
||||
db FRAMEBLOCK_1F, BASECOORD_24, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_20, BASECOORD_20, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_21, BASECOORD_1A, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_22, BASECOORD_15, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation30:
|
||||
Subanim_0RocksFallEnemy:
|
||||
subanim SUBANIMTYPE_HFLIP, 18
|
||||
db FRAMEBLOCK_23, BASECOORD_00, FRAMEBLOCKMODE_02
|
||||
db FRAMEBLOCK_23, BASECOORD_02, FRAMEBLOCKMODE_02
|
||||
|
|
@ -335,7 +335,7 @@ Subanimation30:
|
|||
db FRAMEBLOCK_24, BASECOORD_28, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_24, BASECOORD_28, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation0f:
|
||||
Subanim_0Scratches:
|
||||
subanim SUBANIMTYPE_HFLIP, 12
|
||||
db FRAMEBLOCK_26, BASECOORD_0E, FRAMEBLOCKMODE_02
|
||||
db FRAMEBLOCK_26, BASECOORD_16, FRAMEBLOCKMODE_02
|
||||
|
|
@ -350,7 +350,7 @@ Subanimation0f:
|
|||
db FRAMEBLOCK_29, BASECOORD_16, FRAMEBLOCKMODE_02
|
||||
db FRAMEBLOCK_29, BASECOORD_1C, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation16:
|
||||
Subanim_0Slice:
|
||||
subanim SUBANIMTYPE_HFLIP, 12
|
||||
db FRAMEBLOCK_2A, BASECOORD_05, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_2B, BASECOORD_05, FRAMEBLOCKMODE_02
|
||||
|
|
@ -365,7 +365,7 @@ Subanimation16:
|
|||
db FRAMEBLOCK_2C, BASECOORD_00, FRAMEBLOCKMODE_02
|
||||
db FRAMEBLOCK_2C, BASECOORD_00, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation10:
|
||||
Subanim_1Tornado:
|
||||
subanim SUBANIMTYPE_REVERSE, 8
|
||||
db FRAMEBLOCK_2D, BASECOORD_44, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_2E, BASECOORD_45, FRAMEBLOCKMODE_00
|
||||
|
|
@ -376,7 +376,7 @@ Subanimation10:
|
|||
db FRAMEBLOCK_2D, BASECOORD_2F, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_2E, BASECOORD_1A, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation31:
|
||||
Subanim_0SoundWave:
|
||||
subanim SUBANIMTYPE_HVFLIP, 10
|
||||
db FRAMEBLOCK_2F, BASECOORD_46, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_2F, BASECOORD_4A, FRAMEBLOCKMODE_00
|
||||
|
|
@ -389,7 +389,7 @@ Subanimation31:
|
|||
db FRAMEBLOCK_2F, BASECOORD_2E, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_2F, BASECOORD_51, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation13:
|
||||
Subanim_1BlobToss:
|
||||
subanim SUBANIMTYPE_REVERSE, 6
|
||||
db FRAMEBLOCK_30, BASECOORD_31, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_30, BASECOORD_32, FRAMEBLOCKMODE_00
|
||||
|
|
@ -398,7 +398,7 @@ Subanimation13:
|
|||
db FRAMEBLOCK_30, BASECOORD_0F, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_30, BASECOORD_10, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation14:
|
||||
Subanim_1BlobDripEnemy:
|
||||
subanim SUBANIMTYPE_HFLIP, 9
|
||||
db FRAMEBLOCK_30, BASECOORD_10, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_30, BASECOORD_10, FRAMEBLOCKMODE_03
|
||||
|
|
@ -410,7 +410,7 @@ Subanimation14:
|
|||
db FRAMEBLOCK_31, BASECOORD_22, FRAMEBLOCKMODE_04
|
||||
db FRAMEBLOCK_31, BASECOORD_27, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation41:
|
||||
Subanim_1CircleBlackToss:
|
||||
subanim SUBANIMTYPE_REVERSE, 5
|
||||
db FRAMEBLOCK_03, BASECOORD_31, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_03, BASECOORD_32, FRAMEBLOCKMODE_00
|
||||
|
|
@ -418,32 +418,32 @@ Subanimation41:
|
|||
db FRAMEBLOCK_03, BASECOORD_0E, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_03, BASECOORD_10, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation42:
|
||||
Subanim_1ExplosionSmallEnemy:
|
||||
subanim SUBANIMTYPE_HFLIP, 3
|
||||
db FRAMEBLOCK_SMALL_BLACK_CIRCLE, BASECOORD_08, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_LARGE_BLACK_CIRCLE, BASECOORD_08, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_5A, BASECOORD_08, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation15:
|
||||
Subanim_1Shout:
|
||||
subanim SUBANIMTYPE_HVFLIP, 2
|
||||
db FRAMEBLOCK_35, BASECOORD_52, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_35, BASECOORD_53, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation17:
|
||||
Subanim_0BirdiesCirclingEnemy:
|
||||
subanim SUBANIMTYPE_HFLIP, 4
|
||||
db FRAMEBLOCK_36, BASECOORD_54, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_36, BASECOORD_55, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_37, BASECOORD_56, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_37, BASECOORD_57, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation18:
|
||||
Subanim_1SwordsCircling:
|
||||
subanim SUBANIMTYPE_ENEMY, 4
|
||||
db FRAMEBLOCK_36, BASECOORD_54, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_36, BASECOORD_55, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_37, BASECOORD_56, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_37, BASECOORD_57, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation40:
|
||||
Subanim_1MusicCirclingEnemy:
|
||||
subanim SUBANIMTYPE_HFLIP, 6
|
||||
db FRAMEBLOCK_17, BASECOORD_54, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_17, BASECOORD_55, FRAMEBLOCKMODE_00
|
||||
|
|
@ -452,7 +452,7 @@ Subanimation40:
|
|||
db FRAMEBLOCK_17, BASECOORD_57, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_17, BASECOORD_13, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation19:
|
||||
Subanim_1CloudToss:
|
||||
subanim SUBANIMTYPE_REVERSE, 12
|
||||
db FRAMEBLOCK_38, BASECOORD_31, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_39, BASECOORD_31, FRAMEBLOCKMODE_00
|
||||
|
|
@ -467,7 +467,7 @@ Subanimation19:
|
|||
db FRAMEBLOCK_38, BASECOORD_10, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_39, BASECOORD_10, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation1a:
|
||||
Subanim_0WaterColumns:
|
||||
subanim SUBANIMTYPE_HFLIP, 16
|
||||
db FRAMEBLOCK_3A, BASECOORD_08, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_3B, BASECOORD_08, FRAMEBLOCKMODE_00
|
||||
|
|
@ -486,20 +486,20 @@ Subanimation1a:
|
|||
db FRAMEBLOCK_3E, BASECOORD_0B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_3F, BASECOORD_0B, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation1b:
|
||||
Subanim_1SeedToss:
|
||||
subanim SUBANIMTYPE_REVERSE, 4
|
||||
db FRAMEBLOCK_40, BASECOORD_31, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_40, BASECOORD_32, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_40, BASECOORD_92, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_40, BASECOORD_15, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation1c:
|
||||
Subanim_1SeedLand:
|
||||
subanim SUBANIMTYPE_HFLIP, 3
|
||||
db FRAMEBLOCK_41, BASECOORD_58, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_41, BASECOORD_59, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_41, BASECOORD_21, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation1d:
|
||||
Subanim_0RocksLift:
|
||||
subanim SUBANIMTYPE_ENEMY, 15
|
||||
db FRAMEBLOCK_24, BASECOORD_9A, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_23, BASECOORD_1B, FRAMEBLOCKMODE_02
|
||||
|
|
@ -517,22 +517,22 @@ Subanimation1d:
|
|||
db FRAMEBLOCK_25, BASECOORD_62, FRAMEBLOCKMODE_04
|
||||
db FRAMEBLOCK_25, BASECOORD_99, FRAMEBLOCKMODE_03
|
||||
|
||||
Subanimation1e:
|
||||
Subanim_0RocksToss:
|
||||
subanim SUBANIMTYPE_NORMAL, 1
|
||||
db FRAMEBLOCK_25, BASECOORD_75, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation20:
|
||||
Subanim_1FlameStar:
|
||||
subanim SUBANIMTYPE_HFLIP, 2
|
||||
db FRAMEBLOCK_42, BASECOORD_07, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_43, BASECOORD_07, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation21:
|
||||
Subanim_0Circles_1Squares_CenteringEnemy:
|
||||
subanim SUBANIMTYPE_HFLIP, 3
|
||||
db FRAMEBLOCK_44, BASECOORD_00, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_45, BASECOORD_08, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_46, BASECOORD_10, FRAMEBLOCKMODE_02
|
||||
|
||||
Subanimation22:
|
||||
Subanim_0Circle_1Square_TossBack:
|
||||
subanim SUBANIMTYPE_REVERSE, 11
|
||||
db FRAMEBLOCK_47, BASECOORD_10, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_47, BASECOORD_56, FRAMEBLOCKMODE_00
|
||||
|
|
@ -546,8 +546,8 @@ Subanimation22:
|
|||
db FRAMEBLOCK_47, BASECOORD_89, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_47, BASECOORD_B0, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation2d:
|
||||
subanim SUBANIMTYPE_COORDFLIP, 6
|
||||
Subanim_0CirclesCentering:
|
||||
subanim SUBANIMTYPE_COORDFLIP, 6 ; should be SUBANIMTYPE_HVFLIP
|
||||
db FRAMEBLOCK_44, BASECOORD_64, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_45, BASECOORD_65, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_46, BASECOORD_66, FRAMEBLOCKMODE_00
|
||||
|
|
@ -555,15 +555,15 @@ Subanimation2d:
|
|||
db FRAMEBLOCK_47, BASECOORD_66, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_47, BASECOORD_66, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation39:
|
||||
Subanim_0Circle_1Square_Appears:
|
||||
subanim SUBANIMTYPE_COORDFLIP, 1
|
||||
db FRAMEBLOCK_47, BASECOORD_67, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation4e:
|
||||
Subanim_1SphereBig:
|
||||
subanim SUBANIMTYPE_HFLIP, 1
|
||||
db FRAMEBLOCK_71, BASECOORD_0F, FRAMEBLOCKMODE_03
|
||||
|
||||
Subanimation4f:
|
||||
Subanim_1SphereBigRise:
|
||||
subanim SUBANIMTYPE_HFLIP, 7
|
||||
db FRAMEBLOCK_71, BASECOORD_0F, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_71, BASECOORD_08, FRAMEBLOCKMODE_00
|
||||
|
|
@ -573,7 +573,7 @@ Subanimation4f:
|
|||
db FRAMEBLOCK_73, BASECOORD_95, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_74, BASECOORD_95, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation50:
|
||||
Subanim_1SphereBigFall:
|
||||
subanim SUBANIMTYPE_HFLIP, 8
|
||||
db FRAMEBLOCK_74, BASECOORD_95, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_73, BASECOORD_95, FRAMEBLOCKMODE_00
|
||||
|
|
@ -584,7 +584,7 @@ Subanimation50:
|
|||
db FRAMEBLOCK_71, BASECOORD_0F, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_71, BASECOORD_16, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation29:
|
||||
Subanim_1LightningBall:
|
||||
subanim SUBANIMTYPE_HFLIP, 29
|
||||
db FRAMEBLOCK_SMALL_BLACK_CIRCLE, BASECOORD_0F, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_4A, BASECOORD_68, FRAMEBLOCKMODE_03
|
||||
|
|
@ -616,63 +616,63 @@ Subanimation29:
|
|||
db FRAMEBLOCK_4D, BASECOORD_2A, FRAMEBLOCKMODE_03
|
||||
db FRAMEBLOCK_LARGE_BLACK_CIRCLE, BASECOORD_6B, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation2a:
|
||||
Subanim_0SliceBothSides:
|
||||
subanim SUBANIMTYPE_HFLIP, 4
|
||||
db FRAMEBLOCK_4E, BASECOORD_2B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_4F, BASECOORD_2B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_50, BASECOORD_2B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_50, BASECOORD_2B, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation23:
|
||||
Subanim_0Bind:
|
||||
subanim SUBANIMTYPE_HFLIP, 2
|
||||
db FRAMEBLOCK_51, BASECOORD_2D, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_51, BASECOORD_6E, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation24:
|
||||
Subanim_0StatusParalyzed:
|
||||
subanim SUBANIMTYPE_ENEMY, 2
|
||||
db FRAMEBLOCK_51, BASECOORD_2D, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_51, BASECOORD_6E, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation25:
|
||||
Subanim_0StatusConfused:
|
||||
subanim SUBANIMTYPE_COORDFLIP, 2
|
||||
db FRAMEBLOCK_52, BASECOORD_71, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_52, BASECOORD_72, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation26:
|
||||
Subanim_0StatusConfusedEnemy:
|
||||
subanim SUBANIMTYPE_NORMAL, 2
|
||||
db FRAMEBLOCK_52, BASECOORD_01, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_52, BASECOORD_2C, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation3a:
|
||||
Subanim_0StatusSleep:
|
||||
subanim SUBANIMTYPE_COORDFLIP, 3
|
||||
db FRAMEBLOCK_53, BASECOORD_71, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_53, BASECOORD_7F, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_53, BASECOORD_81, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation3b:
|
||||
Subanim_0StatusSleepEnemy:
|
||||
subanim SUBANIMTYPE_NORMAL, 3
|
||||
db FRAMEBLOCK_53, BASECOORD_01, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_53, BASECOORD_15, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_53, BASECOORD_2C, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation27:
|
||||
Subanim_0StatusPoisoned:
|
||||
subanim SUBANIMTYPE_ENEMY, 2
|
||||
db FRAMEBLOCK_54, BASECOORD_01, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_54, BASECOORD_2C, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation28:
|
||||
Subanim_1Sand:
|
||||
subanim SUBANIMTYPE_HVFLIP, 3
|
||||
db FRAMEBLOCK_55, BASECOORD_73, FRAMEBLOCKMODE_03
|
||||
db FRAMEBLOCK_56, BASECOORD_73, FRAMEBLOCKMODE_03
|
||||
db FRAMEBLOCK_57, BASECOORD_73, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation32:
|
||||
Subanim_0Circle_1Square_HalfToss:
|
||||
subanim SUBANIMTYPE_COORDFLIP, 3
|
||||
db FRAMEBLOCK_47, BASECOORD_74, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_47, BASECOORD_43, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_47, BASECOORD_75, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation33:
|
||||
Subanim_1Barrier:
|
||||
subanim SUBANIMTYPE_HVFLIP, 6
|
||||
db FRAMEBLOCK_58, BASECOORD_76, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_34, BASECOORD_76, FRAMEBLOCKMODE_00
|
||||
|
|
@ -681,7 +681,7 @@ Subanimation33:
|
|||
db FRAMEBLOCK_58, BASECOORD_76, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_34, BASECOORD_76, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation3c:
|
||||
Subanim_0Water_1Fire_Barrier:
|
||||
subanim SUBANIMTYPE_COORDFLIP, 7
|
||||
db FRAMEBLOCK_59, BASECOORD_79, FRAMEBLOCKMODE_03
|
||||
db FRAMEBLOCK_59, BASECOORD_7B, FRAMEBLOCKMODE_03
|
||||
|
|
@ -691,7 +691,7 @@ Subanimation3c:
|
|||
db FRAMEBLOCK_59, BASECOORD_7C, FRAMEBLOCKMODE_03
|
||||
db FRAMEBLOCK_59, BASECOORD_76, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation3d:
|
||||
Subanim_0Water_1Fire_Geyser:
|
||||
subanim SUBANIMTYPE_NORMAL, 8
|
||||
db FRAMEBLOCK_3A, BASECOORD_4D, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_3B, BASECOORD_4D, FRAMEBLOCKMODE_00
|
||||
|
|
@ -702,7 +702,7 @@ Subanimation3d:
|
|||
db FRAMEBLOCK_3E, BASECOORD_4D, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_3F, BASECOORD_4D, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation34:
|
||||
Subanim_1Selfdestruct:
|
||||
subanim SUBANIMTYPE_HVFLIP, 21
|
||||
db FRAMEBLOCK_SMALL_BLACK_CIRCLE, BASECOORD_7D, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_LARGE_BLACK_CIRCLE, BASECOORD_7D, FRAMEBLOCKMODE_00
|
||||
|
|
@ -726,14 +726,14 @@ Subanimation34:
|
|||
db FRAMEBLOCK_LARGE_BLACK_CIRCLE, BASECOORD_82, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_5A, BASECOORD_82, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation35:
|
||||
Subanim_0WaterBubbles:
|
||||
subanim SUBANIMTYPE_HVFLIP, 4
|
||||
db FRAMEBLOCK_5B, BASECOORD_83, FRAMEBLOCKMODE_03
|
||||
db FRAMEBLOCK_5C, BASECOORD_84, FRAMEBLOCKMODE_03
|
||||
db FRAMEBLOCK_5D, BASECOORD_85, FRAMEBLOCKMODE_03
|
||||
db FRAMEBLOCK_5E, BASECOORD_09, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation36:
|
||||
Subanim_0CirclesFalling:
|
||||
subanim SUBANIMTYPE_HFLIP, 8
|
||||
db FRAMEBLOCK_5F, BASECOORD_2A, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_5F, BASECOORD_00, FRAMEBLOCKMODE_00
|
||||
|
|
@ -744,7 +744,7 @@ Subanimation36:
|
|||
db FRAMEBLOCK_62, BASECOORD_2A, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_62, BASECOORD_00, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation37:
|
||||
Subanim_0StringShot:
|
||||
subanim SUBANIMTYPE_HVFLIP, 10
|
||||
db FRAMEBLOCK_63, BASECOORD_89, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_64, BASECOORD_75, FRAMEBLOCKMODE_00
|
||||
|
|
@ -757,7 +757,7 @@ Subanimation37:
|
|||
db FRAMEBLOCK_65, BASECOORD_88, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_65, BASECOORD_1A, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation38:
|
||||
Subanim_0IceFall:
|
||||
subanim SUBANIMTYPE_HFLIP, 16
|
||||
db FRAMEBLOCK_66, BASECOORD_8A, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_66, BASECOORD_33, FRAMEBLOCKMODE_00
|
||||
|
|
@ -776,7 +776,7 @@ Subanimation38:
|
|||
db FRAMEBLOCK_66, BASECOORD_1E, FRAMEBLOCKMODE_04
|
||||
db FRAMEBLOCK_67, BASECOORD_29, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation3e:
|
||||
Subanim_1StarBigToss:
|
||||
subanim SUBANIMTYPE_REVERSE, 18
|
||||
db FRAMEBLOCK_02, BASECOORD_31, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_34, BASECOORD_31, FRAMEBLOCKMODE_00
|
||||
|
|
@ -797,7 +797,7 @@ Subanimation3e:
|
|||
db FRAMEBLOCK_34, BASECOORD_10, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_02, BASECOORD_10, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation3f:
|
||||
Subanim_1StarsSmallToss:
|
||||
subanim SUBANIMTYPE_COORDFLIP, 18
|
||||
db FRAMEBLOCK_68, BASECOORD_4B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_68, BASECOORD_8C, FRAMEBLOCKMODE_00
|
||||
|
|
@ -818,7 +818,7 @@ Subanimation3f:
|
|||
db FRAMEBLOCK_68, BASECOORD_23, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_68, BASECOORD_1F, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation44:
|
||||
Subanim_1LeavesToss:
|
||||
subanim SUBANIMTYPE_HVFLIP, 12
|
||||
db FRAMEBLOCK_69, BASECOORD_4B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_69, BASECOORD_8C, FRAMEBLOCKMODE_00
|
||||
|
|
@ -833,20 +833,20 @@ Subanimation44:
|
|||
db FRAMEBLOCK_69, BASECOORD_0C, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_69, BASECOORD_06, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation43:
|
||||
Subanim_0Circle_1Square_Closing:
|
||||
subanim SUBANIMTYPE_ENEMY, 3
|
||||
db FRAMEBLOCK_6A, BASECOORD_07, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_6B, BASECOORD_0F, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_6C, BASECOORD_17, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation45:
|
||||
Subanim_0HornJabTwice:
|
||||
subanim SUBANIMTYPE_HVFLIP, 4
|
||||
db FRAMEBLOCK_6D, BASECOORD_8B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_6D, BASECOORD_84, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_6D, BASECOORD_63, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_6D, BASECOORD_8C, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation46:
|
||||
Subanim_0HornJabThrice:
|
||||
subanim SUBANIMTYPE_HVFLIP, 6
|
||||
db FRAMEBLOCK_6D, BASECOORD_8B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_6D, BASECOORD_84, FRAMEBLOCKMODE_00
|
||||
|
|
@ -855,13 +855,13 @@ Subanimation46:
|
|||
db FRAMEBLOCK_6D, BASECOORD_0A, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_6D, BASECOORD_89, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation47:
|
||||
Subanim_0BallPoof:
|
||||
subanim SUBANIMTYPE_HVFLIP, 3
|
||||
db FRAMEBLOCK_06, BASECOORD_82, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_07, BASECOORD_82, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_08, BASECOORD_96, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation48:
|
||||
Subanim_2TradeBallDrop:
|
||||
subanim SUBANIMTYPE_NORMAL, 6
|
||||
db FRAMEBLOCK_03, BASECOORD_41, FRAMEBLOCKMODE_04
|
||||
db FRAMEBLOCK_03, BASECOORD_48, FRAMEBLOCKMODE_04
|
||||
|
|
@ -870,24 +870,24 @@ Subanimation48:
|
|||
db FRAMEBLOCK_05, BASECOORD_48, FRAMEBLOCKMODE_04
|
||||
db FRAMEBLOCK_03, BASECOORD_48, FRAMEBLOCKMODE_03
|
||||
|
||||
Subanimation49:
|
||||
Subanim_2TradeBallShake:
|
||||
subanim SUBANIMTYPE_NORMAL, 4
|
||||
db FRAMEBLOCK_04, BASECOORD_48, FRAMEBLOCKMODE_04
|
||||
db FRAMEBLOCK_03, BASECOORD_48, FRAMEBLOCKMODE_04
|
||||
db FRAMEBLOCK_05, BASECOORD_48, FRAMEBLOCKMODE_04
|
||||
db FRAMEBLOCK_03, BASECOORD_48, FRAMEBLOCKMODE_03
|
||||
|
||||
Subanimation4a:
|
||||
Subanim_2TradeBallAppear:
|
||||
subanim SUBANIMTYPE_NORMAL, 1
|
||||
db FRAMEBLOCK_04, BASECOORD_84, FRAMEBLOCKMODE_03
|
||||
|
||||
Subanimation4b:
|
||||
Subanim_2TradeBallPoof:
|
||||
subanim SUBANIMTYPE_NORMAL, 3
|
||||
db FRAMEBLOCK_06, BASECOORD_72, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_07, BASECOORD_72, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_08, BASECOORD_72, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation4c:
|
||||
Subanim_0EggShaking:
|
||||
subanim SUBANIMTYPE_COORDFLIP, 8
|
||||
db FRAMEBLOCK_6F, BASECOORD_30, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_6E, BASECOORD_30, FRAMEBLOCKMODE_00
|
||||
|
|
@ -898,7 +898,7 @@ Subanimation4c:
|
|||
db FRAMEBLOCK_70, BASECOORD_30, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_6E, BASECOORD_30, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation4d:
|
||||
Subanim_1TriangleToss:
|
||||
subanim SUBANIMTYPE_HVFLIP, 6
|
||||
db FRAMEBLOCK_32, BASECOORD_4B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_33, BASECOORD_4F, FRAMEBLOCKMODE_00
|
||||
|
|
@ -907,7 +907,7 @@ Subanimation4d:
|
|||
db FRAMEBLOCK_32, BASECOORD_19, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_33, BASECOORD_0D, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation51:
|
||||
Subanim_0Shell:
|
||||
subanim SUBANIMTYPE_ENEMY, 6
|
||||
db FRAMEBLOCK_76, BASECOORD_1B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_34, BASECOORD_1B, FRAMEBLOCKMODE_00
|
||||
|
|
@ -916,7 +916,7 @@ Subanimation51:
|
|||
db FRAMEBLOCK_76, BASECOORD_1B, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_34, BASECOORD_1B, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation52:
|
||||
Subanim_0CoinBounce:
|
||||
subanim SUBANIMTYPE_HFLIP, 7
|
||||
db FRAMEBLOCK_77, BASECOORD_25, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_77, BASECOORD_9B, FRAMEBLOCKMODE_00
|
||||
|
|
@ -926,7 +926,7 @@ Subanimation52:
|
|||
db FRAMEBLOCK_77, BASECOORD_50, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_77, BASECOORD_8C, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation53:
|
||||
Subanim_0SafariRock:
|
||||
subanim SUBANIMTYPE_NORMAL, 12
|
||||
db FRAMEBLOCK_78, BASECOORD_30, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_78, BASECOORD_A2, FRAMEBLOCKMODE_00
|
||||
|
|
@ -941,7 +941,7 @@ Subanimation53:
|
|||
db FRAMEBLOCK_78, BASECOORD_34, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_01, BASECOORD_9E, FRAMEBLOCKMODE_00
|
||||
|
||||
Subanimation54:
|
||||
Subanim_0SafariBait:
|
||||
subanim SUBANIMTYPE_NORMAL, 11
|
||||
db FRAMEBLOCK_79, BASECOORD_30, FRAMEBLOCKMODE_00
|
||||
db FRAMEBLOCK_79, BASECOORD_A2, FRAMEBLOCKMODE_00
|
||||
|
|
|
|||
|
|
@ -2,35 +2,35 @@ TradeMons:
|
|||
; entries correspond to TRADE_FOR_* constants
|
||||
table_width 3 + NAME_LENGTH, TradeMons
|
||||
; give mon, get mon, dialog id, nickname
|
||||
db POLIWHIRL, JYNX, TRADE_DIALOGSET_CASUAL, "LOLA@@@@@@@" ; Jynx trade replaces the useless Nidorino one
|
||||
db ABRA, MR_MIME, TRADE_DIALOGSET_CASUAL, "MARCEL@@@@@"
|
||||
db BUTTERFREE, BEEDRILL, TRADE_DIALOGSET_HAPPY, "CHIKUCHIKU@"
|
||||
db HAUNTER, KADABRA, TRADE_DIALOGSET_POLITE, "HARRY@@@@@@" ; New trade to complete the 4 main trade evos
|
||||
db SPEAROW, FARFETCHD, TRADE_DIALOGSET_HAPPY, "DUX@@@@@@@@"
|
||||
db PERSIAN, TAUROS, TRADE_DIALOGSET_CASUAL, "JIMBO@@@@@@" ; From JP Blue
|
||||
db MACHOKE, HAUNTER, TRADE_DIALOGSET_POLITE, "MICHELLE@@@" ; From JP Blue
|
||||
db KADABRA, GRAVELER, TRADE_DIALOGSET_POLITE, "JENNY@@@@@@" ; From JP Blue
|
||||
db VENONAT, TANGELA, TRADE_DIALOGSET_HAPPY, "CRINKLES@@@"
|
||||
db CUBONE, MACHOKE, TRADE_DIALOGSET_HAPPY, "RICKY@@@@@@" ; From Yellow
|
||||
db NO_MON, NO_MON, TRADE_DIALOGSET_SELF, "Unseen@@@@@" ; Celadon Uni Trader
|
||||
db RATICATE, RATICATE_A, TRADE_DIALOGSET_REGION, "RATICATE@@@" ; Viridian - LGPE trades begin here
|
||||
db GOLEM, GOLEM_A, TRADE_DIALOGSET_REGION, "GOLEM@@@@@@" ; Pewter
|
||||
db NINETALES, NINETALES_A, TRADE_DIALOGSET_REGION, "NINETALES@@" ; Cerulean
|
||||
db PERSIAN, PERSIAN_A, TRADE_DIALOGSET_REGION, "PERSIAN@@@@" ; Vermillion
|
||||
db DUGTRIO, DUGTRIO_A, TRADE_DIALOGSET_REGION, "DUGTRIO@@@@" ; Lavender
|
||||
db SANDSLASH, SANDSLASH_A, TRADE_DIALOGSET_REGION, "SANDSLASH@@" ; Celadon
|
||||
db RAICHU, RAICHU_A, TRADE_DIALOGSET_REGION, "RAICHU@@@@@" ; Saffron
|
||||
db MAROWAK, MAROWAK_A, TRADE_DIALOGSET_REGION, "MAROWAK@@@@" ; Fuschia
|
||||
db MUK, MUK_A, TRADE_DIALOGSET_REGION, "MUK-A@@@@@@" ; Cinnabar
|
||||
db EXEGGUTOR, EXEGGUTOR_A, TRADE_DIALOGSET_REGION, "EXEGGUTOR@@" ; Indigo
|
||||
db TAUROS, TAUROS_P, TRADE_DIALOGSET_TAUROSC, "TAUROS@@@@@" ; S.S. Anne begins here
|
||||
db TAUROS, TAUROS_PA, TRADE_DIALOGSET_TAUROSA, "TAUROS@@@@@"
|
||||
db TAUROS, TAUROS_PB, TRADE_DIALOGSET_TAUROSB, "TAUROS@@@@@"
|
||||
db RAPIDASH, RAPIDASH_G, TRADE_DIALOGSET_REGION, "RAPIDASH@@@"
|
||||
db SLOWBRO, SLOWBRO_G, TRADE_DIALOGSET_REGION, "SLOWBRO@@@@"
|
||||
db SLOWKING, SLOWKING_G, TRADE_DIALOGSET_REGION, "SLOWKING@@@"
|
||||
db WEEZING, WEEZING_G, TRADE_DIALOGSET_REGION, "WEEZING@@@@"
|
||||
db MR_MIME, MR_RIME, TRADE_DIALOGSET_CASUAL, "MR.RIME@@@@"
|
||||
db PERSIAN, PERRSERKER, TRADE_DIALOGSET_HAPPY, "PERRSERKER@"
|
||||
db MADAAMU, SIRFETCHD, TRADE_DIALOGSET_HAPPY, "SIRFETCH'D@"
|
||||
db POLIWHIRL, JYNX, TRADE_DIALOGSET_CASUAL, "LOLA@@@@@@@" ; Jynx trade replaces the useless Nidorino one
|
||||
db ABRA, MR_MIME, TRADE_DIALOGSET_CASUAL, "MARCEL@@@@@"
|
||||
db BUTTERFREE, BEEDRILL, TRADE_DIALOGSET_HAPPY, "CHIKUCHIKU@"
|
||||
db HAUNTER, KADABRA, TRADE_DIALOGSET_EVOLUTION, "HARRY@@@@@@" ; New trade to complete the 4 main trade evos
|
||||
db SPEAROW, FARFETCHD, TRADE_DIALOGSET_HAPPY, "DUX@@@@@@@@"
|
||||
db PERSIAN, TAUROS, TRADE_DIALOGSET_CASUAL, "JIMBO@@@@@@" ; From JP Blue
|
||||
db MACHOKE, HAUNTER, TRADE_DIALOGSET_EVOLUTION, "MICHELLE@@@" ; From JP Blue
|
||||
db KADABRA, GRAVELER, TRADE_DIALOGSET_EVOLUTION, "JENNY@@@@@@" ; From JP Blue
|
||||
db VENONAT, TANGELA, TRADE_DIALOGSET_HAPPY, "CRINKLES@@@"
|
||||
db CUBONE, MACHOKE, TRADE_DIALOGSET_HAPPY, "RICKY@@@@@@" ; From Yellow
|
||||
db NO_MON, NO_MON, TRADE_DIALOGSET_SELF, "Unseen@@@@@" ; Celadon Uni Trader
|
||||
db RATICATE, RATICATE_A, TRADE_DIALOGSET_REGION, "RATICATE@@@" ; Viridian - LGPE trades begin here
|
||||
db GOLEM, GOLEM_A, TRADE_DIALOGSET_REGION, "GOLEM@@@@@@" ; Pewter
|
||||
db NINETALES, NINETALES_A, TRADE_DIALOGSET_REGION, "NINETALES@@" ; Cerulean
|
||||
db PERSIAN, PERSIAN_A, TRADE_DIALOGSET_REGION, "PERSIAN@@@@" ; Vermillion
|
||||
db DUGTRIO, DUGTRIO_A, TRADE_DIALOGSET_REGION, "DUGTRIO@@@@" ; Lavender
|
||||
db SANDSLASH, SANDSLASH_A, TRADE_DIALOGSET_REGION, "SANDSLASH@@" ; Celadon
|
||||
db RAICHU, RAICHU_A, TRADE_DIALOGSET_REGION, "RAICHU@@@@@" ; Saffron
|
||||
db MAROWAK, MAROWAK_A, TRADE_DIALOGSET_REGION, "MAROWAK@@@@" ; Fuschia
|
||||
db MUK, MUK_A, TRADE_DIALOGSET_REGION, "MUK-A@@@@@@" ; Cinnabar
|
||||
db EXEGGUTOR, EXEGGUTOR_A, TRADE_DIALOGSET_REGION, "EXEGGUTOR@@" ; Indigo
|
||||
db TAUROS, TAUROS_P, TRADE_DIALOGSET_TAUROSC, "TAUROS@@@@@" ; S.S. Anne begins here
|
||||
db TAUROS, TAUROS_PA, TRADE_DIALOGSET_TAUROSA, "TAUROS@@@@@"
|
||||
db TAUROS, TAUROS_PB, TRADE_DIALOGSET_TAUROSB, "TAUROS@@@@@"
|
||||
db RAPIDASH, RAPIDASH_G, TRADE_DIALOGSET_REGION, "RAPIDASH@@@"
|
||||
db SLOWBRO, SLOWBRO_G, TRADE_DIALOGSET_REGION, "SLOWBRO@@@@"
|
||||
db SLOWKING, SLOWKING_G, TRADE_DIALOGSET_REGION, "SLOWKING@@@"
|
||||
db WEEZING, WEEZING_G, TRADE_DIALOGSET_REGION, "WEEZING@@@@"
|
||||
db MR_MIME, MR_RIME, TRADE_DIALOGSET_CASUAL, "MR.RIME@@@@"
|
||||
db PERSIAN, PERRSERKER, TRADE_DIALOGSET_HAPPY, "PERRSERKER@"
|
||||
db MADAAMU, SIRFETCHD, TRADE_DIALOGSET_HAPPY, "SIRFETCH'D@"
|
||||
assert_table_length NUM_NPC_TRADES
|
||||
|
|
|
|||
|
|
@ -1,74 +1,72 @@
|
|||
; Valid sprite IDs for each outdoor map.
|
||||
|
||||
MapSpriteSets:
|
||||
table_width 1, MapSpriteSets
|
||||
db $01 ; PALLET_TOWN
|
||||
db $01 ; VIRIDIAN_CITY
|
||||
db $02 ; PEWTER_CITY
|
||||
db $02 ; CERULEAN_CITY
|
||||
db $04 ; VERMILION_CITY
|
||||
db $03 ; LAVENDER_TOWN
|
||||
db $05 ; CELADON_CITY
|
||||
db $05 ; CELADON_UNIVERSITY_OUTSIDE
|
||||
db $0a ; FUCHSIA_CITY
|
||||
db $07 ; SAFFRON_CITY
|
||||
db $01 ; CINNABAR_ISLAND
|
||||
db $06 ; INDIGO_PLATEAU
|
||||
db $01 ; CITRINE_CITY
|
||||
db $01 ; ROUTE_1
|
||||
db $f1 ; ROUTE_2
|
||||
db $02 ; ROUTE_3
|
||||
db $02 ; ROUTE_4
|
||||
db $f9 ; ROUTE_5
|
||||
db $fa ; ROUTE_6
|
||||
db $fb ; ROUTE_7
|
||||
db $fc ; ROUTE_8
|
||||
db $02 ; ROUTE_9
|
||||
db $f2 ; ROUTE_10
|
||||
db $f3 ; ROUTE_11
|
||||
db $f4 ; ROUTE_12
|
||||
db $08 ; ROUTE_13
|
||||
db $08 ; ROUTE_14
|
||||
db $f5 ; ROUTE_15
|
||||
db $f6 ; ROUTE_16
|
||||
db $09 ; ROUTE_17
|
||||
db $f7 ; ROUTE_18
|
||||
db $0a ; ROUTE_19
|
||||
db $f8 ; ROUTE_20
|
||||
db $01 ; ROUTE_21
|
||||
db $01 ; ROUTE_22
|
||||
db $06 ; ROUTE_23
|
||||
db $02 ; ROUTE_24
|
||||
db $02 ; ROUTE_25
|
||||
db SPRITESET_PALLET_VIRIDIAN ; PALLET_TOWN
|
||||
db SPRITESET_PALLET_VIRIDIAN ; VIRIDIAN_CITY
|
||||
db SPRITESET_PEWTER_CERULEAN ; PEWTER_CITY
|
||||
db SPRITESET_PEWTER_CERULEAN ; CERULEAN_CITY
|
||||
db SPRITESET_VERMILION ; VERMILION_CITY
|
||||
db SPRITESET_LAVENDER ; LAVENDER_TOWN
|
||||
db SPRITESET_CELADON ; CELADON_CITY
|
||||
db SPRITESET_CELADON ; CELADON_UNIVERSITY_OUTSIDE
|
||||
db SPRITESET_FUCHSIA ; FUCHSIA_CITY
|
||||
db SPRITESET_SAFFRON ; SAFFRON_CITY
|
||||
db SPRITESET_PALLET_VIRIDIAN ; CINNABAR_ISLAND
|
||||
db SPRITESET_INDIGO ; INDIGO_PLATEAU
|
||||
db SPRITESET_PALLET_VIRIDIAN ; CITRINE_CITY
|
||||
db SPRITESET_PALLET_VIRIDIAN ; ROUTE_1
|
||||
db SPLITSET_ROUTE_2 ; ROUTE_2
|
||||
db SPRITESET_PEWTER_CERULEAN ; ROUTE_3
|
||||
db SPRITESET_PEWTER_CERULEAN ; ROUTE_4
|
||||
db SPLITSET_ROUTE_5 ; ROUTE_5
|
||||
db SPLITSET_ROUTE_6 ; ROUTE_6
|
||||
db SPLITSET_ROUTE_7 ; ROUTE_7
|
||||
db SPLITSET_ROUTE_8 ; ROUTE_8
|
||||
db SPRITESET_PEWTER_CERULEAN ; ROUTE_9
|
||||
db SPLITSET_ROUTE_10 ; ROUTE_10
|
||||
db SPLITSET_ROUTE_11 ; ROUTE_11
|
||||
db SPLITSET_ROUTE_12 ; ROUTE_12
|
||||
db SPRITESET_SILENCE_BRIDGE ; ROUTE_13
|
||||
db SPRITESET_SILENCE_BRIDGE ; ROUTE_14
|
||||
db SPLITSET_ROUTE_15 ; ROUTE_15
|
||||
db SPLITSET_ROUTE_16 ; ROUTE_16
|
||||
db SPRITESET_CYCLING_ROAD ; ROUTE_17
|
||||
db SPLITSET_ROUTE_18 ; ROUTE_18
|
||||
db SPRITESET_FUCHSIA ; ROUTE_19
|
||||
db SPLITSET_ROUTE_20 ; ROUTE_20
|
||||
db SPRITESET_PALLET_VIRIDIAN ; ROUTE_21
|
||||
db SPRITESET_PALLET_VIRIDIAN ; ROUTE_22
|
||||
db SPRITESET_INDIGO ; ROUTE_23
|
||||
db SPRITESET_PEWTER_CERULEAN ; ROUTE_24
|
||||
db SPRITESET_PEWTER_CERULEAN ; ROUTE_25
|
||||
assert_table_length FIRST_INDOOR_MAP
|
||||
|
||||
DEF EAST_WEST EQU 1
|
||||
DEF NORTH_SOUTH EQU 2
|
||||
|
||||
; Format:
|
||||
; 00: determines whether the map is split EAST_WEST or NORTH_SOUTH
|
||||
; 01: coordinate of dividing line
|
||||
; 02: sprite set ID if in the West or North side
|
||||
; 03: sprite set ID if in the East or South side
|
||||
; #1: whether the map is split EAST_WEST or NORTH_SOUTH
|
||||
; #2: coordinate of dividing line
|
||||
; #3: sprite set ID if on the west or north side
|
||||
; #4: sprite set ID if on the east or south side
|
||||
SplitMapSpriteSets:
|
||||
db NORTH_SOUTH, 37, $02, $01 ; $f1
|
||||
db NORTH_SOUTH, 50, $02, $03 ; $f2
|
||||
db EAST_WEST, 57, $04, $08 ; $f3
|
||||
db NORTH_SOUTH, 21, $03, $08 ; $f4
|
||||
db EAST_WEST, 8, $0A, $08 ; $f5
|
||||
db EAST_WEST, 24, $09, $05 ; $f6
|
||||
db EAST_WEST, 34, $09, $0A ; $f7
|
||||
db EAST_WEST, 53, $01, $0A ; $f8
|
||||
db NORTH_SOUTH, 33, $02, $07 ; $f9
|
||||
db NORTH_SOUTH, 2, $07, $04 ; $fa
|
||||
db EAST_WEST, 17, $05, $07 ; $fb
|
||||
db EAST_WEST, 3, $07, $03 ; $fc
|
||||
table_width 4, SplitMapSpriteSets
|
||||
db NORTH_SOUTH, 37, SPRITESET_PEWTER_CERULEAN, SPRITESET_PALLET_VIRIDIAN ; SPLITSET_ROUTE_2
|
||||
db NORTH_SOUTH, 50, SPRITESET_PEWTER_CERULEAN, SPRITESET_LAVENDER ; SPLITSET_ROUTE_10
|
||||
db EAST_WEST, 57, SPRITESET_VERMILION, SPRITESET_SILENCE_BRIDGE ; SPLITSET_ROUTE_11
|
||||
db NORTH_SOUTH, 21, SPRITESET_LAVENDER, SPRITESET_SILENCE_BRIDGE ; SPLITSET_ROUTE_12
|
||||
db EAST_WEST, 8, SPRITESET_FUCHSIA, SPRITESET_SILENCE_BRIDGE ; SPLITSET_ROUTE_15
|
||||
db EAST_WEST, 24, SPRITESET_CYCLING_ROAD, SPRITESET_CELADON ; SPLITSET_ROUTE_16
|
||||
db EAST_WEST, 34, SPRITESET_CYCLING_ROAD, SPRITESET_FUCHSIA ; SPLITSET_ROUTE_18
|
||||
db EAST_WEST, 53, SPRITESET_PALLET_VIRIDIAN, SPRITESET_FUCHSIA ; SPLITSET_ROUTE_20
|
||||
db NORTH_SOUTH, 33, SPRITESET_PEWTER_CERULEAN, SPRITESET_SAFFRON ; SPLITSET_ROUTE_5
|
||||
db NORTH_SOUTH, 2, SPRITESET_SAFFRON, SPRITESET_VERMILION ; SPLITSET_ROUTE_6
|
||||
db EAST_WEST, 17, SPRITESET_CELADON, SPRITESET_SAFFRON ; SPLITSET_ROUTE_7
|
||||
db EAST_WEST, 3, SPRITESET_SAFFRON, SPRITESET_LAVENDER ; SPLITSET_ROUTE_8
|
||||
assert_table_length NUM_SPLIT_SETS
|
||||
|
||||
SpriteSets:
|
||||
table_width SPRITE_SET_LENGTH, SpriteSets
|
||||
|
||||
; each sprite set has 9 walking sprites and 2 still sprites
|
||||
DEF SPRITE_SET_LENGTH EQU 9 + 2
|
||||
|
||||
; sprite set $01 - Viridian
|
||||
table_width 1
|
||||
; SPRITESET_PALLET_VIRIDIAN
|
||||
db SPRITE_BLUE
|
||||
db SPRITE_YOUNGSTER
|
||||
db SPRITE_GIRL
|
||||
|
|
@ -80,10 +78,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
|
|||
db SPRITE_SWIMMER
|
||||
db SPRITE_POKE_BALL
|
||||
db SPRITE_GAMBLER_ASLEEP
|
||||
assert_table_length SPRITE_SET_LENGTH
|
||||
|
||||
; sprite set $02 - Cerulean
|
||||
table_width 1
|
||||
; SPRITESET_PEWTER_CERULEAN
|
||||
db SPRITE_YOUNGSTER
|
||||
db SPRITE_ROCKET
|
||||
db SPRITE_SUPER_NERD
|
||||
|
|
@ -95,10 +91,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
|
|||
db SPRITE_COOLTRAINER_M
|
||||
db SPRITE_POKE_BALL
|
||||
db SPRITE_FAKE_TREE ; fake tree, used to be unused sleeping gambler
|
||||
assert_table_length SPRITE_SET_LENGTH
|
||||
|
||||
; sprite set $03 - Lavender Town
|
||||
table_width 1
|
||||
; SPRITESET_LAVENDER
|
||||
db SPRITE_LITTLE_GIRL
|
||||
db SPRITE_GIRL
|
||||
db SPRITE_SUPER_NERD
|
||||
|
|
@ -110,10 +104,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
|
|||
db SPRITE_GUARD
|
||||
db SPRITE_POKE_BALL
|
||||
db SPRITE_FAKE_TREE ; fake tree, used to be unused sleeping gambler
|
||||
assert_table_length SPRITE_SET_LENGTH
|
||||
|
||||
; sprite set $04 - Vermillion City
|
||||
table_width 1
|
||||
; SPRITESET_VERMILION
|
||||
db SPRITE_BEAUTY
|
||||
db SPRITE_SUPER_NERD
|
||||
db SPRITE_YOUNGSTER
|
||||
|
|
@ -125,10 +117,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
|
|||
db SPRITE_COOLTRAINER_M
|
||||
db SPRITE_POKE_BALL
|
||||
db SPRITE_FAKE_TREE ; fake tree, used to be unused sleeping gambler
|
||||
assert_table_length SPRITE_SET_LENGTH
|
||||
|
||||
; sprite set $05 - Celadon City
|
||||
table_width 1
|
||||
; SPRITESET_CELADON
|
||||
db SPRITE_LITTLE_GIRL
|
||||
db SPRITE_COOLTRAINER_F ; Original: SPRITE_LITTLE_BOY
|
||||
db SPRITE_GIRL
|
||||
|
|
@ -140,10 +130,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
|
|||
db SPRITE_ROCKET
|
||||
db SPRITE_SEEL ; Original: SPRITE_POKE_BALL (static sprite)
|
||||
db SPRITE_SNORLAX
|
||||
assert_table_length SPRITE_SET_LENGTH
|
||||
|
||||
; sprite set $06 - Indigo Plateau
|
||||
table_width 1
|
||||
; SPRITESET_INDIGO
|
||||
db SPRITE_YOUNGSTER
|
||||
db SPRITE_GYM_GUIDE
|
||||
db SPRITE_MONSTER
|
||||
|
|
@ -155,10 +143,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
|
|||
db SPRITE_GAMBLER
|
||||
db SPRITE_POKE_BALL
|
||||
db SPRITE_FAKE_TREE ; fake tree, used to be unused sleeping gambler
|
||||
assert_table_length SPRITE_SET_LENGTH
|
||||
|
||||
; sprite set $07 - Saffron
|
||||
table_width 1
|
||||
; SPRITESET_SAFFRON
|
||||
db SPRITE_ROCKET
|
||||
db SPRITE_SCIENTIST
|
||||
db SPRITE_SILPH_WORKER
|
||||
|
|
@ -170,10 +156,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
|
|||
db SPRITE_MONSTER
|
||||
db SPRITE_POKE_BALL
|
||||
db SPRITE_FAKE_TREE ; fake tree, used to be unused sleeping gambler
|
||||
assert_table_length SPRITE_SET_LENGTH
|
||||
|
||||
; sprite set $08 - Silence Bridge
|
||||
table_width 1
|
||||
; SPRITESET_SILENCE_BRIDGE
|
||||
db SPRITE_BIKER
|
||||
db SPRITE_SUPER_NERD
|
||||
db SPRITE_MIDDLE_AGED_MAN
|
||||
|
|
@ -185,10 +169,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
|
|||
db SPRITE_MONSTER
|
||||
db SPRITE_POKE_BALL
|
||||
db SPRITE_SNORLAX
|
||||
assert_table_length SPRITE_SET_LENGTH
|
||||
|
||||
; sprite set $09 - Cycling Road
|
||||
table_width 1
|
||||
; SPRITESET_CYCLING_ROAD
|
||||
db SPRITE_BIKER
|
||||
db SPRITE_COOLTRAINER_M
|
||||
db SPRITE_SILPH_WORKER
|
||||
|
|
@ -200,10 +182,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
|
|||
db SPRITE_SUPER_NERD
|
||||
db SPRITE_POKE_BALL
|
||||
db SPRITE_SNORLAX
|
||||
assert_table_length SPRITE_SET_LENGTH
|
||||
|
||||
; sprite set $0a - Fuschia
|
||||
table_width 1
|
||||
; SPRITESET_FUCHSIA
|
||||
db SPRITE_BIRD
|
||||
db SPRITE_COOLTRAINER_M
|
||||
db SPRITE_FAIRY
|
||||
|
|
@ -215,4 +195,5 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
|
|||
db SPRITE_YOUNGSTER
|
||||
db SPRITE_POKE_BALL
|
||||
db SPRITE_FOSSIL
|
||||
assert_table_length SPRITE_SET_LENGTH
|
||||
|
||||
assert_table_length NUM_SPRITE_SETS
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -258,7 +258,7 @@ PokedexEntryPointers:
|
|||
|
||||
; string: species name
|
||||
; height in feet, inches
|
||||
; weight in pounds
|
||||
; weight in tenths of a pound
|
||||
; text entry
|
||||
|
||||
BulbasaurDexEntry:
|
||||
|
|
|
|||
|
|
@ -1,52 +1,54 @@
|
|||
TrainerNames::
|
||||
db "YOUNGSTER@"
|
||||
db "BUG CATCHER@"
|
||||
db "LASS@"
|
||||
db "SAILOR@"
|
||||
db "JR.TRAINER♂@"
|
||||
db "JR.TRAINER♀@"
|
||||
db "POKéMANIAC@"
|
||||
db "SUPER NERD@"
|
||||
db "HIKER@"
|
||||
db "BIKER@"
|
||||
db "BURGLAR@"
|
||||
db "ENGINEER@"
|
||||
db "FISHERMAN@"
|
||||
db "SWIMMER@"
|
||||
db "CUE BALL@"
|
||||
db "GAMBLER@"
|
||||
db "BEAUTY@"
|
||||
db "PSYCHIC@"
|
||||
db "ROCKER@"
|
||||
db "JUGGLER@"
|
||||
db "TAMER@"
|
||||
db "BIRD KEEPER@"
|
||||
db "BLACKBELT@"
|
||||
db "RIVAL1@"
|
||||
db "PROF.OAK@"
|
||||
db "CHIEF@"
|
||||
db "SCIENTIST@"
|
||||
db "GIOVANNI@"
|
||||
db "ROCKET@"
|
||||
db "COOLTRAINER♂@"
|
||||
db "COOLTRAINER♀@"
|
||||
db "BRUNO@"
|
||||
db "BROCK@"
|
||||
db "MISTY@"
|
||||
db "LT.SURGE@"
|
||||
db "ERIKA@"
|
||||
db "KOGA@"
|
||||
db "BLAINE@"
|
||||
db "SABRINA@"
|
||||
db "GENTLEMAN@"
|
||||
db "RIVAL2@"
|
||||
db "RIVAL3@"
|
||||
db "LORELEI@"
|
||||
db "CHANNELER@"
|
||||
db "AGATHA@"
|
||||
db "LANCE@"
|
||||
db "YUJIROU@"
|
||||
db "STUDENT@"
|
||||
db "FIREFIGHTER@"
|
||||
db "JUNIOR@"
|
||||
db "JACK@"
|
||||
list_start TrainerNames
|
||||
li "YOUNGSTER"
|
||||
li "BUG CATCHER"
|
||||
li "LASS"
|
||||
li "SAILOR"
|
||||
li "JR.TRAINER♂"
|
||||
li "JR.TRAINER♀"
|
||||
li "POKéMANIAC"
|
||||
li "SUPER NERD"
|
||||
li "HIKER"
|
||||
li "BIKER"
|
||||
li "BURGLAR"
|
||||
li "ENGINEER"
|
||||
li "FISHERMAN"
|
||||
li "SWIMMER"
|
||||
li "CUE BALL"
|
||||
li "GAMBLER"
|
||||
li "BEAUTY"
|
||||
li "PSYCHIC"
|
||||
li "ROCKER"
|
||||
li "JUGGLER"
|
||||
li "TAMER"
|
||||
li "BIRD KEEPER"
|
||||
li "BLACKBELT"
|
||||
li "RIVAL1"
|
||||
li "PROF.OAK"
|
||||
li "CHIEF"
|
||||
li "SCIENTIST"
|
||||
li "GIOVANNI"
|
||||
li "ROCKET"
|
||||
li "COOLTRAINER♂"
|
||||
li "COOLTRAINER♀"
|
||||
li "BRUNO"
|
||||
li "BROCK"
|
||||
li "MISTY"
|
||||
li "LT.SURGE"
|
||||
li "ERIKA"
|
||||
li "KOGA"
|
||||
li "BLAINE"
|
||||
li "SABRINA"
|
||||
li "GENTLEMAN"
|
||||
li "RIVAL2"
|
||||
li "RIVAL3"
|
||||
li "LORELEI"
|
||||
li "CHANNELER"
|
||||
li "AGATHA"
|
||||
li "LANCE"
|
||||
li "YUJIROU"
|
||||
li "STUDENT"
|
||||
li "FIREFIGHTER"
|
||||
li "JUNIOR"
|
||||
li "JACK"
|
||||
assert_list_length NUM_TRAINERS
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
TrainerDataPointers:
|
||||
table_width 2, TrainerDataPointers
|
||||
dw YoungsterData
|
||||
dw BugCatcherData
|
||||
dw LassData
|
||||
|
|
@ -50,6 +51,7 @@ TrainerDataPointers:
|
|||
dw FirefighterData
|
||||
dw JuniorData
|
||||
dw JackData
|
||||
assert_table_length NUM_TRAINERS
|
||||
|
||||
; if first byte != $FF, then
|
||||
; first byte is level (of all pokemon on this team)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ TypeNames:
|
|||
dw .Ghost
|
||||
dw .Steel
|
||||
|
||||
REPT FIRE - STEEL - 1
|
||||
REPT UNUSED_TYPES_END - UNUSED_TYPES
|
||||
dw .Normal
|
||||
ENDR
|
||||
|
||||
|
|
|
|||
|
|
@ -249,7 +249,7 @@ PlayAnimation:
|
|||
push af
|
||||
ld a, [wAnimPalette]
|
||||
ldh [rOBP0], a
|
||||
call LoadAnimationTileset
|
||||
call LoadMoveAnimationTiles
|
||||
vc_hook Reduce_move_anim_flashing_Mega_Punch_Self_Destruct_Explosion
|
||||
call LoadSubanimation
|
||||
call PlaySubanimation
|
||||
|
|
@ -352,11 +352,11 @@ GetSubanimationTransform2:
|
|||
ret
|
||||
|
||||
; loads tile patterns for battle animations
|
||||
LoadAnimationTileset:
|
||||
LoadMoveAnimationTiles:
|
||||
ld a, [wWhichBattleAnimTileset]
|
||||
add a
|
||||
add a
|
||||
ld hl, AnimationTilesetPointers
|
||||
ld hl, MoveAnimationTilesPointers
|
||||
ld e, a
|
||||
ld d, 0
|
||||
add hl, de
|
||||
|
|
@ -367,7 +367,7 @@ LoadAnimationTileset:
|
|||
ld a, [hl]
|
||||
ld d, a ; de = address of tileset
|
||||
ld hl, vSprites tile $31
|
||||
ld b, BANK(AnimationTileset1) ; ROM bank
|
||||
ld b, BANK(MoveAnimationTiles0) ; ROM bank
|
||||
ld a, [wTempTilesetNumTiles]
|
||||
ld c, a ; number of tiles
|
||||
jp CopyVideoData ; load tileset
|
||||
|
|
@ -378,17 +378,18 @@ MACRO anim_tileset
|
|||
db -1 ; padding
|
||||
ENDM
|
||||
|
||||
AnimationTilesetPointers:
|
||||
MoveAnimationTilesPointers:
|
||||
; number of tiles, gfx pointer
|
||||
anim_tileset 79, AnimationTileset1
|
||||
anim_tileset 79, AnimationTileset2
|
||||
anim_tileset 64, AnimationTileset1
|
||||
anim_tileset 79, MoveAnimationTiles0
|
||||
anim_tileset 79, MoveAnimationTiles1
|
||||
anim_tileset 64, MoveAnimationTiles2
|
||||
|
||||
AnimationTileset1:
|
||||
INCBIN "gfx/battle/attack_anim_1.2bpp"
|
||||
MoveAnimationTiles0:
|
||||
MoveAnimationTiles2:
|
||||
INCBIN "gfx/battle/move_anim_0.2bpp"
|
||||
|
||||
AnimationTileset2:
|
||||
INCBIN "gfx/battle/attack_anim_2.2bpp"
|
||||
MoveAnimationTiles1:
|
||||
INCBIN "gfx/battle/move_anim_1.2bpp"
|
||||
|
||||
SlotMachineTiles2:
|
||||
INCBIN "gfx/slots/slots_2.2bpp"
|
||||
|
|
@ -1109,7 +1110,7 @@ AnimationWaterDropletsEverywhere:
|
|||
; in Surf/Mist/Toxic.
|
||||
xor a
|
||||
ld [wWhichBattleAnimTileset], a
|
||||
call LoadAnimationTileset
|
||||
call LoadMoveAnimationTiles
|
||||
ld d, 32
|
||||
ld a, -16
|
||||
ld [wBaseCoordX], a
|
||||
|
|
@ -1628,7 +1629,7 @@ _AnimationShootBallsUpward:
|
|||
push bc
|
||||
xor a
|
||||
ld [wWhichBattleAnimTileset], a
|
||||
call LoadAnimationTileset
|
||||
call LoadMoveAnimationTiles
|
||||
pop bc
|
||||
ld d, $7a ; ball tile
|
||||
ld hl, wShadowOAM
|
||||
|
|
@ -2071,7 +2072,7 @@ InitMultipleObjectsOAM:
|
|||
push bc
|
||||
push de
|
||||
ld [wWhichBattleAnimTileset], a
|
||||
call LoadAnimationTileset
|
||||
call LoadMoveAnimationTiles
|
||||
pop de
|
||||
pop bc
|
||||
xor a
|
||||
|
|
|
|||
|
|
@ -3353,7 +3353,7 @@ CheckPlayerStatusConditions:
|
|||
; fast asleep
|
||||
xor a
|
||||
ld [wAnimationType], a
|
||||
ld a, SLP_ANIM - 1
|
||||
ld a, SLP_PLAYER_ANIM
|
||||
call PlayMoveAnimation
|
||||
ld hl, FastAsleepText
|
||||
call PrintText
|
||||
|
|
@ -3437,7 +3437,7 @@ CheckPlayerStatusConditions:
|
|||
call PrintText
|
||||
xor a
|
||||
ld [wAnimationType], a
|
||||
ld a, CONF_ANIM - 1
|
||||
ld a, CONF_PLAYER_ANIM
|
||||
call PlayMoveAnimation
|
||||
call BattleRandom
|
||||
cp 50 percent + 1 ; chance to hurt itself
|
||||
|
|
|
|||
|
|
@ -123,12 +123,12 @@ PoisonEffect:
|
|||
dec de
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld b, ANIM_C7
|
||||
ld b, SHAKE_SCREEN_ANIM
|
||||
ld hl, wPlayerBattleStatus3
|
||||
ld a, [de]
|
||||
ld de, wPlayerToxicCounter
|
||||
jr nz, .ok
|
||||
ld b, ANIM_A9
|
||||
ld b, ENEMY_HUD_SHAKE_ANIM
|
||||
ld hl, wEnemyBattleStatus3
|
||||
ld de, wEnemyToxicCounter
|
||||
.ok
|
||||
|
|
@ -232,14 +232,14 @@ FreezeBurnParalyzeEffect:
|
|||
ld a, 1 << PAR
|
||||
ld [wEnemyMonStatus], a
|
||||
call QuarterSpeedDueToParalysis ; quarter speed of affected mon
|
||||
ld a, ANIM_A9
|
||||
ld a, ENEMY_HUD_SHAKE_ANIM
|
||||
call PlayBattleAnimation
|
||||
jp PrintMayNotAttackText ; print paralysis text
|
||||
.burn1
|
||||
ld a, 1 << BRN
|
||||
ld [wEnemyMonStatus], a
|
||||
call HalveAttackDueToBurn ; halve attack of affected mon
|
||||
ld a, ANIM_A9
|
||||
ld a, ENEMY_HUD_SHAKE_ANIM
|
||||
call PlayBattleAnimation
|
||||
ld hl, BurnedText
|
||||
jp PrintText
|
||||
|
|
@ -247,7 +247,7 @@ FreezeBurnParalyzeEffect:
|
|||
call ClearHyperBeam ; resets hyper beam (recharge) condition from target
|
||||
ld a, 1 << FRZ
|
||||
ld [wEnemyMonStatus], a
|
||||
ld a, ANIM_A9
|
||||
ld a, ENEMY_HUD_SHAKE_ANIM
|
||||
call PlayBattleAnimation
|
||||
ld hl, FrozenText
|
||||
jp PrintText
|
||||
|
|
@ -802,7 +802,7 @@ ThrashPetalDanceEffect:
|
|||
inc a
|
||||
ld [de], a ; set thrash/petal dance counter to 2 or 3 at random
|
||||
ldh a, [hWhoseTurn]
|
||||
add ANIM_B0
|
||||
add SHRINKING_SQUARE_ANIM
|
||||
jp PlayBattleAnimation2
|
||||
|
||||
SwitchAndTeleportEffect:
|
||||
|
|
@ -1002,7 +1002,7 @@ ChargeEffect:
|
|||
jr z, .chargeEffect
|
||||
ld hl, wEnemyBattleStatus1
|
||||
ld de, wEnemyMoveEffect
|
||||
ld b, ANIM_AF
|
||||
ld b, XSTATITEM_DUPLICATE_ANIM
|
||||
.chargeEffect
|
||||
set CHARGING_UP, [hl]
|
||||
ld a, [de]
|
||||
|
|
@ -1016,7 +1016,7 @@ ChargeEffect:
|
|||
cp DIG
|
||||
jr nz, .notDigOrFly
|
||||
set INVULNERABLE, [hl] ; mon is now invulnerable to typical attacks (fly/dig)
|
||||
ld b, ANIM_C0
|
||||
ld b, SLIDE_DOWN_ANIM
|
||||
.notDigOrFly
|
||||
xor a
|
||||
ld [wAnimationType], a
|
||||
|
|
|
|||
|
|
@ -750,7 +750,7 @@ AIIncreaseStat:
|
|||
ld a, [hl]
|
||||
push af
|
||||
push hl
|
||||
ld a, ANIM_AF
|
||||
ld a, XSTATITEM_DUPLICATE_ANIM
|
||||
ld [hli], a
|
||||
ld [hl], b
|
||||
callfar StatModifierUpEffect
|
||||
|
|
|
|||
|
|
@ -2,12 +2,14 @@ DebugMenu:
|
|||
IF DEF(_DEBUG)
|
||||
call ClearScreen
|
||||
|
||||
ld hl, DebugPlayerName
|
||||
; These debug names are used for TestBattle.
|
||||
; StartNewGameDebug uses the debug names from PrepareOakSpeech.
|
||||
ld hl, DebugBattlePlayerName
|
||||
ld de, wPlayerName
|
||||
ld bc, NAME_LENGTH
|
||||
call CopyData
|
||||
|
||||
ld hl, DebugRivalName
|
||||
ld hl, DebugBattleRivalName
|
||||
ld de, wRivalName
|
||||
ld bc, NAME_LENGTH
|
||||
call CopyData
|
||||
|
|
@ -57,10 +59,10 @@ IF DEF(_DEBUG)
|
|||
set 1, [hl]
|
||||
jp StartNewGameDebug
|
||||
|
||||
DebugPlayerName:
|
||||
DebugBattlePlayerName:
|
||||
db "Tom@"
|
||||
|
||||
DebugRivalName:
|
||||
DebugBattleRivalName:
|
||||
db "Juerry@"
|
||||
|
||||
DebugMenuOptions:
|
||||
|
|
|
|||
|
|
@ -309,6 +309,7 @@ LinkCanceledText:
|
|||
StartNewGame:
|
||||
ld hl, wd732
|
||||
res 1, [hl]
|
||||
; fallthrough
|
||||
StartNewGameDebug:
|
||||
call OakSpeech
|
||||
ld c, 20
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
SetDefaultNames:
|
||||
PrepareOakSpeech:
|
||||
ld a, [wLetterPrintingDelayFlags]
|
||||
push af
|
||||
ld a, [wOptions]
|
||||
|
|
@ -22,11 +22,13 @@ SetDefaultNames:
|
|||
ld a, [wOptionsInitialized]
|
||||
and a
|
||||
call z, InitOptions
|
||||
ld hl, NintenText
|
||||
; These debug names are used for StartNewGameDebug.
|
||||
; TestBattle uses the debug names from DebugMenu.
|
||||
ld hl, DebugNewGamePlayerName
|
||||
ld de, wPlayerName
|
||||
ld bc, NAME_LENGTH
|
||||
call CopyData
|
||||
ld hl, SonyText
|
||||
ld hl, DebugNewGameRivalName
|
||||
ld de, wRivalName
|
||||
ld bc, NAME_LENGTH
|
||||
jp CopyData
|
||||
|
|
@ -40,7 +42,7 @@ OakSpeech:
|
|||
call PlayMusic
|
||||
call ClearScreen
|
||||
call LoadTextBoxTilePatterns
|
||||
call SetDefaultNames
|
||||
call PrepareOakSpeech
|
||||
predef InitPlayerData2
|
||||
ld hl, wNumBoxItems
|
||||
ld a, POTION
|
||||
|
|
|
|||
|
|
@ -3,13 +3,13 @@ LoadShootingStarGraphics:
|
|||
ldh [rOBP0], a
|
||||
ld a, $a4
|
||||
ldh [rOBP1], a
|
||||
ld de, AnimationTileset2 tile 3 ; star tile (top left quadrant)
|
||||
ld de, MoveAnimationTiles1 tile 3 ; star tile (top left quadrant)
|
||||
ld hl, vChars1 tile $20
|
||||
lb bc, BANK(AnimationTileset2), 1
|
||||
lb bc, BANK(MoveAnimationTiles1), 1
|
||||
call CopyVideoData
|
||||
ld de, AnimationTileset2 tile 19 ; star tile (bottom left quadrant)
|
||||
ld de, MoveAnimationTiles1 tile 19 ; star tile (bottom left quadrant)
|
||||
ld hl, vChars1 tile $21
|
||||
lb bc, BANK(AnimationTileset2), 1
|
||||
lb bc, BANK(MoveAnimationTiles1), 1
|
||||
call CopyVideoData
|
||||
ld de, FallingStar
|
||||
ld hl, vChars1 tile $22
|
||||
|
|
|
|||
|
|
@ -1,15 +1,17 @@
|
|||
; copy text of fixed length NAME_LENGTH (like player name, rival name, mon names, ...)
|
||||
CopyFixedLengthText:
|
||||
CopyDebugName:
|
||||
ld bc, NAME_LENGTH
|
||||
jp CopyData
|
||||
|
||||
SetDefaultNamesBeforeTitlescreen::
|
||||
ld hl, NintenText
|
||||
PrepareTitleScreen::
|
||||
; These debug names are already copied later in PrepareOakSpeech.
|
||||
; Removing the unused copies below has no apparent impact.
|
||||
; CopyDebugName can also be safely deleted afterwards.
|
||||
ld hl, DebugNewGamePlayerName
|
||||
ld de, wPlayerName
|
||||
call CopyFixedLengthText
|
||||
ld hl, SonyText
|
||||
call CopyDebugName
|
||||
ld hl, DebugNewGameRivalName
|
||||
ld de, wRivalName
|
||||
call CopyFixedLengthText
|
||||
call CopyDebugName
|
||||
xor a
|
||||
ldh [hWY], a
|
||||
ld [wLetterPrintingDelayFlags], a
|
||||
|
|
@ -395,5 +397,8 @@ PrintGameVersionOnTitleScreen:
|
|||
VersionOnTitleScreenText:
|
||||
db $61,$62,$63,$64,$65,$66,$67,$68,"@" ; "Blue Version"
|
||||
|
||||
NintenText: db "NINTEN@"
|
||||
SonyText: db "SONY@"
|
||||
DebugNewGamePlayerName:
|
||||
db "NINTEN@"
|
||||
|
||||
DebugNewGameRivalName:
|
||||
db "SONY@"
|
||||
|
|
|
|||
|
|
@ -116,8 +116,8 @@ InitCutAnimOAM:
|
|||
ret
|
||||
|
||||
LoadCutGrassAnimationTilePattern:
|
||||
ld de, AnimationTileset2 tile 6 ; tile depicting a leaf
|
||||
lb bc, BANK(AnimationTileset2), 1
|
||||
ld de, MoveAnimationTiles1 tile 6 ; tile depicting a leaf
|
||||
lb bc, BANK(MoveAnimationTiles1), 1
|
||||
jp CopyVideoData
|
||||
|
||||
WriteCutOrBoulderDustAnimationOAMBlock:
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
InitMapSprites::
|
||||
call InitOutsideMapSprites
|
||||
ret c ; return if the map is an outside map (already handled by above call)
|
||||
; if the map is an inside map (i.e. mapID >= $25)
|
||||
; if the map is an inside map (i.e. mapID >= FIRST_INDOOR_MAP)
|
||||
ld hl, wSpritePlayerStateData1PictureID
|
||||
ld de, wSpritePlayerStateData2PictureID
|
||||
; Loop to copy picture IDs from [x#SPRITESTATEDATA1_PICTUREID]
|
||||
|
|
@ -19,10 +19,10 @@ InitMapSprites::
|
|||
.copyPictureIDLoop
|
||||
ld a, [hl] ; a = [x#SPRITESTATEDATA1_PICTUREID]
|
||||
ld [de], a ; [x#SPRITESTATEDATA2_PICTUREID] = a
|
||||
ld a, $10
|
||||
ld a, SPRITESTATEDATA1_LENGTH
|
||||
add e
|
||||
ld e, a
|
||||
ld a, $10
|
||||
ld a, SPRITESTATEDATA1_LENGTH
|
||||
add l
|
||||
ld l, a
|
||||
jr nz, .copyPictureIDLoop
|
||||
|
|
@ -37,7 +37,7 @@ LoadMapSpriteTilePatterns:
|
|||
ret
|
||||
.spritesExist
|
||||
ld c, a ; c = [wNumSprites]
|
||||
ld b, $10 ; number of sprite slots
|
||||
ld b, NUM_SPRITESTATEDATA_STRUCTS
|
||||
ld hl, wSpritePlayerStateData2PictureID
|
||||
xor a
|
||||
ldh [hFourTileSpriteCount], a
|
||||
|
|
@ -47,7 +47,7 @@ LoadMapSpriteTilePatterns:
|
|||
ld a, [hli] ; a = [x#SPRITESTATEDATA2_PICTUREID]
|
||||
ld [hld], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] = a
|
||||
ld a, l
|
||||
add $10
|
||||
add SPRITESTATEDATA1_LENGTH
|
||||
ld l, a
|
||||
dec b
|
||||
jr nz, .copyPictureIDLoop
|
||||
|
|
@ -69,17 +69,17 @@ LoadMapSpriteTilePatterns:
|
|||
cp [hl] ; do the picture ID's match?
|
||||
jp z, .alreadyLoaded
|
||||
ld a, e
|
||||
add $10
|
||||
add SPRITESTATEDATA1_LENGTH
|
||||
ld e, a
|
||||
jr .checkIfAlreadyLoadedLoop
|
||||
.notAlreadyLoaded
|
||||
ld de, wSpritePlayerStateData2ImageBaseOffset
|
||||
ld b, $01
|
||||
ld b, 1
|
||||
; loop to find the highest tile pattern VRAM slot (among the first 10 slots) used by a previous sprite slot
|
||||
; this is done in order to find the first free VRAM slot available
|
||||
.findNextVRAMSlotLoop
|
||||
ld a, e
|
||||
add $10
|
||||
add SPRITESTATEDATA1_LENGTH
|
||||
ld e, a
|
||||
ld a, l
|
||||
cp e ; reached current slot?
|
||||
|
|
@ -187,7 +187,7 @@ LoadMapSpriteTilePatterns:
|
|||
jr nz, .loadWhileLCDOn
|
||||
pop af
|
||||
pop hl
|
||||
set 3, h ; add $800 to hl
|
||||
set 3, h ; add $80 tiles to hl
|
||||
push hl
|
||||
ld h, d
|
||||
ld l, e
|
||||
|
|
@ -200,7 +200,7 @@ LoadMapSpriteTilePatterns:
|
|||
.loadWhileLCDOn
|
||||
pop af
|
||||
pop hl
|
||||
set 3, h ; add $800 to hl
|
||||
set 3, h ; add $80 tiles to hl
|
||||
ld b, a
|
||||
swap c
|
||||
call CopyVideoData ; load tile pattern data for sprite when walking
|
||||
|
|
@ -214,18 +214,18 @@ LoadMapSpriteTilePatterns:
|
|||
ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] = a
|
||||
.nextSpriteSlot
|
||||
ld a, l
|
||||
add $10
|
||||
add SPRITESTATEDATA2_LENGTH
|
||||
ld l, a
|
||||
dec c
|
||||
jp nz, .loadTilePatternLoop
|
||||
ld hl, wSpritePlayerStateData2PictureID
|
||||
ld b, $10
|
||||
ld b, NUM_SPRITESTATEDATA_STRUCTS
|
||||
; the pictures IDs stored at [x#SPRITESTATEDATA2_PICTUREID] are no longer needed,
|
||||
; so zero them
|
||||
.zeroStoredPictureIDLoop
|
||||
xor a
|
||||
ld [hl], a ; [x#SPRITESTATEDATA2_PICTUREID]
|
||||
ld a, $10
|
||||
ld a, SPRITESTATEDATA2_LENGTH
|
||||
add l
|
||||
ld l, a
|
||||
dec b
|
||||
|
|
@ -264,7 +264,7 @@ InitOutsideMapSprites:
|
|||
inc h
|
||||
.noCarry
|
||||
ld a, [hl] ; a = spriteSetID
|
||||
cp $f0 ; does the map have 2 sprite sets?
|
||||
cp FIRST_SPLIT_SET - 1 ; does the map have 2 sprite sets?
|
||||
call nc, GetSplitMapSpriteSetID ; if so, choose the appropriate one
|
||||
ld b, a ; b = spriteSetID
|
||||
ld a, [wFontLoaded]
|
||||
|
|
@ -283,7 +283,7 @@ InitOutsideMapSprites:
|
|||
sla a
|
||||
sla a
|
||||
add c
|
||||
add b ; a = (spriteSetID - 1) * 11
|
||||
add b ; a = (spriteSetID - 1) * SPRITE_SET_LENGTH
|
||||
ld de, SpriteSets
|
||||
; add a to de to get offset of sprite set
|
||||
add e
|
||||
|
|
@ -300,7 +300,7 @@ InitOutsideMapSprites:
|
|||
; with picture IDs. This is done so that LoadMapSpriteTilePatterns will
|
||||
; load tile patterns for all sprite pictures in the sprite set.
|
||||
.loadSpriteSetLoop
|
||||
ld a, $10
|
||||
ld a, SPRITESTATEDATA2_LENGTH
|
||||
add l
|
||||
ld l, a
|
||||
ld a, [de] ; sprite picture ID from sprite set
|
||||
|
|
@ -309,11 +309,11 @@ InitOutsideMapSprites:
|
|||
inc de
|
||||
inc bc
|
||||
ld a, l
|
||||
cp $bd ; reached 11th sprite slot?
|
||||
cp 11 * SPRITESTATEDATA2_LENGTH + SPRITESTATEDATA2_PICTUREID ; reached 11th sprite slot?
|
||||
jr nz, .loadSpriteSetLoop
|
||||
ld b, 4 ; 4 remaining sprite slots
|
||||
.zeroRemainingSlotsLoop ; loop to zero the picture ID's of the remaining sprite slots
|
||||
ld a, $10
|
||||
ld a, SPRITESTATEDATA2_LENGTH
|
||||
add l
|
||||
ld l, a
|
||||
xor a
|
||||
|
|
@ -322,20 +322,20 @@ InitOutsideMapSprites:
|
|||
jr nz, .zeroRemainingSlotsLoop
|
||||
ld a, [wNumSprites]
|
||||
push af ; save number of sprites
|
||||
ld a, 11 ; 11 sprites in sprite set
|
||||
ld a, SPRITE_SET_LENGTH ; 11 sprites in sprite set
|
||||
ld [wNumSprites], a
|
||||
call LoadMapSpriteTilePatterns
|
||||
pop af
|
||||
ld [wNumSprites], a ; restore number of sprites
|
||||
ld hl, wSprite01StateData2ImageBaseOffset
|
||||
ld b, $0f
|
||||
ld b, NUM_SPRITESTATEDATA_STRUCTS - 1
|
||||
; The VRAM tile pattern slots that LoadMapSpriteTilePatterns set are in the
|
||||
; order of the map's sprite set, not the order of the actual sprites loaded
|
||||
; for the current map. So, they are not needed and are zeroed by this loop.
|
||||
.zeroVRAMSlotsLoop
|
||||
xor a
|
||||
ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET]
|
||||
ld a, $10
|
||||
ld a, SPRITESTATEDATA2_LENGTH
|
||||
add l
|
||||
ld l, a
|
||||
dec b
|
||||
|
|
@ -366,14 +366,14 @@ InitOutsideMapSprites:
|
|||
inc c
|
||||
.skipGettingPictureIndex
|
||||
push hl
|
||||
inc h
|
||||
ld a, $0e
|
||||
inc h ; HIGH(wSpriteStateData2)
|
||||
ld a, SPRITESTATEDATA2_IMAGEBASEOFFSET - SPRITESTATEDATA1_PICTUREID
|
||||
add l
|
||||
ld l, a
|
||||
ld a, c ; a = VRAM slot (zero if sprite slot is not used)
|
||||
ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET]
|
||||
pop hl
|
||||
ld a, $10
|
||||
ld a, SPRITESTATEDATA1_LENGTH
|
||||
add l
|
||||
ld l, a
|
||||
and a
|
||||
|
|
@ -384,7 +384,7 @@ InitOutsideMapSprites:
|
|||
; Chooses the correct sprite set ID depending on the player's position within
|
||||
; the map for maps with two sprite sets.
|
||||
GetSplitMapSpriteSetID:
|
||||
cp $f8
|
||||
cp SPLITSET_ROUTE_20
|
||||
jr z, .route20
|
||||
ld hl, SplitMapSpriteSets
|
||||
and $0f
|
||||
|
|
@ -396,8 +396,8 @@ GetSplitMapSpriteSetID:
|
|||
jr nc, .noCarry
|
||||
inc h
|
||||
.noCarry
|
||||
ld a, [hli] ; determines whether the map is split East/West or North/South
|
||||
cp $01
|
||||
ld a, [hli] ; whether the map is split EAST_WEST or NORTH_SOUTH
|
||||
cp EAST_WEST
|
||||
ld a, [hli] ; position of dividing line
|
||||
ld b, a
|
||||
jr z, .eastWestDivide
|
||||
|
|
@ -409,35 +409,39 @@ GetSplitMapSpriteSetID:
|
|||
.compareCoord
|
||||
cp b
|
||||
jr c, .loadSpriteSetID
|
||||
; if in the East side or South side
|
||||
; if in the east side or south side
|
||||
inc hl
|
||||
.loadSpriteSetID
|
||||
ld a, [hl]
|
||||
ret
|
||||
; Uses sprite set $01 for West side and $0A for East side.
|
||||
; Uses sprite set SPRITESET_PALLET_VIRIDIAN for west side and SPRITESET_FUCHSIA for east side.
|
||||
; Route 20 is a special case because the two map sections have a more complex
|
||||
; shape instead of the map simply being split horizontally or vertically.
|
||||
.route20
|
||||
ld hl, wXCoord
|
||||
; Use SPRITESET_PALLET_VIRIDIAN if X < 43
|
||||
ld a, [hl]
|
||||
cp $2b
|
||||
ld a, $01
|
||||
cp 43
|
||||
ld a, SPRITESET_PALLET_VIRIDIAN
|
||||
ret c
|
||||
; Use SPRITESET_FUCHSIA if X >= 62.
|
||||
ld a, [hl]
|
||||
cp $3e
|
||||
ld a, $0a
|
||||
cp 62
|
||||
ld a, SPRITESET_FUCHSIA
|
||||
ret nc
|
||||
; If 55 <= X < 62, split Y at 8; else 43 <= X < 55, so split Y at 13
|
||||
ld a, [hl]
|
||||
cp $37
|
||||
ld b, $08
|
||||
cp 55
|
||||
ld b, 8
|
||||
jr nc, .next
|
||||
ld b, $0d
|
||||
ld b, 13
|
||||
.next
|
||||
; Use SPRITESET_FUCHSIA if Y < split; else use SPRITESET_PALLET_VIRIDIAN
|
||||
ld a, [wYCoord]
|
||||
cp b
|
||||
ld a, $0a
|
||||
ld a, SPRITESET_FUCHSIA
|
||||
ret c
|
||||
ld a, $01
|
||||
ld a, SPRITESET_PALLET_VIRIDIAN
|
||||
ret
|
||||
|
||||
INCLUDE "data/maps/sprite_sets.asm"
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 977 B After Width: | Height: | Size: 977 B |
|
Before Width: | Height: | Size: 936 B After Width: | Height: | Size: 936 B |
|
|
@ -116,7 +116,7 @@ DEF rLCDC_DEFAULT EQU %11100011
|
|||
ld a, rLCDC_DEFAULT
|
||||
ldh [rLCDC], a
|
||||
|
||||
jp SetDefaultNamesBeforeTitlescreen
|
||||
jp PrepareTitleScreen
|
||||
|
||||
ClearVram::
|
||||
ld hl, VRAM_Begin
|
||||
|
|
|
|||
|
|
@ -1,6 +1,19 @@
|
|||
INCLUDE "charmap.asm"
|
||||
|
||||
INCLUDE "macros.asm"
|
||||
INCLUDE "macros/asserts.asm"
|
||||
INCLUDE "macros/const.asm"
|
||||
INCLUDE "macros/predef.asm"
|
||||
INCLUDE "macros/farcall.asm"
|
||||
INCLUDE "macros/data.asm"
|
||||
INCLUDE "macros/code.asm"
|
||||
INCLUDE "macros/gfx.asm"
|
||||
INCLUDE "macros/coords.asm"
|
||||
INCLUDE "macros/vc.asm"
|
||||
|
||||
INCLUDE "macros/scripts/audio.asm"
|
||||
INCLUDE "macros/scripts/maps.asm"
|
||||
INCLUDE "macros/scripts/events.asm"
|
||||
INCLUDE "macros/scripts/text.asm"
|
||||
|
||||
INCLUDE "constants/hardware_constants.asm"
|
||||
INCLUDE "constants/oam_constants.asm"
|
||||
|
|
@ -28,6 +41,7 @@ INCLUDE "constants/map_constants.asm"
|
|||
INCLUDE "constants/map_data_constants.asm"
|
||||
INCLUDE "constants/map_object_constants.asm"
|
||||
INCLUDE "constants/hide_show_constants.asm"
|
||||
INCLUDE "constants/sprite_set_constants.asm"
|
||||
INCLUDE "constants/credits_constants.asm"
|
||||
INCLUDE "constants/audio_constants.asm"
|
||||
INCLUDE "constants/music_constants.asm"
|
||||
14
macros.asm
14
macros.asm
|
|
@ -1,14 +0,0 @@
|
|||
INCLUDE "macros/asserts.asm"
|
||||
INCLUDE "macros/const.asm"
|
||||
INCLUDE "macros/predef.asm"
|
||||
INCLUDE "macros/farcall.asm"
|
||||
INCLUDE "macros/data.asm"
|
||||
INCLUDE "macros/code.asm"
|
||||
INCLUDE "macros/gfx.asm"
|
||||
INCLUDE "macros/coords.asm"
|
||||
INCLUDE "macros/vc.asm"
|
||||
|
||||
INCLUDE "macros/scripts/audio.asm"
|
||||
INCLUDE "macros/scripts/maps.asm"
|
||||
INCLUDE "macros/scripts/events.asm"
|
||||
INCLUDE "macros/scripts/text.asm"
|
||||
3
main.asm
3
main.asm
|
|
@ -1,6 +1,3 @@
|
|||
INCLUDE "constants.asm"
|
||||
|
||||
|
||||
SECTION "bank1", ROMX
|
||||
|
||||
INCLUDE "data/sprites/facings.asm"
|
||||
|
|
|
|||
3
maps.asm
3
maps.asm
|
|
@ -1,6 +1,3 @@
|
|||
INCLUDE "constants.asm"
|
||||
|
||||
|
||||
SECTION "Maps 1", ROMX
|
||||
|
||||
INCLUDE "data/maps/headers/CeladonCity.asm"
|
||||
|
|
|
|||
4
ram.asm
4
ram.asm
|
|
@ -1,6 +1,4 @@
|
|||
INCLUDE "constants.asm"
|
||||
|
||||
INCLUDE "macros/wram.asm"
|
||||
INCLUDE "macros/ram.asm"
|
||||
|
||||
|
||||
INCLUDE "ram/vram.asm"
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ wSpriteStateData1::
|
|||
; - E
|
||||
; - F
|
||||
wSpritePlayerStateData1:: spritestatedata1 wSpritePlayerStateData1 ; player is struct 0
|
||||
; wSprite02StateData1 - wSprite15StateData1
|
||||
; wSprite01StateData1 - wSprite15StateData1
|
||||
FOR n, 1, NUM_SPRITESTATEDATA_STRUCTS
|
||||
wSprite{02d:n}StateData1:: spritestatedata1 wSprite{02d:n}StateData1
|
||||
ENDR
|
||||
|
|
@ -127,7 +127,7 @@ wSpriteStateData2::
|
|||
; - E: sprite image base offset (in video ram, player always has value 1, used to compute sprite image index)
|
||||
; - F
|
||||
wSpritePlayerStateData2:: spritestatedata2 wSpritePlayerStateData2 ; player is struct 0
|
||||
; wSprite02StateData2 - wSprite15StateData2
|
||||
; wSprite01StateData2 - wSprite15StateData2
|
||||
FOR n, 1, NUM_SPRITESTATEDATA_STRUCTS
|
||||
wSprite{02d:n}StateData2:: spritestatedata2 wSprite{02d:n}StateData2
|
||||
ENDR
|
||||
|
|
|
|||
|
|
@ -1,18 +1,16 @@
|
|||
MAJOR EQU 0
|
||||
MINOR EQU 5
|
||||
PATCH EQU 2
|
||||
MINOR EQU 6
|
||||
PATCH EQU 0
|
||||
|
||||
MACRO wrong_rgbds
|
||||
fail "pokered requires rgbds v0.5.2 or newer."
|
||||
ENDM
|
||||
WRONG_RGBDS EQUS "fail \"pokered requires rgbds v0.6.0 or newer.\""
|
||||
|
||||
IF !DEF(__RGBDS_MAJOR__) || !DEF(__RGBDS_MINOR__) || !DEF(__RGBDS_PATCH__)
|
||||
wrong_rgbds
|
||||
WRONG_RGBDS
|
||||
ELSE
|
||||
IF (__RGBDS_MAJOR__ < MAJOR) || \
|
||||
(__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ < MINOR) || \
|
||||
(__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ == MINOR && __RGBDS_PATCH__ < PATCH) || \
|
||||
(__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ == MINOR && __RGBDS_PATCH__ == PATCH && DEF(__RGBDS_RC__))
|
||||
wrong_rgbds
|
||||
WRONG_RGBDS
|
||||
ENDC
|
||||
ENDC
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ HallofFameRoomScript2:
|
|||
ld [wLancesRoomCurScript], a
|
||||
ld [wHallOfFameCurScript], a
|
||||
; Elite 4 events
|
||||
ResetEventRange ELITE4_EVENTS_START, ELITE4_CHAMPION_EVENTS_END, 1
|
||||
ResetEventRange INDIGO_PLATEAU_EVENTS_START, INDIGO_PLATEAU_EVENTS_END, 1
|
||||
xor a
|
||||
ld [wHallOfFameCurScript], a
|
||||
ld a, PALLET_TOWN
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ IndigoPlateauLobby_Script:
|
|||
res 1, [hl]
|
||||
ret z
|
||||
; Elite 4 events
|
||||
ResetEventRange ELITE4_EVENTS_START, EVENT_LANCES_ROOM_LOCK_DOOR
|
||||
ResetEventRange INDIGO_PLATEAU_EVENTS_START, EVENT_LANCES_ROOM_LOCK_DOOR
|
||||
ret
|
||||
|
||||
IndigoPlateauLobby_TextPointers:
|
||||
|
|
|
|||
3
text.asm
3
text.asm
|
|
@ -1,6 +1,3 @@
|
|||
INCLUDE "constants.asm"
|
||||
|
||||
|
||||
SECTION "Text 1", ROMX
|
||||
|
||||
INCLUDE "data/text/text_1.asm"
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@
|
|||
#error Define USAGE_OPTS before including common.h!
|
||||
#endif
|
||||
|
||||
#define COUNTOF(...) (sizeof(__VA_ARGS__) / sizeof(*(__VA_ARGS__)))
|
||||
|
||||
#define error_exit(...) exit((fprintf(stderr, PROGRAM_NAME ": " __VA_ARGS__), 1))
|
||||
|
||||
noreturn void usage_exit(int status) {
|
||||
|
|
|
|||
56
tools/consts.py
Executable file
56
tools/consts.py
Executable file
|
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Usage: python consts.py constants/some_constants.asm
|
||||
|
||||
View numeric values of `const`ants.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import re
|
||||
|
||||
const_value = 0
|
||||
const_inc = 1
|
||||
|
||||
def asm_int(s):
|
||||
base = {'$': 16, '&': 8, '%': 2}.get(s[0], 10)
|
||||
return int(s if base == 10 else s[1:], base)
|
||||
|
||||
def print_const(s, v):
|
||||
print(f'{s} == {v} == ${v:x}')
|
||||
|
||||
def parse_for_constants(line):
|
||||
global const_value, const_inc
|
||||
if not (m := re.match(r'^\s+([A-Za-z_][A-Za-z0-9_@#]*)(?:\s+([^;\\n]+))?', line)):
|
||||
return
|
||||
macro, rest = m.groups()
|
||||
args = [arg.strip() for arg in rest.split(',')] if rest else []
|
||||
if args and not args[-1]:
|
||||
args = args[:-1]
|
||||
if macro == 'const_def':
|
||||
const_value = asm_int(args[0]) if len(args) >= 1 else 0
|
||||
const_inc = asm_int(args[1]) if len(args) >= 2 else 1
|
||||
elif macro == 'const':
|
||||
print_const(args[0], const_value)
|
||||
const_value += const_inc
|
||||
elif macro == 'shift_const':
|
||||
print_const(args[0], 1 << const_value)
|
||||
print_const(args[0] + '_F', const_value)
|
||||
const_value += const_inc
|
||||
elif macro == 'const_skip':
|
||||
const_value += const_inc * (asm_int(args[0]) if len(args) >= 1 else 1)
|
||||
elif macro == 'const_next':
|
||||
const_value = asm_int(args[0])
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print(f'Usage: {sys.argv[0]} constants/some_constants.asm', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
for filename in sys.argv[1:]:
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
for line in file:
|
||||
parse_for_constants(line)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
70
tools/free_space.awk
Executable file
70
tools/free_space.awk
Executable file
|
|
@ -0,0 +1,70 @@
|
|||
#!/usr/bin/gawk -f
|
||||
|
||||
# Usage: tools/free_space.awk [BANK=<bank_spec>] pokered.map
|
||||
|
||||
# The BANK argument allows printing free space in one, all, or none of the ROM's banks.
|
||||
# Valid arguments are numbers (in decimal "42" or hexadecimal "0x2a"), "all" or "none".
|
||||
# If not specified, defaults to "none".
|
||||
# The `BANK` argument MUST be before the map file name, otherwise it has no effect!
|
||||
# Yes: tools/free_space.awk BANK=all pokered.map
|
||||
# No: tools/free_space.awk pokered.map BANK=42
|
||||
|
||||
# Copyright (c) 2020, Eldred Habert.
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
BEGIN {
|
||||
nb_banks = 0
|
||||
free = 0
|
||||
rom_bank = 0 # Safety net for malformed files
|
||||
|
||||
# Default settings
|
||||
# Variables assigned via the command-line (except through `-v`) are *after* `BEGIN`
|
||||
BANK="none"
|
||||
}
|
||||
|
||||
# Only accept ROM banks, ignore everything else
|
||||
toupper($0) ~ /^[ \t]*ROM[0X][ \t]+BANK[ \t]+#/ {
|
||||
nb_banks++
|
||||
rom_bank = 1
|
||||
split($0, fields, /[ \t]/)
|
||||
bank_num = strtonum(substr(fields[3], 2))
|
||||
}
|
||||
|
||||
function register_bank(amount) {
|
||||
free += amount
|
||||
rom_bank = 0 # Reject upcoming banks by default
|
||||
|
||||
if (BANK ~ /all/ || BANK == bank_num) {
|
||||
printf "Bank %3d: %5d/16384 (%.2f%%)\n", bank_num, amount, amount * 100 / 16384
|
||||
}
|
||||
}
|
||||
|
||||
rom_bank && toupper($0) ~ /^[ \t]*EMPTY$/ {
|
||||
# Empty bank
|
||||
register_bank(16384)
|
||||
}
|
||||
rom_bank && toupper($0) ~ /^[ \t]*SLACK:[ \t]/ {
|
||||
if ($2 ~ /\$[0-9A-F]+/) {
|
||||
register_bank(strtonum("0x" substr($2, 2)))
|
||||
} else {
|
||||
printf "Malformed slack line? \"%s\" does not start with '$'\n", $2
|
||||
}
|
||||
}
|
||||
|
||||
END {
|
||||
# Determine number of banks, by rounding to upper power of 2
|
||||
total_banks = 2 # Smallest size is 2 banks
|
||||
while (total_banks < nb_banks) {
|
||||
total_banks *= 2
|
||||
}
|
||||
|
||||
# RGBLINK omits "trailing" ROM banks, so fake them
|
||||
bank_num = nb_banks
|
||||
while (bank_num < total_banks) {
|
||||
register_bank(16384)
|
||||
bank_num++
|
||||
}
|
||||
|
||||
total = total_banks * 16384
|
||||
printf "Free space: %5d/%5d (%.2f%%)\n", free, total, free * 100 / total
|
||||
}
|
||||
|
|
@ -165,7 +165,7 @@ int strfind(const char *s, const char *list[], int count) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
#define vstrfind(s, ...) strfind(s, (const char *[]){__VA_ARGS__}, sizeof (const char *[]){__VA_ARGS__} / sizeof(const char *))
|
||||
#define vstrfind(s, ...) strfind(s, (const char *[]){__VA_ARGS__}, COUNTOF((const char *[]){__VA_ARGS__}))
|
||||
|
||||
int parse_arg_value(const char *arg, bool absolute, const struct Symbol *symbols, const char *patch_name) {
|
||||
// Comparison operators for "ConditionValueB" evaluate to their particular values
|
||||
|
|
|
|||
77
tools/palfix.py
Executable file
77
tools/palfix.py
Executable file
|
|
@ -0,0 +1,77 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Usage: python palfix.py image.png
|
||||
|
||||
Fix the palette format of the input image. Colored images (Gen 2 Pokémon or
|
||||
trainer sprites) will become indexed, with a palette sorted {white, light
|
||||
color, dark color, black}. Grayscale images (all Gen 1 images) will become
|
||||
two-bit grayscale.
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
import png
|
||||
|
||||
def rgb8_to_rgb5(c):
|
||||
r, g, b = c
|
||||
return (r // 8, g // 8, b // 8)
|
||||
|
||||
def rgb5_to_rgb8(c):
|
||||
r, g, b = c
|
||||
return (r * 8 + r // 4, g * 8 + g // 4, b * 8 + b // 4)
|
||||
|
||||
def invert(c):
|
||||
r, g, b = c
|
||||
return (31 - r, 31 - g, 31 - b)
|
||||
|
||||
def luminance(c):
|
||||
r, g, b = c
|
||||
return 0.299 * r**2 + 0.587 * g**2 + 0.114 * b**2
|
||||
|
||||
def rgb5_pixels(row):
|
||||
yield from (rgb8_to_rgb5(row[x:x+3]) for x in range(0, len(row), 4))
|
||||
|
||||
def is_grayscale(palette):
|
||||
return (palette == ((31, 31, 31), (21, 21, 21), (10, 10, 10), (0, 0, 0)) or
|
||||
palette == ((31, 31, 31), (20, 20, 20), (10, 10, 10), (0, 0, 0)))
|
||||
|
||||
def fix_pal(filename):
|
||||
with open(filename, 'rb') as file:
|
||||
width, height, rows = png.Reader(file).asRGBA8()[:3]
|
||||
rows = list(rows)
|
||||
b_and_w = {(0, 0, 0), (31, 31, 31)}
|
||||
colors = {c for row in rows for c in rgb5_pixels(row)} - b_and_w
|
||||
if not colors:
|
||||
colors = {(21, 21, 21), (10, 10, 10)}
|
||||
elif len(colors) == 1:
|
||||
c = colors.pop()
|
||||
colors = {c, invert(c)}
|
||||
elif len(colors) != 2:
|
||||
return False
|
||||
palette = tuple(sorted(colors | b_and_w, key=luminance, reverse=True))
|
||||
assert len(palette) == 4
|
||||
rows = [list(map(palette.index, rgb5_pixels(row))) for row in rows]
|
||||
if is_grayscale(palette):
|
||||
rows = [[3 - c for c in row] for row in rows]
|
||||
writer = png.Writer(width, height, greyscale=True, bitdepth=2, compression=9)
|
||||
else:
|
||||
palette = tuple(map(rgb5_to_rgb8, palette))
|
||||
writer = png.Writer(width, height, palette=palette, bitdepth=8, compression=9)
|
||||
with open(filename, 'wb') as file:
|
||||
writer.write(file, rows)
|
||||
return True
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print(f'Usage: {sys.argv[0]} pic.png', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
for filename in sys.argv[1:]:
|
||||
if not filename.lower().endswith('.png'):
|
||||
print(f'{filename} is not a .png file!', file=sys.stderr)
|
||||
elif not fix_pal(filename):
|
||||
print(f'{filename} has too many colors!', file=sys.stderr)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
0
tools/pic.py
Normal file → Executable file
0
tools/pic.py
Normal file → Executable file
|
|
@ -32,7 +32,7 @@ void write_bit(int bit) {
|
|||
}
|
||||
|
||||
void compress_plane(uint8_t *plane, int width) {
|
||||
static int nybble_lookup[2][0x10] = {
|
||||
static int gray_codes[2][0x10] = {
|
||||
{0x0, 0x1, 0x3, 0x2, 0x6, 0x7, 0x5, 0x4, 0xC, 0xD, 0xF, 0xE, 0xA, 0xB, 0x9, 0x8},
|
||||
{0x8, 0x9, 0xB, 0xA, 0xE, 0xF, 0xD, 0xC, 0x4, 0x5, 0x7, 0x6, 0x2, 0x3, 0x1, 0x0},
|
||||
};
|
||||
|
|
@ -44,10 +44,10 @@ void compress_plane(uint8_t *plane, int width) {
|
|||
}
|
||||
int j = i / width + m * width * 8;
|
||||
int nybble_hi = (plane[j] >> 4) & 0xF;
|
||||
int code_1 = nybble_lookup[nybble_lo & 1][nybble_hi];
|
||||
int code_hi = gray_codes[nybble_lo & 1][nybble_hi];
|
||||
nybble_lo = plane[j] & 0xF;
|
||||
int code_2 = nybble_lookup[nybble_hi & 1][nybble_lo];
|
||||
plane[j] = (code_1 << 4) | code_2;
|
||||
int code_lo = gray_codes[nybble_hi & 1][nybble_lo];
|
||||
plane[j] = (code_hi << 4) | code_lo;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -105,7 +105,7 @@ int interpret_compress(uint8_t *plane1, uint8_t *plane2, int mode, int order, in
|
|||
}
|
||||
cur_bit = 7;
|
||||
cur_byte = 0;
|
||||
memset(compressed, 0, sizeof(compressed) / sizeof(*compressed));
|
||||
memset(compressed, 0, COUNTOF(compressed));
|
||||
compressed[0] = (width << 4) | width;
|
||||
write_bit(order);
|
||||
uint8_t bit_groups[0x1000] = {0};
|
||||
|
|
@ -113,7 +113,7 @@ int interpret_compress(uint8_t *plane1, uint8_t *plane2, int mode, int order, in
|
|||
for (int plane = 0; plane < 2; plane++) {
|
||||
int type = 0;
|
||||
int nums = 0;
|
||||
memset(bit_groups, 0, sizeof(bit_groups) / sizeof(*bit_groups));
|
||||
memset(bit_groups, 0, COUNTOF(bit_groups));
|
||||
for (int x = 0; x < width; x++) {
|
||||
for (int bit = 0; bit < 8; bit += 2) {
|
||||
for (int y = 0, byte = x * width * 8; y < width * 8; y++, byte++) {
|
||||
|
|
@ -129,7 +129,7 @@ int interpret_compress(uint8_t *plane1, uint8_t *plane2, int mode, int order, in
|
|||
write_bit(0);
|
||||
}
|
||||
type = 1;
|
||||
memset(bit_groups, 0, sizeof(bit_groups) / sizeof(*bit_groups));
|
||||
memset(bit_groups, 0, COUNTOF(bit_groups));
|
||||
index = 0;
|
||||
} else {
|
||||
if (!type) {
|
||||
|
|
@ -171,7 +171,7 @@ int compress(uint8_t *data, int width) {
|
|||
plane1[i] = data[i * 2];
|
||||
plane2[i] = data[i * 2 + 1];
|
||||
}
|
||||
uint8_t current[sizeof(compressed) / sizeof(*compressed)] = {0};
|
||||
uint8_t current[COUNTOF(compressed)] = {0};
|
||||
int compressed_size = -1;
|
||||
for (int mode = 1; mode < 4; mode++) {
|
||||
for (int order = 0; order < 2; order++) {
|
||||
|
|
@ -181,12 +181,12 @@ int compress(uint8_t *data, int width) {
|
|||
int new_size = interpret_compress(plane1, plane2, mode, order, width);
|
||||
if (compressed_size == -1 || new_size < compressed_size) {
|
||||
compressed_size = new_size;
|
||||
memset(current, 0, sizeof(current) / sizeof(*current));
|
||||
memset(current, 0, COUNTOF(current));
|
||||
memcpy(current, compressed, compressed_size / 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
memset(compressed, 0, sizeof(compressed) / sizeof(*compressed));
|
||||
memset(compressed, 0, COUNTOF(compressed));
|
||||
memcpy(compressed, current, compressed_size / 8);
|
||||
free(plane1);
|
||||
free(plane2);
|
||||
|
|
|
|||
2357
tools/png.py
Normal file
2357
tools/png.py
Normal file
File diff suppressed because it is too large
Load diff
38
tools/rgb555.py
Executable file
38
tools/rgb555.py
Executable file
|
|
@ -0,0 +1,38 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Usage: python rgb555.py image.png
|
||||
|
||||
Round all colors of the input image to RGB555.
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
import png
|
||||
|
||||
def rgb8_to_rgb5(c):
|
||||
return (c & 0b11111000) | (c >> 5)
|
||||
|
||||
def round_pal(filename):
|
||||
with open(filename, 'rb') as file:
|
||||
width, height, rows = png.Reader(file).asRGBA8()[:3]
|
||||
rows = list(rows)
|
||||
for row in rows:
|
||||
del row[3::4]
|
||||
rows = [[rgb8_to_rgb5(c) for c in row] for row in rows]
|
||||
writer = png.Writer(width, height, greyscale=False, bitdepth=8, compression=9)
|
||||
with open(filename, 'wb') as file:
|
||||
writer.write(file, rows)
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print(f'Usage: {sys.argv[0]} pic.png', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
for filename in sys.argv[1:]:
|
||||
if not filename.lower().endswith('.png'):
|
||||
print(f'{filename} is not a .png file!', file=sys.stderr)
|
||||
round_pal(filename)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
52
tools/sym_comments.py
Executable file
52
tools/sym_comments.py
Executable file
|
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Usage: python sym_comments.py file.asm [pokered.sym] > file_commented.asm
|
||||
|
||||
Comments each label in file.asm with its bank:address from the sym file.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import re
|
||||
|
||||
def main():
|
||||
if len(sys.argv) not in {2, 3}:
|
||||
print(f'Usage: {sys.argv[0]} file.asm [pokered.sym] > file_commented.asm', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
wram_name = sys.argv[1]
|
||||
sym_name = sys.argv[2] if len(sys.argv) == 3 else 'pokered.sym'
|
||||
|
||||
sym_def_rx = re.compile(r'(^{sym})(:.*)|(^\.{sym})(.*)'.format(sym=r'[A-Za-z_][A-Za-z0-9_#@]*'))
|
||||
|
||||
sym_addrs = {}
|
||||
with open(sym_name, 'r', encoding='utf-8') as file:
|
||||
for line in file:
|
||||
line = line.split(';', 1)[0].rstrip()
|
||||
parts = line.split(' ', 1)
|
||||
if len(parts) != 2:
|
||||
continue
|
||||
addr, sym = parts
|
||||
sym_addrs[sym] = addr
|
||||
|
||||
with open(wram_name, 'r', encoding='utf-8') as file:
|
||||
cur_label = None
|
||||
for line in file:
|
||||
line = line.rstrip()
|
||||
if (m = re.match(sym_def_rx, line)):
|
||||
sym, rest = m.group(1), m.group(2)
|
||||
if sym is None and rest is None:
|
||||
sym, rest = m.group(3), m.group(4)
|
||||
key = sym
|
||||
if not sym.startswith('.'):
|
||||
cur_label = sym
|
||||
elif cur_label:
|
||||
key = cur_label + sym
|
||||
if key in sym_addrs:
|
||||
addr = sym_addrs[key]
|
||||
line = sym + rest + ' ; ' + addr
|
||||
print(line)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
99
tools/toc.py
Executable file
99
tools/toc.py
Executable file
|
|
@ -0,0 +1,99 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Usage: python toc.py file.md
|
||||
|
||||
Replace a "## TOC" heading in a Markdown file with a table of contents,
|
||||
generated from the other headings in the file. Supports multiple files.
|
||||
Headings must start with "##" signs to be detected.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import re
|
||||
from collections import namedtuple
|
||||
from urllib.parse import quote
|
||||
|
||||
toc_name = 'Contents'
|
||||
valid_toc_headings = {'## TOC', '##TOC'}
|
||||
|
||||
TocItem = namedtuple('TocItem', ['name', 'anchor', 'level'])
|
||||
punctuation_rx = re.compile(r'[^\w\- ]+')
|
||||
numbered_heading_rx = re.compile(r'^[0-9]+\. ')
|
||||
specialchar_rx = re.compile(r'[⅔]+')
|
||||
|
||||
def name_to_anchor(name):
|
||||
# GitHub's algorithm for generating anchors from headings
|
||||
# https://github.com/jch/html-pipeline/blob/master/lib/html/pipeline/toc_filter.rb
|
||||
anchor = name.strip().lower() # lowercase
|
||||
anchor = re.sub(punctuation_rx, '', anchor) # remove punctuation
|
||||
anchor = anchor.replace(' ', '-') # replace spaces with dash
|
||||
anchor = re.sub(specialchar_rx, '', anchor) # remove misc special chars
|
||||
anchor = quote(anchor) # url encode
|
||||
return anchor
|
||||
|
||||
def get_toc_index(lines):
|
||||
toc_index = None
|
||||
for i, line in enumerate(lines):
|
||||
if line.rstrip() in valid_toc_headings:
|
||||
toc_index = i
|
||||
break
|
||||
return toc_index
|
||||
|
||||
def get_toc_items(lines, toc_index):
|
||||
for i, line in enumerate(lines):
|
||||
if i <= toc_index:
|
||||
continue
|
||||
if line.startswith('##'):
|
||||
name = line.lstrip('#')
|
||||
level = len(line) - len(name) - len('##')
|
||||
name = name.strip()
|
||||
anchor = name_to_anchor(name)
|
||||
yield TocItem(name, anchor, level)
|
||||
|
||||
def toc_string(toc_items):
|
||||
lines = [f'## {toc_name}', '']
|
||||
for name, anchor, level in toc_items:
|
||||
padding = ' ' * level
|
||||
if re.match(numbered_heading_rx, name):
|
||||
bullet, name = name.split('.', 1)
|
||||
bullet += '.'
|
||||
name = name.lstrip()
|
||||
else:
|
||||
bullet = '-'
|
||||
lines.append(f'{padding}{bullet} [{name}](#{anchor})')
|
||||
return '\n'.join(lines) + '\n'
|
||||
|
||||
def add_toc(filename):
|
||||
with open(filename, 'r', encoding='utf-8') as file:
|
||||
lines = file.readlines()
|
||||
toc_index = get_toc_index(lines)
|
||||
if toc_index is None:
|
||||
return None # no TOC heading
|
||||
toc_items = list(get_toc_items(lines, toc_index))
|
||||
if not toc_items:
|
||||
return False # no content headings
|
||||
with open(filename, 'w', encoding='utf-8') as file:
|
||||
for i, line in enumerate(lines):
|
||||
if i == toc_index:
|
||||
file.write(toc_string(toc_items))
|
||||
else:
|
||||
file.write(line)
|
||||
return True # OK
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print(f'Usage: {sys.argv[0]} file.md', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
for filename in sys.argv[1:]:
|
||||
print(filename)
|
||||
result = add_toc(filename)
|
||||
if result is None:
|
||||
print('Warning: No "## TOC" heading found', file=sys.stderr)
|
||||
elif result is False:
|
||||
print('Warning: No content headings found', file=sys.stderr)
|
||||
else:
|
||||
print('OK')
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
106
tools/unique.py
Executable file
106
tools/unique.py
Executable file
|
|
@ -0,0 +1,106 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Usage: python unique.py [-f|--flip] [-x|--cross] image.png
|
||||
|
||||
Erase duplicate tiles from an input image.
|
||||
-f or --flip counts X/Y mirrored tiles as duplicates.
|
||||
-x or --cross erases with a cross instead of a blank tile.
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
import png
|
||||
|
||||
def rgb5_pixels(row):
|
||||
yield from (tuple(c // 8 for c in row[x:x+3]) for x in range(0, len(row), 4))
|
||||
|
||||
def rgb8_pixels(row):
|
||||
yield from (c * 8 + c // 4 for pixel in row for c in pixel)
|
||||
|
||||
def gray_pixels(row):
|
||||
yield from (pixel[0] // 10 for pixel in row)
|
||||
|
||||
def rows_to_tiles(rows, width, height):
|
||||
assert len(rows) == height and len(rows[0]) == width
|
||||
yield from (tuple(tuple(row[x:x+8]) for row in rows[y:y+8])
|
||||
for y in range(0, height, 8) for x in range(0, width, 8))
|
||||
|
||||
def tiles_to_rows(tiles, width, height):
|
||||
assert width % 8 == 0 and height % 8 == 0
|
||||
width, height = width // 8, height // 8
|
||||
tiles = list(tiles)
|
||||
assert len(tiles) == width * height
|
||||
tile_rows = (tiles[y:y+width] for y in range(0, width * height, width))
|
||||
yield from ([tile[y][x] for tile in tile_row for x in range(8)]
|
||||
for tile_row in tile_rows for y in range(8))
|
||||
|
||||
def tile_variants(tile, flip):
|
||||
yield tile
|
||||
if flip:
|
||||
yield tile[::-1]
|
||||
yield tuple(row[::-1] for row in tile)
|
||||
yield tuple(row[::-1] for row in tile[::-1])
|
||||
|
||||
def unique_tiles(tiles, flip, cross):
|
||||
if cross:
|
||||
blank = [[(0, 0, 0)] * 8 for _ in range(8)]
|
||||
for y in range(8):
|
||||
blank[y][y] = blank[y][7 - y] = (31, 31, 31)
|
||||
blank = tuple(tuple(row) for row in blank)
|
||||
else:
|
||||
blank = tuple(tuple([(31, 31, 31)] * 8) for _ in range(8))
|
||||
seen = set()
|
||||
for tile in tiles:
|
||||
if any(variant in seen for variant in tile_variants(tile, flip)):
|
||||
yield blank
|
||||
else:
|
||||
yield tile
|
||||
seen.add(tile)
|
||||
|
||||
def is_grayscale(colors):
|
||||
return (colors.issubset({(31, 31, 31), (21, 21, 21), (10, 10, 10), (0, 0, 0)}) or
|
||||
colors.issubset({(31, 31, 31), (20, 20, 20), (10, 10, 10), (0, 0, 0)}))
|
||||
|
||||
def erase_duplicates(filename, flip, cross):
|
||||
with open(filename, 'rb') as file:
|
||||
width, height, rows = png.Reader(file).asRGBA8()[:3]
|
||||
rows = [list(rgb5_pixels(row)) for row in rows]
|
||||
if width % 8 or height % 8:
|
||||
return False
|
||||
tiles = unique_tiles(rows_to_tiles(rows, width, height), flip, cross)
|
||||
rows = list(tiles_to_rows(tiles, width, height))
|
||||
if is_grayscale({c for row in rows for c in row}):
|
||||
rows = [list(gray_pixels(row)) for row in rows]
|
||||
writer = png.Writer(width, height, greyscale=True, bitdepth=2, compression=9)
|
||||
else:
|
||||
rows = [list(rgb8_pixels(row)) for row in rows]
|
||||
writer = png.Writer(width, height, greyscale=False, bitdepth=8, compression=9)
|
||||
with open(filename, 'wb') as file:
|
||||
writer.write(file, rows)
|
||||
return True
|
||||
|
||||
def main():
|
||||
flip = cross = False
|
||||
while True:
|
||||
if len(sys.argv) < 2:
|
||||
print(f'Usage: {sys.argv[0]} [-f|--flip] [-x|--cross] tileset.png', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
elif sys.argv[1] in {'-f', '--flip'}:
|
||||
flip = True
|
||||
elif sys.argv[1] in {'-x', '--cross'}:
|
||||
cross = True
|
||||
elif sys.argv[1] in {'-fx', '-xf'}:
|
||||
flip = cross = True
|
||||
else:
|
||||
break
|
||||
sys.argv.pop(1)
|
||||
for filename in sys.argv[1:]:
|
||||
if not filename.lower().endswith('.png'):
|
||||
print(f'{filename} is not a .png file!', file=sys.stderr)
|
||||
elif not erase_duplicates(filename, flip, cross):
|
||||
print(f'{filename} is not divisible into 8x8 tiles!', file=sys.stderr)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
197
tools/unnamed.py
197
tools/unnamed.py
|
|
@ -1,130 +1,137 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from sys import stderr, exit
|
||||
from subprocess import Popen, PIPE
|
||||
from struct import unpack, calcsize
|
||||
from enum import Enum
|
||||
"""
|
||||
Usage: unnamed.py [-h] [-r rootdir] [-l count] pokered.sym
|
||||
|
||||
class symtype(Enum):
|
||||
LOCAL = 0
|
||||
IMPORT = 1
|
||||
EXPORT = 2
|
||||
Parse the symfile to find unnamed symbols.
|
||||
"""
|
||||
|
||||
def unpack_file(fmt, file):
|
||||
size = calcsize(fmt)
|
||||
return unpack(fmt, file.read(size))
|
||||
import sys
|
||||
import argparse
|
||||
import subprocess
|
||||
import struct
|
||||
import enum
|
||||
import signal
|
||||
|
||||
class symtype(enum.Enum):
|
||||
LOCAL = 0
|
||||
IMPORT = 1
|
||||
EXPORT = 2
|
||||
|
||||
def unpack_from(fmt, file):
|
||||
size = struct.calcsize(fmt)
|
||||
return struct.unpack(fmt, file.read(size))
|
||||
|
||||
def read_string(file):
|
||||
buf = bytearray()
|
||||
while True:
|
||||
b = file.read(1)
|
||||
if b is None or b == b'\0':
|
||||
return buf.decode()
|
||||
else:
|
||||
buf += b
|
||||
|
||||
buf = bytearray()
|
||||
while True:
|
||||
b = file.read(1)
|
||||
if b is None or b == b'\0':
|
||||
return buf.decode()
|
||||
buf += b
|
||||
|
||||
# Fix broken pipe when using `head`
|
||||
from signal import signal, SIGPIPE, SIG_DFL
|
||||
signal(SIGPIPE,SIG_DFL)
|
||||
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
|
||||
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser(description="Parse the symfile to find unnamed symbols")
|
||||
parser.add_argument('symfile', type=argparse.FileType('r'), help="the list of symbols")
|
||||
parser.add_argument('-r', '--rootdir', type=str, help="scan the output files to obtain a list of files with unnamed symbols (NOTE: will rebuild objects as necessary)")
|
||||
parser.add_argument('-l', '--list', type=int, default=0, help="output this many of each file's unnamed symbols (NOTE: requires -r)")
|
||||
parser = argparse.ArgumentParser(description='Parse the symfile to find unnamed symbols')
|
||||
parser.add_argument('symfile', type=argparse.FileType('r'),
|
||||
help='the list of symbols')
|
||||
parser.add_argument('-r', '--rootdir', type=str,
|
||||
help='scan the output files to obtain a list of files with unnamed symbols (note: will rebuild objects as necessary)')
|
||||
parser.add_argument('-l', '--list', type=int, default=0,
|
||||
help="output this many of each file's unnamed symbols (note: requires -r)")
|
||||
args = parser.parse_args()
|
||||
|
||||
# Get list of object files
|
||||
objects = None
|
||||
if args.rootdir:
|
||||
for line in Popen(["make", "-C", args.rootdir, "-s", "-p", "DEBUG=1"],
|
||||
stdout=PIPE).stdout.read().decode().split("\n"):
|
||||
if line.startswith("pokered_obj := "):
|
||||
objects = line[15:].strip().split()
|
||||
break
|
||||
else:
|
||||
print("Error: Object files not found!", file=stderr)
|
||||
exit(1)
|
||||
for line in subprocess.Popen(['make', '-C', args.rootdir, '-s', '-p', 'DEBUG=1'],
|
||||
stdout=subprocess.PIPE).stdout.read().decode().split('\n'):
|
||||
if line.startswith('pokered_obj :='):
|
||||
objects = line[len('pokered_obj :='):].strip().split()
|
||||
break
|
||||
else:
|
||||
print('Error: Object files not found!', file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# Scan all unnamed symbols from the symfile
|
||||
symbols_total = 0
|
||||
symbols = set()
|
||||
for line in args.symfile:
|
||||
line = line.split(";")[0].strip()
|
||||
split = line.split(" ")
|
||||
if len(split) < 2:
|
||||
continue
|
||||
line = line.split(';')[0].strip()
|
||||
split = line.split(' ')
|
||||
if len(split) < 2:
|
||||
continue
|
||||
|
||||
symbols_total += 1
|
||||
symbols_total += 1
|
||||
|
||||
symbol = " ".join(split[1:]).strip()
|
||||
if symbol[-3:].lower() == split[0][-3:].lower():
|
||||
symbols.add(symbol)
|
||||
symbol = ' '.join(split[1:]).strip()
|
||||
if symbol[-3:].lower() == split[0][-3:].lower():
|
||||
symbols.add(symbol)
|
||||
|
||||
# If no object files were provided, just print what we know and exit
|
||||
print("Unnamed pokered symbols: %d (%.2f%% complete)" % (len(symbols),
|
||||
(symbols_total - len(symbols)) / symbols_total * 100))
|
||||
unnamed_percent = 100 * (symbols_total - len(symbols)) / symbols_total
|
||||
print(f'Unnamed pokered symbols: {len(symbols)} ({unnamed_percent:.2f}% complete)')
|
||||
if not objects:
|
||||
for sym in symbols:
|
||||
print(sym)
|
||||
exit()
|
||||
for sym in symbols:
|
||||
print(sym)
|
||||
sys.exit()
|
||||
|
||||
# Count the amount of symbols in each file
|
||||
files = {}
|
||||
file_symbols = {}
|
||||
for objfile in objects:
|
||||
f = open(objfile, "rb")
|
||||
obj_ver = None
|
||||
with open(objfile, 'rb') as file:
|
||||
obj_ver = None
|
||||
|
||||
magic = unpack_file("4s", f)[0]
|
||||
if magic == b'RGB6':
|
||||
obj_ver = 6
|
||||
elif magic == b'RGB9':
|
||||
obj_ver = 10 + unpack_file("<I", f)[0]
|
||||
magic = unpack_from('4s', file)[0]
|
||||
if magic == b'RGB6':
|
||||
obj_ver = 6
|
||||
elif magic == b'RGB9':
|
||||
obj_ver = 10 + unpack_from('<I', file)[0]
|
||||
|
||||
if obj_ver not in [6, 10, 11, 12, 13, 15, 16, 17, 18]:
|
||||
print("Error: File '%s' is of an unknown format." % objfile, file=stderr)
|
||||
exit(1)
|
||||
if obj_ver not in [6, 10, 11, 12, 13, 15, 16, 17, 18, 19]:
|
||||
print(f"Error: File '{objfile}' is of an unknown format.", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
num_symbols = unpack_file("<I", f)[0]
|
||||
unpack_file("<I", f) # skip num sections
|
||||
num_symbols = unpack_from('<I', file)[0]
|
||||
unpack_from('<I', file) # skip num sections
|
||||
|
||||
if obj_ver in [16, 17, 18]:
|
||||
node_filenames = []
|
||||
num_nodes = unpack_file("<I", f)[0]
|
||||
for x in range(num_nodes):
|
||||
unpack_file("<II", f) # parent id, parent line no
|
||||
node_type = unpack_file("<B", f)[0]
|
||||
if node_type:
|
||||
node_filenames.append(read_string(f))
|
||||
else:
|
||||
node_filenames.append("rept")
|
||||
depth = unpack_file("<I", f)[0]
|
||||
for i in range(depth):
|
||||
unpack_file("<I", f) # rept iterations
|
||||
node_filenames.reverse()
|
||||
if obj_ver in [16, 17, 18, 19]:
|
||||
node_filenames = []
|
||||
num_nodes = unpack_from('<I', file)[0]
|
||||
for x in range(num_nodes):
|
||||
unpack_from('<II', file) # parent id, parent line no
|
||||
node_type = unpack_from('<B', file)[0]
|
||||
if node_type:
|
||||
node_filenames.append(read_string(file))
|
||||
else:
|
||||
node_filenames.append('rept')
|
||||
depth = unpack_from('<I', file)[0]
|
||||
for i in range(depth):
|
||||
unpack_from('<I', file) # rept iterations
|
||||
node_filenames.reverse()
|
||||
|
||||
for x in range(num_symbols):
|
||||
sym_name = read_string(f)
|
||||
sym_type = symtype(unpack_file("<B", f)[0] & 0x7f)
|
||||
if sym_type == symtype.IMPORT:
|
||||
continue
|
||||
if obj_ver in [16, 17, 18]:
|
||||
sym_fileno = unpack_file("<I", f)[0]
|
||||
sym_filename = node_filenames[sym_fileno]
|
||||
else:
|
||||
sym_filename = read_string(f)
|
||||
unpack_file("<III", f)
|
||||
if sym_name not in symbols:
|
||||
continue
|
||||
for _ in range(num_symbols):
|
||||
sym_name = read_string(file)
|
||||
sym_type = symtype(unpack_from('<B', file)[0] & 0x7f)
|
||||
if sym_type == symtype.IMPORT:
|
||||
continue
|
||||
if obj_ver in [16, 17, 18, 19]:
|
||||
sym_fileno = unpack_from('<I', file)[0]
|
||||
sym_filename = node_filenames[sym_fileno]
|
||||
else:
|
||||
sym_filename = read_string(file)
|
||||
unpack_from('<III', file)
|
||||
if sym_name not in symbols:
|
||||
continue
|
||||
|
||||
if sym_filename not in files:
|
||||
files[sym_filename] = []
|
||||
files[sym_filename].append(sym_name)
|
||||
if sym_filename not in file_symbols:
|
||||
file_symbols[sym_filename] = []
|
||||
file_symbols[sym_filename].append(sym_name)
|
||||
|
||||
# Sort the files, the one with the most amount of symbols first
|
||||
files = sorted(((f, files[f]) for f in files), key=lambda x: len(x[1]), reverse=True)
|
||||
for f in files:
|
||||
filename, unnamed = f
|
||||
sym_list = ', '.join(unnamed[:args.list])
|
||||
print("%s: %d%s" % (filename, len(unnamed), ': ' + sym_list if sym_list else ''))
|
||||
file_symbols = sorted(file_symbols.items(), key=lambda item: len(item[1]), reverse=True)
|
||||
for filename, unnamed_syms in file_symbols:
|
||||
sym_list = ', '.join(unnamed_syms[:args.list])
|
||||
print(f'{filename}: {len(unnamed_syms)}{": " + sym_list if sym_list else ""}')
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
INCLUDE "constants.asm"
|
||||
|
||||
; These are all the asm constants needed to make the blue_vc patch.
|
||||
|
||||
MACRO vc_const
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
INCLUDE "constants.asm"
|
||||
|
||||
; These are all the asm constants needed to make the red_vc patch.
|
||||
|
||||
MACRO vc_const
|
||||
|
|
|
|||
Loading…
Reference in a new issue