Require rgbds 0.5.1

Use some new features: \<10> macro args, SECTION UNION, SIZEOF/STARTOF, and CHARLEN/CHARSUB
This commit is contained in:
Rangi 2021-05-09 12:26:28 -04:00
parent efd1006917
commit b1dbadbdd3
14 changed files with 224 additions and 148 deletions

View File

@ -9,7 +9,7 @@ install:
HOMEBREW_NO_AUTO_UPDATE=1 brew install bison HOMEBREW_NO_AUTO_UPDATE=1 brew install bison
export PATH="/usr/local/opt/bison/bin:$PATH" export PATH="/usr/local/opt/bison/bin:$PATH"
fi fi
git clone -b v0.5.0 --depth=1 https://github.com/gbdev/rgbds git clone -b v0.5.1 --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.5.0**][rgbds] or newer. Older versions will not work. Download [**rgbds 0.5.1**][rgbds] or newer. Older versions will not work.
### "ERROR: Macro not defined" ### "ERROR: Macro not defined"
Download [**rgbds 0.5.0**][rgbds] or newer. Older versions will not work. Download [**rgbds 0.5.1**][rgbds] or newer. Older versions will not work.
### "Expression must be 8-bit" ### "Expression must be 8-bit"
Download [**rgbds 0.5.0**][rgbds] or newer. Older versions will not work. Download [**rgbds 0.5.1**][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.5.0**. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/windows) for Windows with Cygwin to install **rgbds 0.5.1**.
**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. **Note:** If you already have an older rgbds, you will need to update to 0.5.1. Ignore this if you have never installed rgbds before. If a version newer than 0.5.1 does not work, try downloading 0.5.1.
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.5.0**. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/macos) for macOS to install **rgbds 0.5.1**.
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.5.0** from source. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.5.1** 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.5.0** from source. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/source) to build **rgbds 0.5.1** 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.5.0**. Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install/arch) for Arch Linux to install **rgbds 0.5.1**.
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. 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.1** 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.5.0** 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.1** 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.5.0** 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.1** from source.
Now you're ready to [build **pokecrystal**](#build-pokecrystal). Now you're ready to [build **pokecrystal**](#build-pokecrystal).
@ -161,12 +161,12 @@ make crystal11
### Build with a local rgbds version ### 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`: If you have different projects that require different versions of `rgbds`, it might not be convenient to install rgbds 0.5.1 globally. Instead, you can put its files in a directory within pokecrystal, such as `pokecrystal/rgbds-0.5.1/`. Then specify it when you run `make`:
```bash ```bash
make RGBDS=rgbds-0.5.0/ make RGBDS=rgbds-0.5.1/
``` ```
```bash ```bash
make RGBDS=rgbds-0.5.0/ crystal11 make RGBDS=rgbds-0.5.1/ crystal11
``` ```

View File

@ -1,9 +1,8 @@
npctrade: MACRO npctrade: MACRO
; dialog set, requested mon, offered mon, nickname, dvs, item, OT ID, OT name, gender requested ; dialog set, requested mon, offered mon, nickname, dvs, item, OT ID, OT name, gender requested
db \1, \2, \3, \4, \5, \6, \7 db \1, \2, \3, \4, \5, \6, \7
shift dw \8
dw \7 db \9, \<10>, 0
db \8, \9, 0
ENDM ENDM
NPCTrades: NPCTrades:

View File

@ -1,35 +1,34 @@
unownwall: MACRO unownwall: MACRO
rept _NARG for n, CHARLEN(\1)
if \1 == "-" x = CHARSUB(\1, n + 1)
x = $64 if x == "-"
elif \1 >= "Y" db $64
x = 2 * (\1 - "Y") + $60 elif x >= "Y"
elif \1 >= "Q" db 2 * (x - "Y") + $60
x = 2 * (\1 - "Q") + $40 elif x >= "Q"
elif \1 >= "I" db 2 * (x - "Q") + $40
x = 2 * (\1 - "I") + $20 elif x >= "I"
db 2 * (x - "I") + $20
else else
x = 2 * (\1 - "A") db 2 * (x - "A")
endc endc
db x
shift
endr endr
db -1 ; end db -1 ; end
ENDM ENDM
UnownWalls: UnownWalls:
; UNOWNWORDS_ESCAPE ; UNOWNWORDS_ESCAPE
; db $08, $44, $04, $00, $2e, $08, -1 ; db $08, $44, $04, $00, $2e, $08, -1
unownwall "E", "S", "C", "A", "P", "E" unownwall "ESCAPE"
; UNOWNWORDS_LIGHT ; UNOWNWORDS_LIGHT
; db $26, $20, $0c, $0e, $46, -1 ; db $26, $20, $0c, $0e, $46, -1
unownwall "L", "I", "G", "H", "T" unownwall "LIGHT"
; UNOWNWORDS_WATER ; UNOWNWORDS_WATER
; db $4c, $00, $46, $08, $42, -1 ; db $4c, $00, $46, $08, $42, -1
unownwall "W", "A", "T", "E", "R" unownwall "WATER"
; UNOWNWORDS_HO_OH ; UNOWNWORDS_HO_OH
; db $0e, $2c, $64, $2c, $0e, -1 ; db $0e, $2c, $64, $2c, $0e, -1
unownwall "H", "O", "-", "O", "H" unownwall "HO-OH"
MenuHeaders_UnownWalls: MenuHeaders_UnownWalls:
; UNOWNWORDS_ESCAPE ; UNOWNWORDS_ESCAPE

View File

@ -1,6 +1,6 @@
unownword: MACRO unownword: MACRO
for x, STRLEN(\1) for n, CHARLEN(\1)
db STRSUB(\1, x + 1, 1) - "A" + FIRST_UNOWN_CHAR db CHARSUB(\1, n + 1) - "A" + FIRST_UNOWN_CHAR
endr endr
db -1 db -1
ENDM ENDM

View File

@ -14,8 +14,8 @@ _UnownPuzzle:
xor a xor a
ldh [hBGMapMode], a ldh [hBGMapMode], a
call DisableLCD call DisableLCD
ld hl, wUnownPuzzle ; includes wPuzzlePieces ld hl, STARTOF("Miscellaneous") ; includes wPuzzlePieces
ld bc, wUnownPuzzleEnd - wUnownPuzzle ld bc, SIZEOF("Miscellaneous")
xor a xor a
call ByteFill call ByteFill
ld hl, UnownPuzzleCursorGFX ld hl, UnownPuzzleCursorGFX

View File

@ -187,24 +187,22 @@ NextChar::
CheckDict:: CheckDict::
dict: MACRO dict: MACRO
assert CHARLEN(\1) == 1
if \1 == 0 if \1 == 0
and a and a
else else
cp \1 cp \1
endc endc
if ISCONST(\2) if ISCONST(\2)
; Replace a character with another one ; Replace a character with another one
jr nz, ._\@ jr nz, .not\@
ld a, \2 ld a, \2
._\@: .not\@:
else elif STRSUB("\2", 1, 1) == "."
if STRSUB("\2", 1, 1) == "."
; Locals can use a short jump ; Locals can use a short jump
jr z, \2 jr z, \2
else else
jp z, \2 jp z, \2
endc
endc endc
ENDM ENDM

View File

@ -326,12 +326,15 @@ WRAM0
"Sprites" "Sprites"
"Tilemap" "Tilemap"
"Miscellaneous" "Miscellaneous"
"Unused Map Buffer"
align 8 align 8
"Overworld Map" "Overworld Map"
align 4 align 4
"Video" "Video"
WRAMX 1 WRAMX 1
"WRAM 1" "WRAM 1"
"Miscellaneous WRAM 1"
"More WRAM 1"
"Enemy Party" "Enemy Party"
"Party" "Party"
WRAMX 2 WRAMX 2

View File

@ -224,12 +224,7 @@ signpost: MACRO
ENDM ENDM
person_event: MACRO person_event: MACRO
_s = \1 object_event \3, \2, \1, \4, \5, \6, \7, \8, \9, \<10>, \<11>, \<12>, \<13>
_y = \2
_x = \3
_m = \4
shift 4
object_event _x, _y, _s, _m, \1, \2, \3, \4, \5, \6, \7, \8, \9
ENDM ENDM
PERSONTYPE_SCRIPT EQUS "OBJECTTYPE_SCRIPT" PERSONTYPE_SCRIPT EQUS "OBJECTTYPE_SCRIPT"

View File

@ -102,21 +102,16 @@ object_event: MACRO
; * if h1 == -1, h2 is treated as a time-of-day value: ; * if h1 == -1, h2 is treated as a time-of-day value:
; a combo of MORN, DAY, and/or NITE, or -1 to always appear ; a combo of MORN, DAY, and/or NITE, or -1 to always appear
;\9: color: a PAL_NPC_* constant, or 0 for sprite default ;\9: color: a PAL_NPC_* constant, or 0 for sprite default
;\10: function: a OBJECTTYPE_* constant ;\<10>: function: a OBJECTTYPE_* constant
;\11: sight range: applies to OBJECTTYPE_TRAINER ;\<11>: sight range: applies to OBJECTTYPE_TRAINER
;\12: script pointer ;\<12>: script pointer
;\13: event flag: an EVENT_* constant, or -1 to always appear ;\<13>: event flag: an EVENT_* constant, or -1 to always appear
db \3, \2 + 4, \1 + 4, \4 db \3, \2 + 4, \1 + 4, \4
dn \6, \5 dn \6, \5
db \7, \8 db \7, \8
shift dn \9, \<10>
dn \8, \9 db \<11>
shift dw \<12>, \<13>
db \9
shift
dw \9
shift
dw \9
; the dummy PlayerObjectTemplate object_event has no def_object_events ; the dummy PlayerObjectTemplate object_event has no def_object_events
if DEF(_NUM_OBJECT_EVENTS) if DEF(_NUM_OBJECT_EVENTS)
{_NUM_OBJECT_EVENTS} = {_NUM_OBJECT_EVENTS} + 1 {_NUM_OBJECT_EVENTS} = {_NUM_OBJECT_EVENTS} + 1

View File

@ -1,9 +1,9 @@
MAJOR EQU 0 MAJOR EQU 0
MINOR EQU 5 MINOR EQU 5
PATCH EQU 0 PATCH EQU 1
wrong_rgbds: MACRO wrong_rgbds: MACRO
fail "pokecrystal requires rgbds v0.5.0 or newer." fail "pokecrystal requires rgbds v0.5.1 or newer."
ENDM ENDM
IF !DEF(__RGBDS_MAJOR__) || !DEF(__RGBDS_MINOR__) || !DEF(__RGBDS_PATCH__) IF !DEF(__RGBDS_MAJOR__) || !DEF(__RGBDS_MINOR__) || !DEF(__RGBDS_PATCH__)

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, 17]: 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) 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, 17]: if obj_ver in [16, 17, 18]:
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, 17]: if obj_ver in [16, 17, 18]:
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:

235
wram.asm

File diff suppressed because it is too large Load Diff