Use rgbds 0.5.0

This commit is contained in:
Rangi 2021-04-19 16:31:37 -04:00
parent 3521923096
commit 316fa4b695
28 changed files with 148 additions and 280 deletions

View File

@ -5,7 +5,11 @@ os:
install: install:
- |- - |-
( cd ( cd
git clone -b v0.4.2 --depth=1 https://github.com/gbdev/rgbds if [ "$TRAVIS_OS_NAME" = osx ]; then
HOMEBREW_NO_AUTO_UPDATE=1 brew install bison
export PATH="/usr/local/opt/bison/bin:$PATH"
fi
git clone -b v0.5.0 --depth=1 https://github.com/gbdev/rgbds
sudo make -C rgbds install sudo make -C rgbds install
rm -rf rgbds rm -rf rgbds
) )

6
FAQ.md
View File

@ -41,15 +41,15 @@ You need to install `gcc`. If you're using Cygwin, re-run its setup, and at "Sel
### "ERROR: `UNION` already defined" ### "ERROR: `UNION` already defined"
Download [**rgbds 0.4.2**][rgbds] or newer. Older versions will not work. Download [**rgbds 0.5.0**][rgbds] or newer. Older versions will not work.
### "ERROR: Macro not defined" ### "ERROR: Macro not defined"
Download [**rgbds 0.4.2**][rgbds] or newer. Older versions will not work. Download [**rgbds 0.5.0**][rgbds] or newer. Older versions will not work.
### "Expression must be 8-bit" ### "Expression must be 8-bit"
Download [**rgbds 0.4.2**][rgbds] or newer. Older versions will not work. Download [**rgbds 0.5.0**][rgbds] or newer. Older versions will not work.
### "Segmentation fault" from `rgbgfx` ### "Segmentation fault" from `rgbgfx`

View File

