diff options
| -rw-r--r-- | .github/workflows/main.yml | 2 | ||||
| -rw-r--r-- | INSTALL.md | 24 | ||||
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | constants/pokemon_data_constants.asm | 4 | ||||
| -rw-r--r-- | constants/script_constants.asm | 1 | ||||
| -rw-r--r-- | constants/text_constants.asm | 2 | ||||
| -rw-r--r-- | data/events/trades.asm | 7 | ||||
| -rw-r--r-- | engine/battle/core.asm | 16 | ||||
| -rw-r--r-- | engine/battle/effects.asm | 2 | ||||
| -rw-r--r-- | engine/events/heal_party.asm | 2 | ||||
| -rw-r--r-- | engine/events/in_game_trades.asm | 29 | ||||
| -rw-r--r-- | engine/events/prize_menu.asm | 11 | ||||
| -rw-r--r-- | engine/gfx/mon_icons.asm | 12 | ||||
| -rw-r--r-- | engine/items/item_effects.asm | 10 | ||||
| -rw-r--r-- | engine/menus/start_sub_menus.asm | 2 | ||||
| -rw-r--r-- | engine/menus/text_box.asm | 2 | ||||
| -rw-r--r-- | engine/movie/hall_of_fame.asm | 2 | ||||
| -rw-r--r-- | engine/pokemon/status_screen.asm | 2 | ||||
| -rw-r--r-- | engine/slots/slot_machine.asm | 2 | ||||
| -rw-r--r-- | home/list_menu.asm | 4 | ||||
| -rw-r--r-- | macros/asserts.asm | 2 | ||||
| -rw-r--r-- | macros/coords.asm | 42 | ||||
| -rw-r--r-- | macros/scripts/maps.asm | 12 | ||||
| -rw-r--r-- | macros/scripts/text.asm | 43 | ||||
| -rw-r--r-- | rgbdscheck.asm | 6 | ||||
| -rw-r--r-- | scripts/GameCorner.asm | 2 | ||||
| -rw-r--r-- | tools/make_patch.c | 18 |
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 @@ -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/ ``` @@ -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) { |
