aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordannye <33dannye@gmail.com>2025-05-10 12:25:27 -0500
committerdannye <33dannye@gmail.com>2025-05-10 12:25:27 -0500
commit2c74f137fc42cf7eaffa0a6f9046e4aa89887f91 (patch)
treec52fc10a17597a1d04b63b79c6df78cc1b00de41
parentFix hardcoded address in VC patch (diff)
parentUse features new to RGBDS 0.9.2 (#506) (diff)
downloadpokeyellow-2c74f137fc42cf7eaffa0a6f9046e4aa89887f91.tar.gz
pokeyellow-2c74f137fc42cf7eaffa0a6f9046e4aa89887f91.tar.xz
pokeyellow-2c74f137fc42cf7eaffa0a6f9046e4aa89887f91.zip
Merge branch 'master' of https://github.com/pret/pokered
-rw-r--r--.github/workflows/main.yml2
-rw-r--r--INSTALL.md24
-rw-r--r--Makefile2
-rw-r--r--constants/pokemon_data_constants.asm4
-rw-r--r--constants/script_constants.asm1
-rw-r--r--constants/text_constants.asm2
-rw-r--r--data/events/trades.asm7
-rw-r--r--engine/battle/core.asm16
-rw-r--r--engine/battle/effects.asm2
-rw-r--r--engine/events/heal_party.asm2
-rw-r--r--engine/events/in_game_trades.asm29
-rw-r--r--engine/events/prize_menu.asm11
-rw-r--r--engine/gfx/mon_icons.asm12
-rw-r--r--engine/items/item_effects.asm10
-rw-r--r--engine/menus/start_sub_menus.asm2
-rw-r--r--engine/menus/text_box.asm2
-rw-r--r--engine/movie/hall_of_fame.asm2
-rw-r--r--engine/pokemon/status_screen.asm2
-rw-r--r--engine/slots/slot_machine.asm2
-rw-r--r--home/list_menu.asm4
-rw-r--r--macros/asserts.asm2
-rw-r--r--macros/coords.asm42
-rw-r--r--macros/scripts/maps.asm12
-rw-r--r--macros/scripts/text.asm43
-rw-r--r--rgbdscheck.asm6
-rw-r--r--scripts/GameCorner.asm2
-rw-r--r--tools/make_patch.c18
27 files changed, 177 insertions, 86 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index a2c37587..228cbc79 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -16,7 +16,7 @@ jobs:
uses: actions/checkout@master
with:
path: rgbds
- ref: v0.9.0
+ ref: v0.9.2
repository: gbdev/rgbds
- name: Install rgbds
diff --git a/INSTALL.md b/INSTALL.md
index 7b6a8520..07b01b58 100644
--- a/INSTALL.md
+++ b/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.9.0**.
+Then follow the [**rgbds** install instructions](https://rgbds.gbdev.io/install#pre-built) for Windows with Cygwin to install **rgbds 0.9.2**.
-**Note:** If you already have an installed rgbds older than 0.9.0, you will need to update to 0.9.0. Ignore this if you have never installed rgbds before. If a version newer than 0.9.0 does not work, try downloading 0.9.0.
+**Note:** If you already have an installed rgbds older than 0.9.2, you will need to update to 0.9.2. Ignore this if you have never installed rgbds before. If a version newer than 0.9.2 does not work, try downloading 0.9.2.
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.9.0**.
+Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#pre-built) for macOS to install **rgbds 0.9.2**.
Now you're ready to [build **pokeyellow**](#build-pokeyellow).
@@ -84,7 +84,7 @@ To install the software required for **pokeyellow**:
sudo apt-get install make gcc git
```
-Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.9.0** from source.
+Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.9.2** from source.
### OpenSUSE
@@ -94,7 +94,7 @@ To install the software required for **pokeyellow**:
sudo zypper install make gcc git
```
-Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.9.0** from source.
+Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.9.2** from source.
### Arch Linux
@@ -104,23 +104,23 @@ To install the software required for **pokeyellow**:
sudo pacman -S make gcc git 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.9.0** 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.9.2** from source.
### Termux
To install the software required for **pokeyellow**:
```bash
-sudo apt install make clang git sed
+pkg install make clang git sed
```
To install **rgbds**:
```bash
-sudo apt install rgbds
+pkg 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.9.0** 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.9.2** from source.
### Other distros
@@ -131,7 +131,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.9.0** 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.9.2** from source.
Now you're ready to [build **pokeyellow**](#build-pokeyellow).
@@ -153,8 +153,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.9.0 globally. Instead, you can put its files in a directory within pokeyellow, such as `pokeyellow/rgbds-0.9.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.9.2 globally. Instead, you can put its files in a directory within pokeyellow, such as `pokeyellow/rgbds-0.9.2/`. Then specify it when you run `make`:
```bash
-make RGBDS=rgbds-0.9.0/
+make RGBDS=rgbds-0.9.2/
```
diff --git a/Makefile b/Makefile
index 6cb1fdbf..eecc1565 100644
--- a/Makefile
+++ b/Makefile
@@ -23,7 +23,7 @@ pokeyellow_vc_obj := $(rom_obj:.o=_vc.o)
### Build tools
-ifeq (,$(shell which sha1sum))
+ifeq (,$(shell command -v sha1sum 2>/dev/null))
SHA1 := shasum
else
SHA1 := sha1sum
diff --git a/constants/pokemon_data_constants.asm b/constants/pokemon_data_constants.asm
index 5cc2d344..e174f78d 100644
--- a/constants/pokemon_data_constants.asm
+++ b/constants/pokemon_data_constants.asm
@@ -98,3 +98,7 @@ DEF NUM_GROWTH_RATES EQU const_value
; wild data (see data/wild/maps/*.asm)
DEF NUM_WILDMONS EQU 10
DEF WILDDATA_LENGTH EQU 1 + NUM_WILDMONS * 2
+
+; PP in box_struct (see macros/ram.asm)
+DEF PP_UP_MASK EQU %11000000 ; number of PP Up used
+DEF PP_MASK EQU %00111111 ; currently remaining PP
diff --git a/constants/script_constants.asm b/constants/script_constants.asm
index 56aee78f..fbdda05e 100644
--- a/constants/script_constants.asm
+++ b/constants/script_constants.asm
@@ -43,6 +43,7 @@ DEF NUM_NPC_TRADES EQU const_value
const TRADE_DIALOGSET_CASUAL
const TRADE_DIALOGSET_EVOLUTION
const TRADE_DIALOGSET_HAPPY
+DEF NUM_TRADE_DIALOGSETS EQU const_value
; OaksAideScript results
DEF OAKS_AIDE_BAG_FULL EQU $00
diff --git a/constants/text_constants.asm b/constants/text_constants.asm
index ee898803..94c07e01 100644
--- a/constants/text_constants.asm
+++ b/constants/text_constants.asm
@@ -2,7 +2,7 @@ DEF NAME_LENGTH EQU 11
DEF ITEM_NAME_LENGTH EQU 13
DEF NAME_BUFFER_LENGTH EQU 20
-; PrintNumber
+; PrintNumber, PrintBCDNumber
const_def 5
const BIT_MONEY_SIGN ; 5
const BIT_LEFT_ALIGN ; 6
diff --git a/data/events/trades.asm b/data/events/trades.asm
index 5c332eb2..1da0036c 100644
--- a/data/events/trades.asm
+++ b/data/events/trades.asm
@@ -4,8 +4,11 @@ TradeMons:
; give mon, get mon, dialog id, nickname
; The two instances of TRADE_DIALOGSET_EVOLUTION are a leftover
; from the Japanese Blue trades, which used species that evolve.
- ; Japanese Red and Green used TRADE_DIALOGSET_CASUAL, and had
- ; the same species as English Red and Blue.
+ ; TRADE_DIALOGSET_EVOLUTION did not refer to evolution in Japanese
+ ; Red/Green. Japanese Blue changed _AfterTrade2Text to say your Pokémon
+ ; "went and evolved" and also changed the trades to match. English
+ ; Red/Blue uses the original JP Red/Green trades but with the JP Blue
+ ; post-trade text.
db LICKITUNG, DUGTRIO, TRADE_DIALOGSET_CASUAL, "GURIO@@@@@@"
db CLEFAIRY, MR_MIME, TRADE_DIALOGSET_CASUAL, "MILES@@@@@@"
db BUTTERFREE, BEEDRILL, TRADE_DIALOGSET_HAPPY, "STINGER@@@@" ; unused
diff --git a/engine/battle/core.asm b/engine/battle/core.asm
index 39e80e74..bfda1347 100644
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -2753,7 +2753,7 @@ ENDC
ld b, $0
add hl, bc
ld a, [hl]
- and $3f
+ and PP_MASK
jr z, .noPP
ld a, [wPlayerDisabledMove]
swap a
@@ -2885,7 +2885,7 @@ AnyMoveToSelect:
or [hl]
inc hl
or [hl]
- and $3f
+ and PP_MASK
ret nz
jr .noMovesLeft
.handleDisabledMove
@@ -3049,7 +3049,7 @@ PrintMenuItem:
ld hl, wBattleMonPP
add hl, bc
ld a, [hl]
- and $3f
+ and PP_MASK
ld [wBattleMenuCurrentPP], a
; print TYPE/<type> and <curPP>/<maxPP>
hlcoord 1, 9
@@ -4242,18 +4242,18 @@ CheckForDisobedience:
ld hl, wBattleMonPP
push hl
ld a, [hli]
- and $3f
+ and PP_MASK
ld b, a
ld a, [hli]
- and $3f
+ and PP_MASK
add b
ld b, a
ld a, [hli]
- and $3f
+ and PP_MASK
add b
ld b, a
ld a, [hl]
- and $3f
+ and PP_MASK
add b
pop hl
push af
@@ -4262,7 +4262,7 @@ CheckForDisobedience:
ld b, $0
add hl, bc
ld a, [hl]
- and $3f
+ and PP_MASK
ld b, a
pop af
cp b
diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm
index 28e78c3d..d7c7b9cb 100644
--- a/engine/battle/effects.asm
+++ b/engine/battle/effects.asm
@@ -1388,7 +1388,7 @@ DisableEffect:
or [hl]
inc hl
or [hl]
- and $3f
+ and PP_MASK
pop hl ; wBattleMonPP or wEnemyMonPP
jr z, .moveMissedPopHL ; nothing to do if all moves have no PP left
add hl, bc
diff --git a/engine/events/heal_party.asm b/engine/events/heal_party.asm
index 8bf162a7..e6551bcd 100644
--- a/engine/events/heal_party.asm
+++ b/engine/events/heal_party.asm
@@ -50,7 +50,7 @@ HealParty:
push bc
ld b, a
ld a, [hl]
- and $c0
+ and PP_UP_MASK
add b
ld [hl], a
pop bc
diff --git a/engine/events/in_game_trades.asm b/engine/events/in_game_trades.asm
index 7ba5fe51..3671dba8 100644
--- a/engine/events/in_game_trades.asm
+++ b/engine/events/in_game_trades.asm
@@ -1,3 +1,12 @@
+; TradeTextPointers1-3 indexes
+ const_def
+ const TRADETEXT_WANNA_TRADE ; 0
+ const TRADETEXT_NO_TRADE ; 1
+ const TRADETEXT_WRONG_MON ; 2
+ const TRADETEXT_THANKS ; 3
+ const TRADETEXT_AFTER_TRADE ; 4
+DEF NUM_TRADE_TEXTS EQU const_value
+
DoInGameTradeDialogue:
; trigger the trade offer/action specified by wWhichTrade
call SaveScreenTilesToBuffer2
@@ -30,7 +39,7 @@ DoInGameTradeDialogue:
ld a, [wInGameTradeReceiveMonSpecies]
ld de, wInGameTradeReceiveMonName
call InGameTrade_GetMonName
- ld a, $4
+ ld a, TRADETEXT_AFTER_TRADE
ld [wInGameTradeTextPointerTableIndex], a
ld b, FLAG_TEST
call InGameTrade_FlagActionPredef
@@ -38,10 +47,10 @@ DoInGameTradeDialogue:
and a
jr nz, .printText
; if the trade hasn't been done yet
- ld a, $0
+ ld a, TRADETEXT_WANNA_TRADE
ld [wInGameTradeTextPointerTableIndex], a
call .printText
- ld a, $1
+ ld a, TRADETEXT_NO_TRADE
ld [wInGameTradeTextPointerTableIndex], a
call YesNoChoice
ld a, [wCurrentMenuItem]
@@ -87,13 +96,13 @@ InGameTrade_DoTrade:
push af
call InGameTrade_RestoreScreen
pop af
- ld a, $1
+ ld a, TRADETEXT_NO_TRADE
jp c, .tradeFailed ; jump if the player didn't select a pokemon
ld a, [wInGameTradeGiveMonSpecies]
ld b, a
ld a, [wCurPartySpecies]
cp b
- ld a, $2
+ ld a, TRADETEXT_WRONG_MON
jr nz, .tradeFailed ; jump if the selected mon's species is not the required one
ld a, [wWhichPokemon]
ld hl, wPartyMon1Level
@@ -131,7 +140,7 @@ InGameTrade_DoTrade:
call InGameTrade_RestoreScreen
farcall RedrawMapView
and a
- ld a, $3
+ ld a, TRADETEXT_THANKS
jr .tradeSucceeded
.tradeFailed
scf
@@ -254,30 +263,38 @@ InGameTrade_TrainerString:
InGameTradeTextPointers:
; entries correspond to TRADE_DIALOGSET_* constants
+ table_width 2
dw TradeTextPointers1
dw TradeTextPointers2
dw TradeTextPointers3
+ assert_table_length NUM_TRADE_DIALOGSETS
TradeTextPointers1:
+ table_width 2
dw WannaTrade1Text
dw NoTrade1Text
dw WrongMon1Text
dw Thanks1Text
dw AfterTrade1Text
+ assert_table_length NUM_TRADE_TEXTS
TradeTextPointers2:
+ table_width 2
dw WannaTrade2Text
dw NoTrade2Text
dw WrongMon2Text
dw Thanks2Text
dw AfterTrade2Text
+ assert_table_length NUM_TRADE_TEXTS
TradeTextPointers3:
+ table_width 2
dw WannaTrade3Text
dw NoTrade3Text
dw WrongMon3Text
dw Thanks3Text
dw AfterTrade3Text
+ assert_table_length NUM_TRADE_TEXTS
ConnectCableText:
text_far _ConnectCableText
diff --git a/engine/events/prize_menu.asm b/engine/events/prize_menu.asm
index 4b2121f5..8701e351 100644
--- a/engine/events/prize_menu.asm
+++ b/engine/events/prize_menu.asm
@@ -125,18 +125,15 @@ GetPrizeMenuId:
; put prices on the right side of the textbox
ld de, wPrize1Price
hlcoord 13, 5
-; reg. c:
-; [low nybble] number of bytes
-; [bits 765 = %100] space-padding (not zero-padding)
- ld c, (1 << 7) | 2
+ ld c, 2 | LEADING_ZEROES
call PrintBCDNumber
ld de, wPrize2Price
hlcoord 13, 7
- ld c, (1 << 7) | 2
+ ld c, 2 | LEADING_ZEROES
call PrintBCDNumber
ld de, wPrize3Price
hlcoord 13, 9
- ld c, (1 << 7) | 2
+ ld c, 2 | LEADING_ZEROES
jp PrintBCDNumber
NoThanksText:
@@ -157,7 +154,7 @@ PrintPrizePrice:
call PlaceString
hlcoord 13, 1
ld de, wPlayerCoins
- ld c, %10000010
+ ld c, 2 | LEADING_ZEROES
call PrintBCDNumber
ret
diff --git a/engine/gfx/mon_icons.asm b/engine/gfx/mon_icons.asm
index c82e00c0..4cc11284 100644
--- a/engine/gfx/mon_icons.asm
+++ b/engine/gfx/mon_icons.asm
@@ -295,13 +295,13 @@ INCLUDE "data/pokemon/menu_icons.asm"
DEF INC_FRAME_1 EQUS "0, $20"
DEF INC_FRAME_2 EQUS "$20, $20"
-BugIconFrame1: INCBIN "gfx/icons/bug.2bpp", INC_FRAME_1
-PlantIconFrame1: INCBIN "gfx/icons/plant.2bpp", INC_FRAME_1
-BugIconFrame2: INCBIN "gfx/icons/bug.2bpp", INC_FRAME_2
-PlantIconFrame2: INCBIN "gfx/icons/plant.2bpp", INC_FRAME_2
-SnakeIconFrame1: INCBIN "gfx/icons/snake.2bpp", INC_FRAME_1
+BugIconFrame1: INCBIN "gfx/icons/bug.2bpp", INC_FRAME_1
+PlantIconFrame1: INCBIN "gfx/icons/plant.2bpp", INC_FRAME_1
+BugIconFrame2: INCBIN "gfx/icons/bug.2bpp", INC_FRAME_2
+PlantIconFrame2: INCBIN "gfx/icons/plant.2bpp", INC_FRAME_2
+SnakeIconFrame1: INCBIN "gfx/icons/snake.2bpp", INC_FRAME_1
QuadrupedIconFrame1: INCBIN "gfx/icons/quadruped.2bpp", INC_FRAME_1
-SnakeIconFrame2: INCBIN "gfx/icons/snake.2bpp", INC_FRAME_2
+SnakeIconFrame2: INCBIN "gfx/icons/snake.2bpp", INC_FRAME_2
QuadrupedIconFrame2: INCBIN "gfx/icons/quadruped.2bpp", INC_FRAME_2
TradeBubbleIconGFX: INCBIN "gfx/trade/bubble.2bpp"
diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm
index de95b0c7..9802eb50 100644
--- a/engine/items/item_effects.asm
+++ b/engine/items/item_effects.asm
@@ -2301,7 +2301,7 @@ ItemUsePPRestore:
cp MAX_ETHER
jr z, .fullyRestorePP
ld a, [hl] ; move PP
- and %00111111 ; lower 6 bit bits store current PP
+ and PP_MASK
cp b ; does current PP equal max PP?
ret z ; if so, return
add 10 ; increase current PP by 10
@@ -2314,7 +2314,7 @@ ItemUsePPRestore:
ld b, a
.storeNewAmount
ld a, [hl] ; move PP
- and %11000000 ; PP Up counter bits
+ and PP_UP_MASK
add b
ld [hl], a
ret
@@ -2684,7 +2684,7 @@ RestoreBonusPP:
jr nz, .nextMove
.skipMenuItemIDCheck
ld a, [hl]
- and %11000000 ; have any PP Ups been used?
+ and PP_UP_MASK
call nz, AddBonusPP ; if so, add bonus PP
.nextMove
inc hl
@@ -2791,7 +2791,7 @@ GetMaxPP:
.addPPOffset
add hl, bc
ld a, [hl] ; a = current PP
- and %11000000 ; get PP Up count
+ and PP_UP_MASK
pop bc
or b ; place normal max PP in 6 lower bits of a
ASSERT wMoveData + MOVE_PP + 1 == wPPUpCountAndMaxPP
@@ -2803,7 +2803,7 @@ GetMaxPP:
ld [wUsingPPUp], a
call AddBonusPP ; add bonus PP from PP Ups
ld a, [hl]
- and %00111111 ; mask out the PP Up count
+ and PP_MASK
ld [wMaxPP], a ; store max PP
ret
diff --git a/engine/menus/start_sub_menus.asm b/engine/menus/start_sub_menus.asm
index d2b027f5..96a7da16 100644
--- a/engine/menus/start_sub_menus.asm
+++ b/engine/menus/start_sub_menus.asm
@@ -570,7 +570,7 @@ DrawTrainerInfo:
call PlaceString
hlcoord 8, 4
ld de, wPlayerMoney
- ld c, $e3
+ ld c, 3 | LEADING_ZEROES | LEFT_ALIGN | MONEY_SIGN
call PrintBCDNumber
hlcoord 9, 6
ld de, wPlayTimeHours ; hours
diff --git a/engine/menus/text_box.asm b/engine/menus/text_box.asm
index 43428f67..fe792274 100644
--- a/engine/menus/text_box.asm
+++ b/engine/menus/text_box.asm
@@ -138,7 +138,7 @@ DisplayMoneyBox:
call ClearScreenArea
hlcoord 12, 1
ld de, wPlayerMoney
- ld c, $a3
+ ld c, 3 | LEADING_ZEROES | MONEY_SIGN
call PrintBCDNumber
ld hl, wStatusFlags5
res BIT_NO_TEXT_DELAY, [hl]
diff --git a/engine/movie/hall_of_fame.asm b/engine/movie/hall_of_fame.asm
index 670c8261..21848bb9 100644
--- a/engine/movie/hall_of_fame.asm
+++ b/engine/movie/hall_of_fame.asm
@@ -252,7 +252,7 @@ HoFDisplayPlayerStats:
call PlaceString
hlcoord 4, 10
ld de, wPlayerMoney
- ld c, $a3
+ ld c, 3 | LEADING_ZEROES | MONEY_SIGN
call PrintBCDNumber
ld hl, DexSeenOwnedText
call HoFPrintTextAndDelay
diff --git a/engine/pokemon/status_screen.asm b/engine/pokemon/status_screen.asm
index d88ef8c1..1c9b2fc2 100644
--- a/engine/pokemon/status_screen.asm
+++ b/engine/pokemon/status_screen.asm
@@ -378,7 +378,7 @@ StatusScreen2:
ld bc, wPartyMon1PP - wPartyMon1Moves - 1
add hl, bc
ld a, [hl]
- and $3f
+ and PP_MASK
ld [wStatusScreenCurrentPP], a
ld h, d
ld l, e
diff --git a/engine/slots/slot_machine.asm b/engine/slots/slot_machine.asm
index 9ad5aa6d..835ba1cf 100644
--- a/engine/slots/slot_machine.asm
+++ b/engine/slots/slot_machine.asm
@@ -648,7 +648,7 @@ SlotMachine_SubtractBetFromPlayerCoins:
SlotMachine_PrintCreditCoins:
hlcoord 5, 1
ld de, wPlayerCoins
- ld c, $2
+ ld c, 2
jp PrintBCDNumber
SlotMachine_PrintPayoutCoins:
diff --git a/home/list_menu.asm b/home/list_menu.asm
index 49ef07ea..0742521f 100644
--- a/home/list_menu.asm
+++ b/home/list_menu.asm
@@ -293,7 +293,7 @@ DisplayChooseQuantityMenu::
ld de, SpacesBetweenQuantityAndPriceText
call PlaceString
ld de, hMoney ; total price
- ld c, $a3
+ ld c, 3 | LEADING_ZEROES | MONEY_SIGN
call PrintBCDNumber
hlcoord 9, 10
.printQuantity
@@ -417,7 +417,7 @@ PrintListMenuEntries::
pop hl
ld bc, SCREEN_WIDTH + 5 ; 1 row down and 5 columns right
add hl, bc
- ld c, $a3 ; no leading zeroes, right-aligned, print currency symbol, 3 bytes
+ ld c, 3 | LEADING_ZEROES | MONEY_SIGN
call PrintBCDNumber
.skipPrintingItemPrice
ld a, [wListMenuID]
diff --git a/macros/asserts.asm b/macros/asserts.asm
index 7fb7f96b..402d97dd 100644
--- a/macros/asserts.asm
+++ b/macros/asserts.asm
@@ -44,7 +44,7 @@ MACRO list_start
ENDM
MACRO li
- ASSERT !STRIN(\1, "@"), STRCAT("String terminator \"@\" in list entry: ", \1)
+ ASSERT STRFIND(\1, "@") == -1, STRCAT("String terminator \"@\" in list entry: ", \1)
db \1, "@"
DEF list_index += 1
ENDM
diff --git a/macros/coords.asm b/macros/coords.asm
index 81388895..984073ed 100644
--- a/macros/coords.asm
+++ b/macros/coords.asm
@@ -11,9 +11,17 @@ MACRO validate_coords
ENDC
ENDM
-DEF hlcoord EQUS "coord hl,"
-DEF bccoord EQUS "coord bc,"
-DEF decoord EQUS "coord de,"
+MACRO hlcoord
+ coord hl, \#
+ENDM
+
+MACRO bccoord
+ coord bc, \#
+ENDM
+
+MACRO decoord
+ coord de, \#
+ENDM
MACRO coord
; register, x, y[, origin]
@@ -25,9 +33,17 @@ MACRO coord
ENDC
ENDM
-DEF hlbgcoord EQUS "bgcoord hl,"
-DEF bcbgcoord EQUS "bgcoord bc,"
-DEF debgcoord EQUS "bgcoord de,"
+MACRO hlbgcoord
+ bgcoord hl, \#
+ENDM
+
+MACRO bcbgcoord
+ bgcoord bc, \#
+ENDM
+
+MACRO debgcoord
+ bgcoord de, \#
+ENDM
MACRO bgcoord
; register, x, y[, origin]
@@ -39,9 +55,17 @@ MACRO bgcoord
ENDC
ENDM
-DEF hlowcoord EQUS "owcoord hl,"
-DEF bcowcoord EQUS "owcoord bc,"
-DEF deowcoord EQUS "owcoord de,"
+MACRO hlowcoord
+ owcoord hl, \#
+ENDM
+
+MACRO bcowcoord
+ owcoord bc, \#
+ENDM
+
+MACRO deowcoord
+ owcoord de, \#
+ENDM
MACRO owcoord
; register, x, y, map width
diff --git a/macros/scripts/maps.asm b/macros/scripts/maps.asm
index b5799e64..2837d0c0 100644
--- a/macros/scripts/maps.asm
+++ b/macros/scripts/maps.asm
@@ -225,8 +225,14 @@ MACRO connection
dw wOverworldMap + _win
ENDM
-DEF def_script_pointers EQUS "const_def"
+MACRO def_script_pointers
+ const_def
+ENDM
-DEF def_text_pointers EQUS "const_def 1"
+MACRO def_text_pointers
+ const_def 1
+ENDM
-DEF object_const_def EQUS "const_def 1"
+MACRO object_const_def
+ const_def 1
+ENDM
diff --git a/macros/scripts/text.asm b/macros/scripts/text.asm
index aad42452..7de333a3 100644
--- a/macros/scripts/text.asm
+++ b/macros/scripts/text.asm
@@ -1,13 +1,38 @@
-DEF text EQUS "db TX_START," ; Start writing text.
-DEF next EQUS "db \"<NEXT>\"," ; Move a line down.
-DEF line EQUS "db \"<LINE>\"," ; Start writing at the bottom line.
-DEF para EQUS "db \"<PARA>\"," ; Start a new paragraph.
-DEF cont EQUS "db \"<CONT>\"," ; Scroll to the next line.
-DEF done EQUS "db \"<DONE>\"" ; End a text box.
-DEF prompt EQUS "db \"<PROMPT>\"" ; Prompt the player to end a text box (initiating some other event).
+MACRO text
+ db TX_START, \# ; Start writing text
+ENDM
+
+MACRO next
+ db "<NEXT>", \# ; Move a line down
+ENDM
+
+MACRO line
+ db "<LINE>", \# ; Start writing at the bottom line
+ENDM
+
+MACRO para
+ db "<PARA>", \# ; Start a new paragraph
+ENDM
+
+MACRO cont
+ db "<CONT>", \# ; Scroll to the next line
+ENDM
+
+MACRO done
+ db "<DONE>" ; End a text box
+ENDM
+
+MACRO prompt
+ db "<PROMPT>" ; Prompt the player to end a text box (initiating some other event)
+ENDM
+
+MACRO page
+ db "<PAGE>", \# ; Start a new Pokédex page
+ENDM
-DEF page EQUS "db \"<PAGE>\"," ; Start a new Pokédex page.
-DEF dex EQUS "db \"<DEXEND>\", \"@\"" ; End a Pokédex entry.
+MACRO dex
+ db "<DEXEND>@" ; End a Pokédex entry
+ENDM
; TextCommandJumpTable indexes (see home/text.asm)
diff --git a/rgbdscheck.asm b/rgbdscheck.asm
index d6789e64..0ff10b53 100644
--- a/rgbdscheck.asm
+++ b/rgbdscheck.asm
@@ -1,6 +1,6 @@
IF !DEF(__RGBDS_MAJOR__) || !DEF(__RGBDS_MINOR__) || !DEF(__RGBDS_PATCH__)
- fail "pokeyellow requires rgbds v0.9.0 or newer."
+ fail "pokeyellow requires rgbds v0.9.2 or newer."
ENDC
-IF __RGBDS_MAJOR__ == 0 && __RGBDS_MINOR__ < 9
- fail "pokeyellow requires rgbds v0.9.0 or newer."
+IF __RGBDS_MAJOR__ == 0 && (__RGBDS_MINOR__ < 9 || (__RGBDS_MINOR__ == 9 && __RGBDS_PATCH__ < 2))
+ fail "pokeyellow requires rgbds v0.9.2 or newer."
ENDC
diff --git a/scripts/GameCorner.asm b/scripts/GameCorner.asm
index 94442a60..e242381f 100644
--- a/scripts/GameCorner.asm
+++ b/scripts/GameCorner.asm
@@ -513,7 +513,7 @@ GameCornerDrawCoinBox:
call PlaceString
hlcoord 15, 5
ld de, wPlayerCoins
- ld c, $82
+ ld c, 2 | LEADING_ZEROES
call PrintBCDNumber
ld hl, wStatusFlags5
res BIT_NO_TEXT_DELAY, [hl]
diff --git a/tools/make_patch.c b/tools/make_patch.c
index d96bf216..82b018fd 100644
--- a/tools/make_patch.c
+++ b/tools/make_patch.c
@@ -183,6 +183,16 @@ int parse_arg_value(const char *arg, bool absolute, const struct Symbol *symbols
return parse_number(arg, 0);
}
+ // Symbols may take the low or high part
+ enum { SYM_WHOLE, SYM_LOW, SYM_HIGH } part = SYM_WHOLE;
+ if (arg[0] == '<') {
+ part = SYM_LOW;
+ arg++;
+ } else if (arg[0] == '>') {
+ part = SYM_HIGH;
+ arg++;
+ }
+
// Symbols evaluate to their offset or address, plus an optional offset mod
int offset_mod = 0;
char *plus = strchr(arg, '+');
@@ -190,9 +200,13 @@ int parse_arg_value(const char *arg, bool absolute, const struct Symbol *symbols
offset_mod = parse_number(plus, 0);
*plus = '\0';
}
+
+ // Symbols evaluate to their offset or address
const char *sym_name = !strcmp(arg, "@") ? patch_name : arg; // "@" is the current patch label
const struct Symbol *symbol = symbol_find(symbols, sym_name);
- return (absolute ? symbol->offset : symbol->address) + offset_mod;
+
+ int value = (absolute ? symbol->offset : symbol->address) + offset_mod;
+ return part == SYM_LOW ? value & 0xff : part == SYM_HIGH ? value >> 8 : value;
}
void interpret_command(char *command, const struct Symbol *current_hook, const struct Symbol *symbols, struct Buffer *patches, FILE *restrict new_rom, FILE *restrict orig_rom, FILE *restrict output) {
@@ -413,7 +427,7 @@ struct Buffer *process_template(const char *template_filename, const char *patch
int compare_patch(const void *patch1, const void *patch2) {
unsigned int offset1 = ((const struct Patch *)patch1)->offset;
unsigned int offset2 = ((const struct Patch *)patch2)->offset;
- return offset1 > offset2 ? 1 : offset1 < offset2 ? -1 : 0;
+ return (offset1 > offset2) - (offset1 < offset2);
}
bool verify_completeness(FILE *restrict orig_rom, FILE *restrict new_rom, struct Buffer *patches) {