@ -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. Double click on the text that says "**Skip**" next to each package to select the most recent version to install.
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/windows) for Windows with Cygwin to install **rgbds 0.4.2**. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/windows) for Windows with Cygwin to install **rgbds 0.5.0**.
**Note:** If you already have an older rgbds, you will need to update to 0.4.2. Ignore this if you have never installed rgbds before. If a version newer than 0.4.2 does not work, try downloading 0.4.2. **Note:** If you already have an older rgbds, you will need to update to 0.5.0. Ignore this if you have never installed rgbds before. If a version newer than 0.5.0 does not work, try downloading 0.5.0.
Now open the **Cygwin terminal** and enter the following commands. 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. Open **Terminal** and prepare to enter commands.
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/macos) for macOS to install **rgbds 0.4.2**. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/macos) for macOS to install **rgbds 0.5.0**.
Now you're ready to [build **pokecrystal**](#build-pokecrystal). Now you're ready to [build **pokecrystal**](#build-pokecrystal).
@ -84,7 +84,7 @@ To install the software required for **pokecrystal**:
sudo apt-get install make gcc git sudo apt-get install make gcc git
``` ```
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.4.2** from source. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.5.0** from source.
### OpenSUSE ### OpenSUSE
@ -94,7 +94,7 @@ To install the software required for **pokecrystal**:
sudo zypper install make gcc git sudo zypper install make gcc git
``` ```
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.4.2** from source. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.5.0** from source.
### Arch Linux ### Arch Linux
@ -104,9 +104,9 @@ To install the software required for **pokecrystal**:
sudo pacman -S make gcc git rgbds sudo pacman -S make gcc git rgbds
``` ```
Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/arch) for Arch Linux to install **rgbds 0.4.2**. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/arch) for Arch Linux to install **rgbds 0.5.0**.
If you want to compile and install **rgbds** yourself instead, then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.4.2** from source. If you want to compile and install **rgbds** yourself instead, then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.5.0** from source.
### Termux ### Termux
@ -122,7 +122,7 @@ To install **rgbds**:
sudo apt 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/source) to build **rgbds 0.4.2** from source. If you want to compile and install **rgbds** yourself instead, then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.5.0** from source.
### Other distros ### Other distros
@ -133,7 +133,7 @@ If your distro is not listed here, try to find the required software in its repo
- `git` - `git`
- `rgbds` - `rgbds`
If `rgbds` is not available, you'll need to follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.4.2** from source. If `rgbds` is not available, you'll need to follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.5.0** from source.
Now you're ready to [build **pokecrystal**](#build-pokecrystal). Now you're ready to [build **pokecrystal**](#build-pokecrystal).
@ -158,3 +158,15 @@ To build **pokecrystal11.gbc**:
```bash ```bash
make crystal11 make crystal11
``` ```
### 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.0 globally. Instead, you can put its files in a directory within pokecrystal, such as `pokecrystal/rgbds-0.5.0/`. Then specify it when you run `make`:
```bash
make RGBDS=rgbds-0.5.0/
```
```bash
make RGBDS=rgbds-0.5.0/ crystal11
```

View File

@ -210,22 +210,13 @@ add_tm: MACRO
; - TM_\1: the item id, starting at $bf ; - TM_\1: the item id, starting at $bf
; - \1_TMNUM: the learnable TM/HM flag, starting at 1 ; - \1_TMNUM: the learnable TM/HM flag, starting at 1
; - TM##_MOVE: alias for the move id, equal to the value of \1 ; - TM##_MOVE: alias for the move id, equal to the value of \1
; The first usage also defines TM01 as the first TM item id.
if !DEF(TM01)
TM01 EQU const_value
endc
if __tmhm_value__ < 10
MOVE_FOR_TM EQUS "TM0{d:__tmhm_value__}_MOVE"
else
MOVE_FOR_TM EQUS "TM{d:__tmhm_value__}_MOVE"
endc
MOVE_FOR_TM = \1
PURGE MOVE_FOR_TM
const TM_\1 const TM_\1
TM{02d:__tmhm_value__}_MOVE = \1
add_tmnum \1 add_tmnum \1
ENDM ENDM
; see data/moves/tmhm_moves.asm for moves ; see data/moves/tmhm_moves.asm for moves
TM01 EQU const_value
add_tm DYNAMICPUNCH ; bf add_tm DYNAMICPUNCH ; bf
add_tm HEADBUTT ; c0 add_tm HEADBUTT ; c0
add_tm CURSE ; c1 add_tm CURSE ; c1
@ -285,23 +276,13 @@ add_hm: MACRO
; - HM_\1: the item id, starting at $f3 ; - HM_\1: the item id, starting at $f3
; - \1_TMNUM: the learnable TM/HM flag, starting at 51 ; - \1_TMNUM: the learnable TM/HM flag, starting at 51
; - HM##_MOVE: alias for the move id, equal to the value of \1 ; - HM##_MOVE: alias for the move id, equal to the value of \1
; The first usage also defines HM01 as the first TM item id.
if !DEF(HM01)
HM01 EQU const_value
endc
HM_VALUE EQU __tmhm_value__ - NUM_TMS
if HM_VALUE < 10
MOVE_FOR_HM EQUS "HM0{d:HM_VALUE}_MOVE"
else
MOVE_FOR_HM EQUS "HM{d:HM_VALUE}_MOVE"
endc
MOVE_FOR_HM = \1
PURGE MOVE_FOR_HM
PURGE HM_VALUE
const HM_\1 const HM_\1
HM_VALUE = __tmhm_value__ - NUM_TMS
HM{02d:HM_VALUE}_MOVE = \1
add_tmnum \1 add_tmnum \1
ENDM ENDM
HM01 EQU const_value
add_hm CUT ; f3 add_hm CUT ; f3
add_hm FLY ; f4 add_hm FLY ; f4
add_hm SURF ; f5 add_hm SURF ; f5
@ -315,18 +296,12 @@ add_mt: MACRO
; Defines two constants: ; Defines two constants:
; - \1_TMNUM: the learnable TM/HM flag, starting at 58 ; - \1_TMNUM: the learnable TM/HM flag, starting at 58
; - MT##_MOVE: alias for the move id, equal to the value of \1 ; - MT##_MOVE: alias for the move id, equal to the value of \1
MT_VALUE EQU __tmhm_value__ - NUM_TMS - NUM_HMS MT_VALUE = __tmhm_value__ - NUM_TMS - NUM_HMS
if MT_VALUE < 10 MT{02d:MT_VALUE}_MOVE = \1
MOVE_FOR_MT EQUS "MT0{d:MT_VALUE}_MOVE"
else
MOVE_FOR_MT EQUS "MT{d:MT_VALUE}_MOVE"
endc
MOVE_FOR_MT = \1
PURGE MOVE_FOR_MT
PURGE MT_VALUE
add_tmnum \1 add_tmnum \1
ENDM ENDM
MT01 EQU const_value
add_mt FLAMETHROWER add_mt FLAMETHROWER
add_mt THUNDERBOLT add_mt THUNDERBOLT
add_mt ICE_BEAM add_mt ICE_BEAM

View File

@ -18,7 +18,7 @@ __map_value__ = __map_value__ + 1
ENDM ENDM
endgroup: MACRO endgroup: MACRO
CURRENT_NUM_MAPGROUP_MAPS EQU __map_value__ - 1 {CURRENT_NUM_MAPGROUP_MAPS} EQU __map_value__ - 1
PURGE CURRENT_NUM_MAPGROUP_MAPS PURGE CURRENT_NUM_MAPGROUP_MAPS
ENDM ENDM

View File

@ -6,44 +6,21 @@ TMHMMoves:
table_width 1, TMHMMoves table_width 1, TMHMMoves
; TMs ; TMs
n = 1 for n, 1, NUM_TMS + 1
rept NUM_TMS db TM{02d:n}_MOVE
if n < 10
MOVE_FOR_TM EQUS "TM0{d:n}_MOVE"
else
MOVE_FOR_TM EQUS "TM{d:n}_MOVE"
endc
db MOVE_FOR_TM
PURGE MOVE_FOR_TM
n = n + 1
endr endr
assert_table_length NUM_TMS assert_table_length NUM_TMS
; HMs ; HMs
n = 1 for n, 1, NUM_HMS + 1
rept NUM_HMS db HM{02d:n}_MOVE
if n < 10
MOVE_FOR_HM EQUS "HM0{d:n}_MOVE"
else
MOVE_FOR_HM EQUS "HM{d:n}_MOVE"
endc
db MOVE_FOR_HM
PURGE MOVE_FOR_HM
n = n + 1
endr endr
assert_table_length NUM_TMS + NUM_HMS assert_table_length NUM_TMS + NUM_HMS
; Move tutor ; Move tutors
n = 1 n = 1
rept NUM_TUTORS for n, 1, NUM_TUTORS + 1
if n < 10 db MT{02d:n}_MOVE
MOVE_FOR_MT EQUS "MT0{d:n}_MOVE"
else
MOVE_FOR_MT EQUS "MT{d:n}_MOVE"
endc
db MOVE_FOR_MT
PURGE MOVE_FOR_MT
n = n + 1
endr endr
assert_table_length NUM_TM_HM_TUTOR assert_table_length NUM_TM_HM_TUTOR

View File

@ -1,33 +1,23 @@
; used in data/pokemon/base_stats/*.asm ; used in data/pokemon/base_stats/*.asm
tmhm: MACRO tmhm: MACRO
; initialize bytes to 0 ; initialize bytes to 0
n = 0 for n, (NUM_TM_HM_TUTOR + 7) / 8
rept (NUM_TM_HM_TUTOR + 7) / 8 _tm{d:n} = 0
_TM_BYTE EQUS "_tm{d:n}"
_TM_BYTE = 0
PURGE _TM_BYTE
n = n + 1
endr endr
; set bits of bytes ; set bits of bytes
rept _NARG rept _NARG
if DEF(\1_TMNUM) if DEF(\1_TMNUM)
n = (\1_TMNUM - 1) / 8 n = (\1_TMNUM - 1) / 8
i = (\1_TMNUM - 1) % 8 i = (\1_TMNUM - 1) % 8
_TM_BYTE EQUS "_tm{d:n}" _tm{d:n} = _tm{d:n} | (1 << i)
_TM_BYTE = _TM_BYTE | (1 << i)
PURGE _TM_BYTE
else else
fail "\1 is not a TM, HM, or tutor move" fail "\1 is not a TM, HM, or tutor move"
endc endc
shift shift
endr endr
; output bytes ; output bytes
n = 0 for n, (NUM_TM_HM_TUTOR + 7) / 8
rept (NUM_TM_HM_TUTOR + 7) / 8 db _tm{d:n}
_TM_BYTE EQUS "_tm{d:n}"
db _TM_BYTE
PURGE _TM_BYTE
n = n + 1
endr endr
ENDM ENDM

View File

@ -1,8 +1,6 @@
unownword: MACRO unownword: MACRO
x = 1 for x, STRLEN(\1)
rept STRLEN(\1) db STRSUB(\1, x + 1, 1) - "A" + FIRST_UNOWN_CHAR
db STRSUB(\1, x, 1) - "A" + FIRST_UNOWN_CHAR
x = x + 1
endr endr
db -1 db -1
ENDM ENDM

View File

@ -386,11 +386,9 @@ ValidateBTParty: ; unreferenced
ld c, l ld c, l
ld a, [hl] ld a, [hl]
and a and a
x = $ff for x, $ff, NUM_POKEMON, -1
rept $ff - NUM_POKEMON
jr z, .invalid jr z, .invalid
cp x cp x
x = x - 1
endr endr
jr nz, .valid jr nz, .valid

View File

@ -43,10 +43,8 @@ BuenasPassword:
.PasswordIndices: .PasswordIndices:
db NUM_PASSWORDS_PER_CATEGORY db NUM_PASSWORDS_PER_CATEGORY
x = 0 for x, NUM_PASSWORDS_PER_CATEGORY
rept NUM_PASSWORDS_PER_CATEGORY
db x db x
x = x + 1
endr endr
db -1 db -1
@ -264,10 +262,8 @@ Buena_PrizeMenu:
.Prizes: .Prizes:
db NUM_BUENA_PRIZES db NUM_BUENA_PRIZES
x = 1 for x, NUM_BUENA_PRIZES
rept NUM_BUENA_PRIZES db x + 1
db x
x = x + 1
endr endr
db -1 db -1

View File

@ -95,17 +95,9 @@ RotateUnownFrontpic:
jr nz, .loop_count jr nz, .loop_count
ret ret
gbprinterrect: MACRO
y = 0
rept \1
x = \1 * (\2 - 1) + y
rept \2
dw wGameboyPrinter2bppSource tile x
x = x - \2
endr
y = y + 1
endr
ENDM
UnownPrinter_GBPrinterRectangle: UnownPrinter_GBPrinterRectangle:
gbprinterrect 7, 7 for y, 7
for x, 7 - 1, -1, -1
dw wGameboyPrinter2bppSource tile (x * 7 + y)
endr
endr

View File

@ -721,10 +721,8 @@ ConvertLoadedPuzzlePieces:
ret ret
.EnlargedTiles: .EnlargedTiles:
x = 0 for x, 16
rept 16
db ((x & %1000) * %11000) + ((x & %0100) * %1100) + ((x & %0010) * %110) + ((x & %0001) * %11) db ((x & %1000) * %11000) + ((x & %0100) * %1100) + ((x & %0010) * %110) + ((x & %0001) * %11)
x = x + 1
endr endr
UnownPuzzle_AddPuzzlePieceBorders: UnownPuzzle_AddPuzzlePieceBorders:

View File

@ -534,14 +534,10 @@ PokeAnim_CopyBitmaskToBuffer:
.Sizes: db 4, 5, 7 .Sizes: db 4, 5, 7
poke_anim_box: MACRO poke_anim_box: MACRO
y = 7 for y, 1, \1 + 1
rept \1 for x, 7 - \1, 7
x = 7 - \1 db y * 7 + x
rept \1
db x + y
x = x + 1
endr endr
y = y + 7
endr endr
ENDM ENDM

View File

@ -25,8 +25,6 @@ GetSquareRoot:
ret ret
.Squares: .Squares:
x = 1 for x, 1, NUM_SQUARE_ROOTS + 1
rept NUM_SQUARE_ROOTS dw x**2
dw x * x
x = x + 1
endr endr

View File

@ -1309,8 +1309,7 @@ if \1 == 0 && \2 == 0
_dx = 0 _dx = 0
endc endc
dbpixel \1, \2, _dx, 0 dbpixel \1, \2, _dx, 0
shift shift 2
shift
endr endr
ENDM ENDM
; frame 0 y, x; frame 1 y, x ; frame 0 y, x; frame 1 y, x

View File

@ -1310,26 +1310,20 @@ CrystalIntro_UnownFade:
.BWFade: .BWFade:
; Fade between black and white. ; Fade between black and white.
hue = 0 for hue, 32
rept 32
RGB hue, hue, hue RGB hue, hue, hue
hue = hue + 1
endr endr
.BlackLBlueFade: .BlackLBlueFade:
; Fade between black and light blue. ; Fade between black and light blue.
hue = 0 for hue, 32
rept 32
RGB 0, hue / 2, hue RGB 0, hue / 2, hue
hue = hue + 1
endr endr
.BlackBlueFade: .BlackBlueFade:
; Fade between black and blue. ; Fade between black and blue.
hue = 0 for hue, 32
rept 32
RGB 0, 0, hue RGB 0, 0, hue
hue = hue + 1
endr endr
Intro_Scene20_AppearUnown: Intro_Scene20_AppearUnown:

View File

@ -55,7 +55,6 @@ PlayerObjectTemplate:
; A dummy map object used to initialize the player object. ; A dummy map object used to initialize the player object.
; Shorter than the actual amount copied by two bytes. ; Shorter than the actual amount copied by two bytes.
; Said bytes seem to be unused. ; Said bytes seem to be unused.
_NUM_OBJECT_EVENTS = 0
object_event -4, -4, SPRITE_CHRIS, SPRITEMOVEDATA_PLAYER, 15, 15, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, 0, -1 object_event -4, -4, SPRITE_CHRIS, SPRITEMOVEDATA_PLAYER, 15, 15, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, 0, -1
CopyDECoordsToMapObject:: CopyDECoordsToMapObject::

View File

@ -1004,11 +1004,9 @@ PokegearPhone_GetDPad:
PokegearPhone_UpdateCursor: PokegearPhone_UpdateCursor:
ld a, " " ld a, " "
x = 4 for y, PHONE_DISPLAY_HEIGHT
rept PHONE_DISPLAY_HEIGHT hlcoord 1, 4 + y * 2
hlcoord 1, x
ld [hl], a ld [hl], a
x = x + 2
endr endr
hlcoord 1, 4 hlcoord 1, 4
ld a, [wPokegearPhoneCursorPosition] ld a, [wPokegearPhoneCursorPosition]

View File

@ -2280,10 +2280,8 @@ _ChangeBox_MenuHeader:
.Boxes: .Boxes:
db NUM_BOXES db NUM_BOXES
x = 1 for x, NUM_BOXES
rept NUM_BOXES db x + 1
db x
x = x + 1
endr endr
db -1 db -1

View File

@ -2,33 +2,27 @@
table_width: MACRO table_width: MACRO
CURRENT_TABLE_WIDTH = \1 CURRENT_TABLE_WIDTH = \1
if DEF(CURRENT_TABLE_START)
PURGE CURRENT_TABLE_START
endc
if _NARG == 2 if _NARG == 2
CURRENT_TABLE_START EQUS "\2" REDEF CURRENT_TABLE_START EQUS "\2"
else else
CURRENT_TABLE_START EQUS "._table_width\@" REDEF CURRENT_TABLE_START EQUS "._table_width\@"
CURRENT_TABLE_START: {CURRENT_TABLE_START}:
endc endc
ENDM ENDM
assert_table_length: MACRO assert_table_length: MACRO
x = \1 x = \1
assert x * CURRENT_TABLE_WIDTH == @ - CURRENT_TABLE_START, \ assert x * CURRENT_TABLE_WIDTH == @ - {CURRENT_TABLE_START}, \
"{CURRENT_TABLE_START}: expected {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes" "{CURRENT_TABLE_START}: expected {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes"
ENDM ENDM
list_start: MACRO list_start: MACRO
list_index = 0 list_index = 0
if DEF(CURRENT_LIST_START)
PURGE CURRENT_LIST_START
endc
if _NARG == 1 if _NARG == 1
CURRENT_LIST_START EQUS "\1" REDEF CURRENT_LIST_START EQUS "\1"
else else
CURRENT_LIST_START EQUS "._list_start\@" REDEF CURRENT_LIST_START EQUS "._list_start\@"
CURRENT_LIST_START: {CURRENT_LIST_START}:
endc endc
ENDM ENDM
@ -46,38 +40,26 @@ ENDM
def_grass_wildmons: MACRO def_grass_wildmons: MACRO
;\1: map id ;\1: map id
if DEF(CURRENT_GRASS_WILDMONS_MAP) REDEF CURRENT_GRASS_WILDMONS_MAP EQUS "\1"
PURGE CURRENT_GRASS_WILDMONS_MAP REDEF CURRENT_GRASS_WILDMONS_LABEL EQUS "._def_grass_wildmons_\1"
endc {CURRENT_GRASS_WILDMONS_LABEL}:
if DEF(CURRENT_GRASS_WILDMONS_LABEL)
PURGE CURRENT_GRASS_WILDMONS_LABEL
endc
CURRENT_GRASS_WILDMONS_MAP EQUS "\1"
CURRENT_GRASS_WILDMONS_LABEL EQUS "._def_grass_wildmons_\1"
CURRENT_GRASS_WILDMONS_LABEL:
map_id \1 map_id \1
ENDM ENDM
end_grass_wildmons: MACRO end_grass_wildmons: MACRO
assert GRASS_WILDDATA_LENGTH == @ - CURRENT_GRASS_WILDMONS_LABEL, \ assert GRASS_WILDDATA_LENGTH == @ - {CURRENT_GRASS_WILDMONS_LABEL}, \
"def_grass_wildmons {CURRENT_GRASS_WILDMONS_MAP}: expected {d:GRASS_WILDDATA_LENGTH} bytes" "def_grass_wildmons {CURRENT_GRASS_WILDMONS_MAP}: expected {d:GRASS_WILDDATA_LENGTH} bytes"
ENDM ENDM
def_water_wildmons: MACRO def_water_wildmons: MACRO
;\1: map id ;\1: map id
if DEF(CURRENT_WATER_WILDMONS_MAP) REDEF CURRENT_WATER_WILDMONS_MAP EQUS "\1"
PURGE CURRENT_WATER_WILDMONS_MAP REDEF CURRENT_WATER_WILDMONS_LABEL EQUS "._def_water_wildmons_\1"
endc {CURRENT_WATER_WILDMONS_LABEL}:
if DEF(CURRENT_WATER_WILDMONS_LABEL)
PURGE CURRENT_WATER_WILDMONS_LABEL
endc
CURRENT_WATER_WILDMONS_MAP EQUS "\1"
CURRENT_WATER_WILDMONS_LABEL EQUS "._def_water_wildmons_\1"
CURRENT_WATER_WILDMONS_LABEL:
map_id \1 map_id \1
ENDM ENDM
end_water_wildmons: MACRO end_water_wildmons: MACRO
assert WATER_WILDDATA_LENGTH == @ - CURRENT_WATER_WILDMONS_LABEL, \ assert WATER_WILDDATA_LENGTH == @ - {CURRENT_WATER_WILDMONS_LABEL}, \
"def_water_wildmons {CURRENT_WATER_WILDMONS_MAP}: expected {d:WATER_WILDDATA_LENGTH} bytes" "def_water_wildmons {CURRENT_WATER_WILDMONS_MAP}: expected {d:WATER_WILDDATA_LENGTH} bytes"
ENDM ENDM

View File

@ -70,24 +70,16 @@ rept _NARG / 4
endr endr
ENDM ENDM
dx: MACRO
x = 8 * ((\1) - 1)
rept \1
db ((\2) >> x) & $ff
x = x - 8
endr
ENDM
dt: MACRO ; three-byte (big-endian) dt: MACRO ; three-byte (big-endian)
dx 3, \1 db LOW((\1) >> 16), HIGH(\1), LOW(\1)
ENDM ENDM
dd: MACRO ; four-byte (big-endian) dd: MACRO ; four-byte (big-endian)
dx 4, \1 db HIGH((\1) >> 16), LOW((\1) >> 16), HIGH(\1), LOW(\1)
ENDM ENDM
bigdw: MACRO ; big-endian word bigdw: MACRO ; big-endian word
dx 2, \1 ; db HIGH(\1), LOW(\1) db HIGH(\1), LOW(\1)
ENDM ENDM
dba: MACRO ; dbw bank, address dba: MACRO ; dbw bank, address

View File

@ -8,44 +8,35 @@ ENDM
object_const_def EQUS "const_def 2" object_const_def EQUS "const_def 2"
def_scene_scripts: MACRO def_scene_scripts: MACRO
if DEF(_NUM_SCENE_SCRIPTS) REDEF _NUM_SCENE_SCRIPTS EQUS "_NUM_SCENE_SCRIPTS_\@"
PURGE _NUM_SCENE_SCRIPTS db {_NUM_SCENE_SCRIPTS}
endc {_NUM_SCENE_SCRIPTS} = 0
_NUM_SCENE_SCRIPTS EQUS "_NUM_SCENE_SCRIPTS_\@"
db _NUM_SCENE_SCRIPTS
_NUM_SCENE_SCRIPTS = 0
ENDM ENDM
scene_script: MACRO scene_script: MACRO
;\1: script pointer ;\1: script pointer
dw \1 dw \1
dw 0 ; filler dw 0 ; filler
_NUM_SCENE_SCRIPTS = _NUM_SCENE_SCRIPTS + 1 {_NUM_SCENE_SCRIPTS} = {_NUM_SCENE_SCRIPTS} + 1
ENDM ENDM
def_callbacks: MACRO def_callbacks: MACRO
if DEF(_NUM_CALLBACKS) REDEF _NUM_CALLBACKS EQUS "_NUM_CALLBACKS_\@"
PURGE _NUM_CALLBACKS db {_NUM_CALLBACKS}
endc {_NUM_CALLBACKS} = 0
_NUM_CALLBACKS EQUS "_NUM_CALLBACKS_\@"
db _NUM_CALLBACKS
_NUM_CALLBACKS = 0
ENDM ENDM
callback: MACRO callback: MACRO
;\1: type: a MAPCALLBACK_* constant ;\1: type: a MAPCALLBACK_* constant
;\2: script pointer ;\2: script pointer
dbw \1, \2 dbw \1, \2
_NUM_CALLBACKS = _NUM_CALLBACKS + 1 {_NUM_CALLBACKS} = {_NUM_CALLBACKS} + 1
ENDM ENDM
def_warp_events: MACRO def_warp_events: MACRO
if DEF(_NUM_WARP_EVENTS) REDEF _NUM_WARP_EVENTS EQUS "_NUM_WARP_EVENTS_\@"
PURGE _NUM_WARP_EVENTS db {_NUM_WARP_EVENTS}
endc {_NUM_WARP_EVENTS} = 0
_NUM_WARP_EVENTS EQUS "_NUM_WARP_EVENTS_\@"
db _NUM_WARP_EVENTS
_NUM_WARP_EVENTS = 0
ENDM ENDM
warp_event: MACRO warp_event: MACRO
@ -55,16 +46,13 @@ warp_event: MACRO
;\4: warp destination: starts at 1 ;\4: warp destination: starts at 1
db \2, \1, \4 db \2, \1, \4
map_id \3 map_id \3
_NUM_WARP_EVENTS = _NUM_WARP_EVENTS + 1 {_NUM_WARP_EVENTS} = {_NUM_WARP_EVENTS} + 1
ENDM ENDM
def_coord_events: MACRO def_coord_events: MACRO
if DEF(_NUM_COORD_EVENTS) REDEF _NUM_COORD_EVENTS EQUS "_NUM_COORD_EVENTS_\@"
PURGE _NUM_COORD_EVENTS db {_NUM_COORD_EVENTS}
endc {_NUM_COORD_EVENTS} = 0
_NUM_COORD_EVENTS EQUS "_NUM_COORD_EVENTS_\@"
db _NUM_COORD_EVENTS
_NUM_COORD_EVENTS = 0
ENDM ENDM
coord_event: MACRO coord_event: MACRO
@ -76,16 +64,13 @@ coord_event: MACRO
db 0 ; filler db 0 ; filler
dw \4 dw \4
dw 0 ; filler dw 0 ; filler
_NUM_COORD_EVENTS = _NUM_COORD_EVENTS + 1 {_NUM_COORD_EVENTS} = {_NUM_COORD_EVENTS} + 1
ENDM ENDM
def_bg_events: MACRO def_bg_events: MACRO
if DEF(_NUM_BG_EVENTS) REDEF _NUM_BG_EVENTS EQUS "_NUM_BG_EVENTS_\@"
PURGE _NUM_BG_EVENTS db {_NUM_BG_EVENTS}
endc {_NUM_BG_EVENTS} = 0
_NUM_BG_EVENTS EQUS "_NUM_BG_EVENTS_\@"
db _NUM_BG_EVENTS
_NUM_BG_EVENTS = 0
ENDM ENDM
bg_event: MACRO bg_event: MACRO
@ -95,16 +80,13 @@ bg_event: MACRO
;\4: script pointer ;\4: script pointer
db \2, \1, \3 db \2, \1, \3
dw \4 dw \4
_NUM_BG_EVENTS = _NUM_BG_EVENTS + 1 {_NUM_BG_EVENTS} = {_NUM_BG_EVENTS} + 1
ENDM ENDM
def_object_events: MACRO def_object_events: MACRO
if DEF(_NUM_OBJECT_EVENTS) REDEF _NUM_OBJECT_EVENTS EQUS "_NUM_OBJECT_EVENTS_\@"
PURGE _NUM_OBJECT_EVENTS db {_NUM_OBJECT_EVENTS}
endc {_NUM_OBJECT_EVENTS} = 0
_NUM_OBJECT_EVENTS EQUS "_NUM_OBJECT_EVENTS_\@"
db _NUM_OBJECT_EVENTS
_NUM_OBJECT_EVENTS = 0
ENDM ENDM
object_event: MACRO object_event: MACRO
@ -135,7 +117,10 @@ object_event: MACRO
dw \9 dw \9
shift shift
dw \9 dw \9
_NUM_OBJECT_EVENTS = _NUM_OBJECT_EVENTS + 1 ; the dummy PlayerObjectTemplate object_event has no def_object_events
if DEF(_NUM_OBJECT_EVENTS)
{_NUM_OBJECT_EVENTS} = {_NUM_OBJECT_EVENTS} + 1
endc
ENDM ENDM
trainer: MACRO trainer: MACRO

View File

@ -4048,11 +4048,7 @@ macro_11f220: MACRO
; parameter: number of words ; parameter: number of words
db \1 db \1
; 12 words per page (0-based indexing) ; 12 words per page (0-based indexing)
x = \1 / 12 db (\1 - 1) / 12
if \1 % 12 == 0
x = x - 1
endc
db x
ENDM ENDM
macro_11f220 18 ; 01: Types macro_11f220 18 ; 01: Types
macro_11f220 36 ; 02: Greetings macro_11f220 36 ; 02: Greetings
@ -4076,10 +4072,10 @@ EZChat_SortedWords:
; These arrays are expanded dynamically to accomodate ; These arrays are expanded dynamically to accomodate
; any Pokemon you've seen that starts with each kana. ; any Pokemon you've seen that starts with each kana.
macro_11f23c: MACRO macro_11f23c: MACRO
dw x - w3_d000, \1 dw w3_d012 - w3_d000 + x, \1
x = x + 2 * \1 x = x + 2 * \1
ENDM ENDM
x = $d012 ; w3_d012 x = 0
macro_11f23c $2f ; a macro_11f23c $2f ; a
macro_11f23c $1e ; i macro_11f23c $1e ; i
macro_11f23c $11 ; u macro_11f23c $11 ; u
@ -4124,6 +4120,5 @@ x = $d012 ; w3_d012
macro_11f23c $02 ; re macro_11f23c $02 ; re
macro_11f23c $02 ; ro macro_11f23c $02 ; ro
macro_11f23c $15 ; wa macro_11f23c $15 ; wa
x = $d000 ; w3_d000 dw NULL, $09 ; end
macro_11f23c $09 ; end
.End .End

View File

@ -593,10 +593,8 @@ MenuData_0x4851b:
.Items: .Items:
db 46 db 46
x = 0 for x, 46
rept 46
db x db x
x = x + 1
endr endr
db -1 db -1

View File

@ -5240,24 +5240,18 @@ Function11a88c:
ret ret
Unknown_11a89a: Unknown_11a89a:
x = 0 for x, 16
rept 16
bcd x % 100, x / 100 bcd x % 100, x / 100
x = x + 1
endr endr
Unknown_11a8ba: Unknown_11a8ba:
x = 0 for x, 0, 16**2, 16
rept 16
bcd x % 100, x / 100 bcd x % 100, x / 100
x = x + 16
endr endr
Unknown_11a8da: Unknown_11a8da:
x = 0 for x, 0, 16**3, 16**2
rept 16
bcd x % 100, x / 100 bcd x % 100, x / 100
x = x + 256
endr endr
BattleTowerRoomMenu_WriteMessage: BattleTowerRoomMenu_WriteMessage:

View File

@ -1601,17 +1601,13 @@ Function17da31:
ret ret
Unknown_17da8c: Unknown_17da8c:
x = 0 for x, 8
rept 8
db 1 << x db 1 << x
x = x + 1
endr endr
Unknown_17da94: Unknown_17da94:
x = 0 for x, 8
rept 8
db $ff ^ (1 << x) db $ff ^ (1 << x)
x = x + 1
endr endr
Function17da9c: Function17da9c:

View File

@ -1,14 +1,18 @@
; pokecrystal requires rgbds 0.4.2 or newer.
MAJOR EQU 0 MAJOR EQU 0
MINOR EQU 4 MINOR EQU 5
PATCH EQU 2 PATCH EQU 0
if !DEF(__RGBDS_MAJOR__) || !DEF(__RGBDS_MINOR__) || !DEF(__RGBDS_PATCH__) wrong_rgbds: MACRO
fail "pokecrystal requires rgbds 0.4.2 or newer." fail "pokecrystal requires rgbds v0.5.0 or newer."
else ENDM
if (__RGBDS_MAJOR__ < MAJOR) || \
IF !DEF(__RGBDS_MAJOR__) || !DEF(__RGBDS_MINOR__) || !DEF(__RGBDS_PATCH__)
wrong_rgbds
ELSE
IF (__RGBDS_MAJOR__ < MAJOR) || \
(__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ < MINOR) || \ (__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ < MINOR) || \
(__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ == MINOR && __RGBDS_PATCH__ < PATCH) (__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ == MINOR && __RGBDS_PATCH__ < PATCH) || \
fail "pokecrystal requires rgbds 0.4.2 or newer." (__RGBDS_MAJOR__ == MAJOR && __RGBDS_MINOR__ == MINOR && __RGBDS_PATCH__ == PATCH && DEF(__RGBDS_RC__))
endc wrong_rgbds
endc ENDC
ENDC

View File

@ -82,14 +82,14 @@ for objfile in objects:
elif magic == b'RGB9': elif magic == b'RGB9':
obj_ver = 10 + unpack_file("<I", f)[0] obj_ver = 10 + unpack_file("<I", f)[0]
if obj_ver not in [6, 10, 11, 12, 13, 15, 16]: if obj_ver not in [6, 10, 11, 12, 13, 15, 16, 17]:
print("Error: File '%s' is of an unknown format." % objfile, file=stderr) print("Error: File '%s' is of an unknown format." % objfile, file=stderr)
exit(1) exit(1)
num_symbols = unpack_file("<I", f)[0] num_symbols = unpack_file("<I", f)[0]
unpack_file("<I", f) # skip num sections unpack_file("<I", f) # skip num sections
if obj_ver in [16]: if obj_ver in [16, 17]:
node_filenames = [] node_filenames = []
num_nodes = unpack_file("<I", f)[0] num_nodes = unpack_file("<I", f)[0]
for x in range(num_nodes): for x in range(num_nodes):
@ -109,7 +109,7 @@ for objfile in objects:
sym_type = symtype(unpack_file("<B", f)[0] & 0x7f) sym_type = symtype(unpack_file("<B", f)[0] & 0x7f)
if sym_type == symtype.IMPORT: if sym_type == symtype.IMPORT:
continue continue
if obj_ver in [16]: if obj_ver in [16, 17]:
sym_fileno = unpack_file("<I", f)[0] sym_fileno = unpack_file("<I", f)[0]
sym_filename = node_filenames[sym_fileno] sym_filename = node_filenames[sym_fileno]
else: else: