From 053afc46349952688c0ce2116cc76f8d4733895e Mon Sep 17 00:00:00 2001 From: Rangi Date: Fri, 3 Jul 2020 22:57:43 -0400 Subject: Move more code from home.asm to home/ --- home/list_menu.asm | 526 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 526 insertions(+) create mode 100644 home/list_menu.asm (limited to 'home/list_menu.asm') diff --git a/home/list_menu.asm b/home/list_menu.asm new file mode 100644 index 00000000..68335ed5 --- /dev/null +++ b/home/list_menu.asm @@ -0,0 +1,526 @@ +; INPUT: +; [wListMenuID] = list menu ID +; [wListPointer] = address of the list (2 bytes) +DisplayListMenuID:: + xor a + ld [hAutoBGTransferEnabled], a ; disable auto-transfer + ld a, 1 + ld [hJoy7], a ; joypad state update flag + ld a, [wBattleType] + and a ; is it the Old Man battle? + jr nz, .specialBattleType + ld a, $01 ; hardcoded bank + jr .bankswitch +.specialBattleType ; Old Man battle + ld a, BANK(DisplayBattleMenu) +.bankswitch + call BankswitchHome + ld hl, wd730 + set 6, [hl] ; turn off letter printing delay + xor a + ld [wMenuItemToSwap], a ; 0 means no item is currently being swapped + ld [wListCount], a + ld a, [wListPointer] + ld l, a + ld a, [wListPointer + 1] + ld h, a ; hl = address of the list + ld a, [hl] ; the first byte is the number of entries in the list + ld [wListCount], a + ld a, LIST_MENU_BOX + ld [wTextBoxID], a + call DisplayTextBoxID ; draw the menu text box + call UpdateSprites ; disable sprites behind the text box +; the code up to .skipMovingSprites appears to be useless + coord hl, 4, 2 ; coordinates of upper left corner of menu text box + lb de, 9, 14 ; height and width of menu text box + ld a, [wListMenuID] + and a ; is it a PC pokemon list? + jr nz, .skipMovingSprites + call UpdateSprites +.skipMovingSprites + ld a, 1 ; max menu item ID is 1 if the list has less than 2 entries + ld [wMenuWatchMovingOutOfBounds], a + ld a, [wListCount] + cp 2 ; does the list have less than 2 entries? + jr c, .setMenuVariables + ld a, 2 ; max menu item ID is 2 if the list has at least 2 entries +.setMenuVariables + ld [wMaxMenuItem], a + ld a, 4 + ld [wTopMenuItemY], a + ld a, 5 + ld [wTopMenuItemX], a + ld a, A_BUTTON | B_BUTTON | SELECT + ld [wMenuWatchedKeys], a + ld c, 10 + call DelayFrames + +DisplayListMenuIDLoop:: + xor a + ld [hAutoBGTransferEnabled], a ; disable transfer + call PrintListMenuEntries + ld a, 1 + ld [hAutoBGTransferEnabled], a ; enable transfer + call Delay3 + ld a, [wBattleType] + and a ; is it the Old Man battle? + jr z, .notOldManBattle +.oldManBattle + ld a, "▶" + Coorda 5, 4 ; place menu cursor in front of first menu entry + ld c, 80 + call DelayFrames + xor a + ld [wCurrentMenuItem], a + coord hl, 5, 4 + ld a, l + ld [wMenuCursorLocation], a + ld a, h + ld [wMenuCursorLocation + 1], a + jr .buttonAPressed +.notOldManBattle + call LoadGBPal + call HandleMenuInput + push af + call PlaceMenuCursor + pop af + bit 0, a ; was the A button pressed? + jp z, .checkOtherKeys +.buttonAPressed + ld a, [wCurrentMenuItem] + call PlaceUnfilledArrowMenuCursor + +; pointless because both values are overwritten before they are read + ld a, $01 + ld [wMenuExitMethod], a + ld [wChosenMenuItem], a + + xor a + ld [wMenuWatchMovingOutOfBounds], a + ld a, [wCurrentMenuItem] + ld c, a + ld a, [wListScrollOffset] + add c + ld c, a + ld a, [wListCount] + and a ; is the list empty? + jp z, ExitListMenu ; if so, exit the menu + dec a + cp c ; did the player select Cancel? + jp c, ExitListMenu ; if so, exit the menu + ld a, c + ld [wWhichPokemon], a + ld a, [wListMenuID] + cp ITEMLISTMENU + jr nz, .skipMultiplying +; if it's an item menu + sla c ; item entries are 2 bytes long, so multiply by 2 +.skipMultiplying + ld a, [wListPointer] + ld l, a + ld a, [wListPointer + 1] + ld h, a + inc hl ; hl = beginning of list entries + ld b, 0 + add hl, bc + ld a, [hl] + ld [wcf91], a + ld a, [wListMenuID] + and a ; is it a PC pokemon list? + jr z, .pokemonList + push hl + call GetItemPrice + pop hl + ld a, [wListMenuID] + cp ITEMLISTMENU + jr nz, .skipGettingQuantity +; if it's an item menu + inc hl + ld a, [hl] ; a = item quantity + ld [wMaxItemQuantity], a +.skipGettingQuantity + ld a, [wcf91] + ld [wd0b5], a + ld a, BANK(ItemNames) + ld [wPredefBank], a + call GetName + jr .storeChosenEntry +.pokemonList + ld hl, wPartyCount + ld a, [wListPointer] + cp l ; is it a list of party pokemon or box pokemon? + ld hl, wPartyMonNicks + jr z, .getPokemonName + ld hl, wBoxMonNicks ; box pokemon names +.getPokemonName + ld a, [wWhichPokemon] + call GetPartyMonName +.storeChosenEntry ; store the menu entry that the player chose and return + ld de, wcd6d + call CopyStringToCF4B ; copy name to wcf4b + ld a, CHOSE_MENU_ITEM + ld [wMenuExitMethod], a + ld a, [wCurrentMenuItem] + ld [wChosenMenuItem], a + xor a + ld [hJoy7], a ; joypad state update flag + ld hl, wd730 + res 6, [hl] ; turn on letter printing delay + jp BankswitchBack +.checkOtherKeys ; check B, SELECT, Up, and Down keys + bit 1, a ; was the B button pressed? + jp nz, ExitListMenu ; if so, exit the menu + bit 2, a ; was the select button pressed? + jp nz, HandleItemListSwapping ; if so, allow the player to swap menu entries + ld b, a + bit 7, b ; was Down pressed? + ld hl, wListScrollOffset + jr z, .upPressed +.downPressed + ld a, [hl] + add 3 + ld b, a + ld a, [wListCount] + cp b ; will going down scroll past the Cancel button? + jp c, DisplayListMenuIDLoop + inc [hl] ; if not, go down + jp DisplayListMenuIDLoop +.upPressed + ld a, [hl] + and a + jp z, DisplayListMenuIDLoop + dec [hl] + jp DisplayListMenuIDLoop + +DisplayChooseQuantityMenu:: +; text box dimensions/coordinates for just quantity + coord hl, 15, 9 + ld b, 1 ; height + ld c, 3 ; width + ld a, [wListMenuID] + cp PRICEDITEMLISTMENU + jr nz, .drawTextBox +; text box dimensions/coordinates for quantity and price + coord hl, 7, 9 + ld b, 1 ; height + ld c, 11 ; width +.drawTextBox + call TextBoxBorder + coord hl, 16, 10 + ld a, [wListMenuID] + cp PRICEDITEMLISTMENU + jr nz, .printInitialQuantity + coord hl, 8, 10 +.printInitialQuantity + ld de, InitialQuantityText + call PlaceString + xor a + ld [wItemQuantity], a ; initialize current quantity to 0 + jp .incrementQuantity +.waitForKeyPressLoop + call JoypadLowSensitivity + ld a, [hJoyPressed] ; newly pressed buttons + bit 0, a ; was the A button pressed? + jp nz, .buttonAPressed + bit 1, a ; was the B button pressed? + jp nz, .buttonBPressed + bit 6, a ; was Up pressed? + jr nz, .incrementQuantity + bit 7, a ; was Down pressed? + jr nz, .decrementQuantity + jr .waitForKeyPressLoop +.incrementQuantity + ld a, [wMaxItemQuantity] + inc a + ld b, a + ld hl, wItemQuantity ; current quantity + inc [hl] + ld a, [hl] + cp b + jr nz, .handleNewQuantity +; wrap to 1 if the player goes above the max quantity + ld a, 1 + ld [hl], a + jr .handleNewQuantity +.decrementQuantity + ld hl, wItemQuantity ; current quantity + dec [hl] + jr nz, .handleNewQuantity +; wrap to the max quantity if the player goes below 1 + ld a, [wMaxItemQuantity] + ld [hl], a +.handleNewQuantity + coord hl, 17, 10 + ld a, [wListMenuID] + cp PRICEDITEMLISTMENU + jr nz, .printQuantity +.printPrice + ld c, $03 + ld a, [wItemQuantity] + ld b, a + ld hl, hMoney ; total price +; initialize total price to 0 + xor a + ld [hli], a + ld [hli], a + ld [hl], a +.addLoop ; loop to multiply the individual price by the quantity to get the total price + ld de, hMoney + 2 + ld hl, hItemPrice + 2 + push bc + predef AddBCDPredef ; add the individual price to the current sum + pop bc + dec b + jr nz, .addLoop + ld a, [hHalveItemPrices] + and a ; should the price be halved (for selling items)? + jr z, .skipHalvingPrice + xor a + ld [hDivideBCDDivisor], a + ld [hDivideBCDDivisor + 1], a + ld a, $02 + ld [hDivideBCDDivisor + 2], a + predef DivideBCDPredef3 ; halves the price +; store the halved price + ld a, [hDivideBCDQuotient] + ld [hMoney], a + ld a, [hDivideBCDQuotient + 1] + ld [hMoney + 1], a + ld a, [hDivideBCDQuotient + 2] + ld [hMoney + 2], a +.skipHalvingPrice + coord hl, 12, 10 + ld de, SpacesBetweenQuantityAndPriceText + call PlaceString + ld de, hMoney ; total price + ld c, $a3 + call PrintBCDNumber + coord hl, 9, 10 +.printQuantity + ld de, wItemQuantity ; current quantity + lb bc, LEADING_ZEROES | 1, 2 ; 1 byte, 2 digits + call PrintNumber + jp .waitForKeyPressLoop +.buttonAPressed ; the player chose to make the transaction + xor a + ld [wMenuItemToSwap], a ; 0 means no item is currently being swapped + ret +.buttonBPressed ; the player chose to cancel the transaction + xor a + ld [wMenuItemToSwap], a ; 0 means no item is currently being swapped + ld a, $ff + ret + +InitialQuantityText:: + db "×01@" + +SpacesBetweenQuantityAndPriceText:: + db " @" + +ExitListMenu:: + ld a, [wCurrentMenuItem] + ld [wChosenMenuItem], a + ld a, CANCELLED_MENU + ld [wMenuExitMethod], a + ld [wMenuWatchMovingOutOfBounds], a + xor a + ld [hJoy7], a + ld hl, wd730 + res 6, [hl] + call BankswitchBack + xor a + ld [wMenuItemToSwap], a ; 0 means no item is currently being swapped + scf + ret + +PrintListMenuEntries:: + coord hl, 5, 3 + ld b, 9 + ld c, 14 + call ClearScreenArea + ld a, [wListPointer] + ld e, a + ld a, [wListPointer + 1] + ld d, a + inc de ; de = beginning of list entries + ld a, [wListScrollOffset] + ld c, a + ld a, [wListMenuID] + cp ITEMLISTMENU + ld a, c + jr nz, .skipMultiplying +; if it's an item menu +; item entries are 2 bytes long, so multiply by 2 + sla a + sla c +.skipMultiplying + add e + ld e, a + jr nc, .noCarry + inc d +.noCarry + coord hl, 6, 4 ; coordinates of first list entry name + ld b, 4 ; print 4 names +.loop + ld a, b + ld [wWhichPokemon], a + ld a, [de] + ld [wd11e], a + cp $ff + jp z, .printCancelMenuItem + push bc + push de + push hl + push hl + push de + ld a, [wListMenuID] + and a + jr z, .pokemonPCMenu + cp MOVESLISTMENU + jr z, .movesMenu +.itemMenu + call GetItemName + jr .placeNameString +.pokemonPCMenu + push hl + ld hl, wPartyCount + ld a, [wListPointer] + cp l ; is it a list of party pokemon or box pokemon? + ld hl, wPartyMonNicks + jr z, .getPokemonName + ld hl, wBoxMonNicks ; box pokemon names +.getPokemonName + ld a, [wWhichPokemon] + ld b, a + ld a, 4 + sub b + ld b, a + ld a, [wListScrollOffset] + add b + call GetPartyMonName + pop hl + jr .placeNameString +.movesMenu + call GetMoveName +.placeNameString + call PlaceString + pop de + pop hl + ld a, [wPrintItemPrices] + and a ; should prices be printed? + jr z, .skipPrintingItemPrice +.printItemPrice + push hl + ld a, [de] + ld de, ItemPrices + ld [wcf91], a + call GetItemPrice ; get price + 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 + call PrintBCDNumber +.skipPrintingItemPrice + ld a, [wListMenuID] + and a + jr nz, .skipPrintingPokemonLevel +.printPokemonLevel + ld a, [wd11e] + push af + push hl + ld hl, wPartyCount + ld a, [wListPointer] + cp l ; is it a list of party pokemon or box pokemon? + ld a, PLAYER_PARTY_DATA + jr z, .next + ld a, BOX_DATA +.next + ld [wMonDataLocation], a + ld hl, wWhichPokemon + ld a, [hl] + ld b, a + ld a, $04 + sub b + ld b, a + ld a, [wListScrollOffset] + add b + ld [hl], a + call LoadMonData + ld a, [wMonDataLocation] + and a ; is it a list of party pokemon or box pokemon? + jr z, .skipCopyingLevel +.copyLevel + ld a, [wLoadedMonBoxLevel] + ld [wLoadedMonLevel], a +.skipCopyingLevel + pop hl + ld bc, $001c + add hl, bc + call PrintLevel + pop af + ld [wd11e], a +.skipPrintingPokemonLevel + pop hl + pop de + inc de + ld a, [wListMenuID] + cp ITEMLISTMENU + jr nz, .nextListEntry +.printItemQuantity + ld a, [wd11e] + ld [wcf91], a + call IsKeyItem ; check if item is unsellable + ld a, [wIsKeyItem] + and a ; is the item unsellable? + jr nz, .skipPrintingItemQuantity ; if so, don't print the quantity + push hl + ld bc, SCREEN_WIDTH + 8 ; 1 row down and 8 columns right + add hl, bc + ld a, "×" + ld [hli], a + ld a, [wd11e] + push af + ld a, [de] + ld [wMaxItemQuantity], a + push de + ld de, wd11e + ld [de], a + lb bc, 1, 2 + call PrintNumber + pop de + pop af + ld [wd11e], a + pop hl +.skipPrintingItemQuantity + inc de + pop bc + inc c + push bc + inc c + ld a, [wMenuItemToSwap] ; ID of item chosen for swapping (counts from 1) + and a ; is an item being swapped? + jr z, .nextListEntry + sla a + cp c ; is it this item? + jr nz, .nextListEntry + dec hl + ld a, $ec ; unfilled right arrow menu cursor to indicate an item being swapped + ld [hli], a +.nextListEntry + ld bc, 2 * SCREEN_WIDTH ; 2 rows + add hl, bc + pop bc + inc c + dec b + jp nz, .loop + ld bc, -8 + add hl, bc + ld a, "▼" + ld [hl], a + ret +.printCancelMenuItem + ld de, ListMenuCancelText + jp PlaceString + +ListMenuCancelText:: + db "CANCEL@" -- cgit v1.3.1-sl0p From e4e0af4d6713161d46cc0a1d580645ca40d6fa81 Mon Sep 17 00:00:00 2001 From: Rangi Date: Sat, 4 Jul 2020 01:00:45 -0400 Subject: Remove remaining raw $xxxx values, and replace "+ -1" with "- 1" (supported by rgbds 0.4.0) --- constants/hardware_constants.asm | 13 +++++ constants/move_constants.asm | 2 +- constants/pokedex_constants.asm | 2 +- constants/pokemon_constants.asm | 2 +- data/moves/effects_pointers.asm | 14 +++--- engine/battle/animations.asm | 6 +-- engine/battle/core.asm | 12 ++--- engine/battle/trainer_ai.asm | 2 +- engine/events/diploma.asm | 2 +- engine/events/prize_menu.asm | 4 +- engine/menus/display_text_id_init.asm | 4 +- engine/menus/save.asm | 4 +- engine/menus/start_sub_menus.asm | 10 ++-- engine/movie/title.asm | 2 +- engine/overworld/map_sprites.asm | 3 +- engine/overworld/wild_mons.asm | 6 +-- engine/pokemon/status_screen.asm | 4 +- engine/slots/slot_machine.asm | 2 +- home/init.asm | 12 ++--- home/list_menu.asm | 2 +- home/names2.asm | 2 +- home/overworld.asm | 12 ++--- home/pics.asm | 4 +- home/predef_text.asm | 2 +- macros/scripts/events.asm | 12 ++--- macros/wram.asm | 92 ++++++++++++++++++++++++++++++++++ scripts/OaksLab.asm | 2 +- scripts/VermilionDock.asm | 2 +- wram.asm | 94 ++--------------------------------- 29 files changed, 172 insertions(+), 158 deletions(-) create mode 100644 macros/wram.asm (limited to 'home/list_menu.asm') diff --git a/constants/hardware_constants.asm b/constants/hardware_constants.asm index 59ec6170..993a02f5 100644 --- a/constants/hardware_constants.asm +++ b/constants/hardware_constants.asm @@ -2,6 +2,19 @@ GBC EQU $11 +; memory map +VRAM_Begin EQU $8000 +VRAM_End EQU $a000 +SRAM_Begin EQU $a000 +SRAM_End EQU $c000 +WRAM0_Begin EQU $c000 +WRAM0_End EQU $d000 +WRAM1_Begin EQU $d000 +WRAM1_End EQU $e000 +; hardware registers $ff00-$ff80 (see below) +HRAM_Begin EQU $ff80 +HRAM_End EQU $ffff + ; MBC1 MBC1SRamEnable EQU $0000 MBC1RomBank EQU $2000 diff --git a/constants/move_constants.asm b/constants/move_constants.asm index 850662de..5dd06a41 100644 --- a/constants/move_constants.asm +++ b/constants/move_constants.asm @@ -165,7 +165,7 @@ const SLASH ; a3 const SUBSTITUTE ; a4 -NUM_ATTACKS EQU const_value + -1 +NUM_ATTACKS EQU const_value - 1 const STRUGGLE ; a5 diff --git a/constants/pokedex_constants.asm b/constants/pokedex_constants.asm index c8605852..e462586e 100644 --- a/constants/pokedex_constants.asm +++ b/constants/pokedex_constants.asm @@ -151,4 +151,4 @@ const DEX_MEWTWO ; 150 const DEX_MEW ; 151 -NUM_POKEMON EQU const_value + -1 +NUM_POKEMON EQU const_value - 1 diff --git a/constants/pokemon_constants.asm b/constants/pokemon_constants.asm index 5484a65d..7abdd4d3 100644 --- a/constants/pokemon_constants.asm +++ b/constants/pokemon_constants.asm @@ -191,4 +191,4 @@ const WEEPINBELL ; $BD const VICTREEBEL ; $BE -NUM_POKEMON_INDEXES EQU const_value + -1 +NUM_POKEMON_INDEXES EQU const_value - 1 diff --git a/data/moves/effects_pointers.asm b/data/moves/effects_pointers.asm index 0d36e887..02f6e5c6 100644 --- a/data/moves/effects_pointers.asm +++ b/data/moves/effects_pointers.asm @@ -7,7 +7,7 @@ MoveEffectPointerTable: dw FreezeBurnParalyzeEffect ; PARALYZE_SIDE_EFFECT1 dw ExplodeEffect ; EXPLODE_EFFECT dw DrainHPEffect ; DREAM_EATER_EFFECT - dw $0000 ; MIRROR_MOVE_EFFECT + dw NULL ; MIRROR_MOVE_EFFECT dw StatModifierUpEffect ; ATTACK_UP1_EFFECT dw StatModifierUpEffect ; DEFENSE_UP1_EFFECT dw StatModifierUpEffect ; SPEED_UP1_EFFECT @@ -15,7 +15,7 @@ MoveEffectPointerTable: dw StatModifierUpEffect ; ACCURACY_UP1_EFFECT dw StatModifierUpEffect ; EVASION_UP1_EFFECT dw PayDayEffect ; PAY_DAY_EFFECT - dw $0000 ; SWIFT_EFFECT + dw NULL ; SWIFT_EFFECT dw StatModifierDownEffect ; ATTACK_DOWN1_EFFECT dw StatModifierDownEffect ; DEFENSE_DOWN1_EFFECT dw StatModifierDownEffect ; SPEED_DOWN1_EFFECT @@ -38,12 +38,12 @@ MoveEffectPointerTable: dw FlinchSideEffect ; FLINCH_SIDE_EFFECT2 dw OneHitKOEffect ; OHKO_EFFECT dw ChargeEffect ; CHARGE_EFFECT - dw $0000 ; SUPER_FANG_EFFECT - dw $0000 ; SPECIAL_DAMAGE_EFFECT + dw NULL ; SUPER_FANG_EFFECT + dw NULL ; SPECIAL_DAMAGE_EFFECT dw TrappingEffect ; TRAPPING_EFFECT dw ChargeEffect ; FLY_EFFECT dw TwoToFiveAttacksEffect ; ATTACK_TWICE_EFFECT - dw $0000 ; JUMP_KICK_EFFECT + dw NULL ; JUMP_KICK_EFFECT dw MistEffect ; MIST_EFFECT dw FocusEnergyEffect ; FOCUS_ENERGY_EFFECT dw RecoilEffect ; RECOIL_EFFECT @@ -76,12 +76,12 @@ MoveEffectPointerTable: dw StatModifierDownEffect ; unused effect dw ConfusionSideEffect ; CONFUSION_SIDE_EFFECT dw TwoToFiveAttacksEffect ; TWINEEDLE_EFFECT - dw $0000 ; unused effect + dw NULL ; unused effect dw SubstituteEffect ; SUBSTITUTE_EFFECT dw HyperBeamEffect ; HYPER_BEAM_EFFECT dw RageEffect ; RAGE_EFFECT dw MimicEffect ; MIMIC_EFFECT - dw $0000 ; METRONOME_EFFECT + dw NULL ; METRONOME_EFFECT dw LeechSeedEffect ; LEECH_SEED_EFFECT dw SplashEffect ; SPLASH_EFFECT dw DisableEffect ; DISABLE_EFFECT diff --git a/engine/battle/animations.asm b/engine/battle/animations.asm index d858e066..ee476ce9 100755 --- a/engine/battle/animations.asm +++ b/engine/battle/animations.asm @@ -1735,7 +1735,7 @@ AnimationSlideMonDownAndHide: jr nz, .loop call AnimationHideMonPic ld hl, wTempPic - ld bc, $0310 + ld bc, $310 xor a call FillMemory jp CopyTempPicToMonPic @@ -1896,7 +1896,7 @@ AnimationSubstitute: ; Changes the pokemon's sprite to the mini sprite ld hl, wTempPic xor a - ld bc, $0310 + ld bc, $310 call FillMemory ld a, [hWhoseTurn] and a @@ -1932,7 +1932,7 @@ AnimationSubstitute: jp AnimationShowMonPic CopySlowbroSpriteData: - ld bc, $0010 + ld bc, $10 ld a, BANK(SlowbroSprite) jp FarCopyData2 diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 00852b2b..6881aef5 100755 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -582,7 +582,7 @@ HandlePoisonBurnLeechSeed_DecreaseOwnHP: ld a, [de] ; increment toxic counter inc a ld [de], a - ld hl, $0000 + ld hl, 0 .toxicTicksLoop add hl, bc dec a @@ -5345,8 +5345,8 @@ MoveHitTest: ret z ; Swift never misses (interestingly, Azure Heights lists this is a myth, but it appears to be true) call CheckTargetSubstitute ; substitute check (note that this overwrites a) jr z, .checkForDigOrFlyStatus -; this code is buggy. it's supposed to prevent HP draining moves from working on substitutes. -; since $7b79 overwrites a with either $00 or $01, it never works. +; This code is buggy. It's supposed to prevent HP draining moves from working on substitutes. +; Since CheckTargetSubstitute overwrites a with either $00 or $01, it never works. cp DRAIN_HP_EFFECT jp z, .moveMissed cp DREAM_EATER_EFFECT @@ -6335,9 +6335,9 @@ LoadPlayerBackPic: ld de, vBackPic call InterlaceMergeSpriteBuffers ld a, $a - ld [$0], a + ld [MBC1SRamEnable], a xor a - ld [$4000], a + ld [MBC1SRamBank], a ld hl, vSprites ld de, sSpriteBuffer1 ld a, [hLoadedROMBank] @@ -6345,7 +6345,7 @@ LoadPlayerBackPic: ld c, 7 * 7 call CopyVideoData xor a - ld [$0], a + ld [MBC1SRamEnable], a ld a, $31 ld [hStartTileID], a coord hl, 1, 5 diff --git a/engine/battle/trainer_ai.asm b/engine/battle/trainer_ai.asm index 2178be38..d61b44f8 100644 --- a/engine/battle/trainer_ai.asm +++ b/engine/battle/trainer_ai.asm @@ -134,7 +134,7 @@ AIMoveChoiceModification1: push de push bc ld hl, StatusAilmentMoveEffects - ld de, $0001 + ld de, 1 call IsInArray pop bc pop de diff --git a/engine/events/diploma.asm b/engine/events/diploma.asm index 24bd2f22..53d78e57 100755 --- a/engine/events/diploma.asm +++ b/engine/events/diploma.asm @@ -9,7 +9,7 @@ DisplayDiploma:: call DisableLCD ld hl, CircleTile ld de, vChars2 + $700 - ld bc, $0010 + ld bc, $10 ld a, BANK(CircleTile) call FarCopyData2 coord hl, 0, 0 diff --git a/engine/events/prize_menu.asm b/engine/events/prize_menu.asm index aa86f828..5a00a89e 100755 --- a/engine/events/prize_menu.asm +++ b/engine/events/prize_menu.asm @@ -131,10 +131,8 @@ GetPrizeMenuId: coord hl, 13, 5 ; reg. c: ; [low nybble] number of bytes -; [bit 765 = %100] space-padding (not zero-padding) +; [bits 765 = %100] space-padding (not zero-padding) ld c, (1 << 7 | 2) -; Function $15CD displays BCD value (same routine -; used by text-command $02) call PrintBCDNumber ld de, wPrize2Price coord hl, 13, 7 diff --git a/engine/menus/display_text_id_init.asm b/engine/menus/display_text_id_init.asm index e1f6c678..45c76f9c 100644 --- a/engine/menus/display_text_id_init.asm +++ b/engine/menus/display_text_id_init.asm @@ -43,7 +43,7 @@ DisplayTextIDInit:: ; the original direction they were facing must be restored after the dialogue is over ld hl, wSpriteStateData1 + $19 ld c, $0f - ld de, $0010 + ld de, $10 .spriteFacingDirectionCopyLoop ld a, [hl] inc h @@ -55,7 +55,7 @@ DisplayTextIDInit:: ; loop to force all the sprites in the middle of animation to stand still ; (so that they don't like they're frozen mid-step during the dialogue) ld hl, wSpriteStateData1 + 2 - ld de, $0010 + ld de, $10 ld c, e .spriteStandStillLoop ld a, [hl] diff --git a/engine/menus/save.asm b/engine/menus/save.asm index f2ecc3aa..ee73c850 100755 --- a/engine/menus/save.asm +++ b/engine/menus/save.asm @@ -702,7 +702,7 @@ ClearSAV: PadSRAM_FF: ld [MBC1SRamBank], a - ld hl, $a000 ; start of SRAM - ld bc, $2000 ; size of SRAM + ld hl, SRAM_Begin + ld bc, SRAM_End - SRAM_Begin ld a, $ff jp FillMemory diff --git a/engine/menus/start_sub_menus.asm b/engine/menus/start_sub_menus.asm index 43c767e2..526540df 100755 --- a/engine/menus/start_sub_menus.asm +++ b/engine/menus/start_sub_menus.asm @@ -491,12 +491,12 @@ DrawTrainerInfo: call CopyData ld hl, TrainerInfoTextBoxTileGraphics ; trainer info text box tile patterns ld de, vChars2 + $770 - ld bc, $0080 + ld bc, $80 push bc call TrainerInfo_FarCopyData ld hl, BlankLeaderNames ld de, vChars2 + $600 - ld bc, $0170 + ld bc, $170 call TrainerInfo_FarCopyData pop bc ld hl, BadgeNumbersTileGraphics ; badge number tile patterns @@ -504,14 +504,14 @@ DrawTrainerInfo: call TrainerInfo_FarCopyData ld hl, GymLeaderFaceAndBadgeTileGraphics ; gym leader face and badge tile patterns ld de, vChars2 + $200 - ld bc, $0400 + ld bc, $400 ld a, $03 call FarCopyData2 ld hl, TextBoxGraphics - ld de, $00d0 + ld de, $d0 add hl, de ; hl = colon tile pattern ld de, vChars1 + $560 - ld bc, $0010 + ld bc, $10 ld a, $04 push bc call FarCopyData2 diff --git a/engine/movie/title.asm b/engine/movie/title.asm index 1a2d16a0..9cbe5494 100755 --- a/engine/movie/title.asm +++ b/engine/movie/title.asm @@ -317,7 +317,7 @@ DrawPlayerCharacter: xor a ld [wPlayerCharacterOAMTile], a ld hl, wOAMBuffer - ld de, $605a + lb de, $60, $5a ld b, 7 .loop push de diff --git a/engine/overworld/map_sprites.asm b/engine/overworld/map_sprites.asm index eb8edb10..904e9b04 100755 --- a/engine/overworld/map_sprites.asm +++ b/engine/overworld/map_sprites.asm @@ -133,8 +133,7 @@ LoadMapSpriteTilePatterns: jr nc, .fourTileSpriteVRAMAddr ld d, a dec d -; Equivalent to multiplying $C0 (number of bytes in 12 tiles) times the VRAM -; slot and adding the result to $8000 (the VRAM base address). +; vSprites += [hVRAMSlot] * $C0 (the number of bytes in 12 tiles) .calculateVRAMAddrLoop add hl, bc dec d diff --git a/engine/overworld/wild_mons.asm b/engine/overworld/wild_mons.asm index 24dc7681..2593e0ec 100644 --- a/engine/overworld/wild_mons.asm +++ b/engine/overworld/wild_mons.asm @@ -16,10 +16,10 @@ LoadWildData:: jr z, .NoGrassData ; if no grass data, skip to surfing data push hl ld de, wGrassMons ; otherwise, load grass data - ld bc, $0014 + ld bc, $14 call CopyData pop hl - ld bc, $0014 + ld bc, $14 add hl, bc .NoGrassData ld a, [hli] @@ -27,7 +27,7 @@ LoadWildData:: and a ret z ; if no water data, we're done ld de, wWaterMons ; otherwise, load surfing data - ld bc, $0014 + ld bc, $14 jp CopyData INCLUDE "data/wild/grass_water.asm" diff --git a/engine/pokemon/status_screen.asm b/engine/pokemon/status_screen.asm index f66cdf5a..b262a8b7 100755 --- a/engine/pokemon/status_screen.asm +++ b/engine/pokemon/status_screen.asm @@ -254,7 +254,7 @@ PrintStatsBox: ld c, 8 call TextBoxBorder ; Draws the box coord hl, 1, 9 ; Start printing stats from here - ld bc, $0019 ; Number offset + ld bc, $19 ; Number offset jr .PrintStats .DifferentBox coord hl, 9, 2 @@ -262,7 +262,7 @@ PrintStatsBox: ld c, 9 call TextBoxBorder coord hl, 11, 3 - ld bc, $0018 + ld bc, $18 .PrintStats push bc push hl diff --git a/engine/slots/slot_machine.asm b/engine/slots/slot_machine.asm index 16696713..c3de5dd2 100755 --- a/engine/slots/slot_machine.asm +++ b/engine/slots/slot_machine.asm @@ -31,7 +31,7 @@ PromptUserToPlaySlots: xor a ld [wSlotMachineAllowMatchesCounter], a ld hl, wStoppingWhichSlotMachineWheel - ld bc, $0014 + ld bc, $14 call FillMemory call MainSlotMachineLoop ld hl, wd730 diff --git a/home/init.asm b/home/init.asm index 48294fa6..83238bad 100644 --- a/home/init.asm +++ b/home/init.asm @@ -41,8 +41,8 @@ rLCDC_DEFAULT EQU %11100011 ld sp, wStack - ld hl, $c000 ; start of WRAM - ld bc, $2000 ; size of WRAM + ld hl, WRAM0_Begin + ld bc, WRAM1_End - WRAM0_Begin .loop ld [hl], 0 inc hl @@ -53,8 +53,8 @@ rLCDC_DEFAULT EQU %11100011 call ClearVram - ld hl, $ff80 ; start of HRAM - ld bc, $ffff - $ff80 ; size of HRAM + ld hl, HRAM_Begin + ld bc, HRAM_End - HRAM_Begin call FillMemory call ClearSprites @@ -119,8 +119,8 @@ rLCDC_DEFAULT EQU %11100011 jp SetDefaultNamesBeforeTitlescreen ClearVram:: - ld hl, $8000 - ld bc, $2000 + ld hl, VRAM_Begin + ld bc, VRAM_End - VRAM_Begin xor a jp FillMemory diff --git a/home/list_menu.asm b/home/list_menu.asm index 68335ed5..4ce973b2 100644 --- a/home/list_menu.asm +++ b/home/list_menu.asm @@ -454,7 +454,7 @@ PrintListMenuEntries:: ld [wLoadedMonLevel], a .skipCopyingLevel pop hl - ld bc, $001c + ld bc, $1c add hl, bc call PrintLevel pop af diff --git a/home/names2.asm b/home/names2.asm index 178a0780..319febd3 100644 --- a/home/names2.asm +++ b/home/names2.asm @@ -77,7 +77,7 @@ GetName:: ld h, d ld l, e ld de, wcd6d - ld bc, $0014 + ld bc, $14 call CopyData .gotPtr ld a, e diff --git a/home/overworld.asm b/home/overworld.asm index c959beb6..79e4ea97 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -1424,18 +1424,18 @@ LoadCurrentMapView:: dec b jr nz, .rowLoop ld hl, wTileMapBackup - ld bc, $0000 + ld bc, $0 .adjustForYCoordWithinTileBlock ld a, [wYBlockCoord] and a jr z, .adjustForXCoordWithinTileBlock - ld bc, $0030 + ld bc, $30 add hl, bc .adjustForXCoordWithinTileBlock ld a, [wXBlockCoord] and a jr z, .copyToVisibleAreaBuffer - ld bc, $0002 + ld bc, $2 add hl, bc .copyToVisibleAreaBuffer coord de, 0, 0 ; base address for the tiles that are directly transferred to VRAM during V-blank @@ -1739,7 +1739,7 @@ ScheduleSouthRowRedraw:: ld l, a ld a, [wMapViewVRAMPointer + 1] ld h, a - ld bc, $0200 + ld bc, $200 add hl, bc ld a, h and $03 @@ -1835,7 +1835,7 @@ DrawTileBlock:: ld a, [de] ld [hl], a inc de - ld bc, $0015 + ld bc, $15 add hl, bc pop bc dec c @@ -2180,7 +2180,7 @@ LoadMapHeader:: jr nz, .zeroSpriteDataLoop ; initialize all C100-C1FF sprite entries to disabled (other than player's) ld hl, wSpriteStateData1 + $12 - ld de, $0010 + ld de, $10 ld c, $0f .disableSpriteEntriesLoop ld [hl], $ff diff --git a/home/pics.asm b/home/pics.asm index 02683db7..c6d99cbb 100644 --- a/home/pics.asm +++ b/home/pics.asm @@ -93,7 +93,7 @@ LoadUncompressedSpriteData:: add a ; 8*(7*((8-w)/2) + 7-h) ; combined overall offset (in bytes) ld [hSpriteOffset], a xor a - ld [$4000], a + ld [MBC1SRamBank], a ld hl, sSpriteBuffer0 call ZeroSpriteBuffer ; zero buffer 0 ld de, sSpriteBuffer1 @@ -151,7 +151,7 @@ ZeroSpriteBuffer:: ; de: output address InterlaceMergeSpriteBuffers:: xor a - ld [$4000], a + ld [MBC1SRamBank], a push de ld hl, sSpriteBuffer2 + (SPRITEBUFFERSIZE - 1) ; destination: end of buffer 2 ld de, sSpriteBuffer1 + (SPRITEBUFFERSIZE - 1) ; source 2: end of buffer 1 diff --git a/home/predef_text.asm b/home/predef_text.asm index 24001c24..059e23ab 100644 --- a/home/predef_text.asm +++ b/home/predef_text.asm @@ -119,7 +119,7 @@ CloseTextDisplay:: ; loop to make sprites face the directions they originally faced before the dialogue ld hl, wSpriteStateData2 + $19 ld c, $0f - ld de, $0010 + ld de, $10 .restoreSpriteFacingDirectionLoop ld a, [hl] dec h diff --git a/macros/scripts/events.asm b/macros/scripts/events.asm index 9be354e3..c5f90107 100755 --- a/macros/scripts/events.asm +++ b/macros/scripts/events.asm @@ -183,7 +183,7 @@ ENDM ;\3, \4, ... = additional (optional) event indices SetEvents: MACRO SetEvent \1 - rept (_NARG + -1) + rept _NARG - 1 SetEventReuseHL \2 shift endr @@ -235,7 +235,7 @@ ENDM ;\3 = event index (optional) ResetEvents: MACRO ResetEvent \1 - rept (_NARG + -1) + rept _NARG - 1 ResetEventReuseHL \2 shift endr @@ -283,7 +283,7 @@ event_fill_start = event_start_byte + 1 event_fill_count = event_end_byte - event_start_byte - 1 IF ((\1) % 8) == 0 -event_fill_start = event_fill_start + -1 +event_fill_start = event_fill_start - 1 event_fill_count = event_fill_count + 1 ELSE ld a, [wEventFlags + event_start_byte] @@ -304,7 +304,7 @@ event_fill_count = event_fill_count + 1 ld a, $ff ld hl, wEventFlags + event_fill_start - REPT event_fill_count + -1 + REPT event_fill_count - 1 ld [hli], a ENDR @@ -345,7 +345,7 @@ event_fill_start = event_start_byte + 1 event_fill_count = event_end_byte - event_start_byte - 1 IF ((\1) % 8) == 0 -event_fill_start = event_fill_start + -1 +event_fill_start = event_fill_start - 1 event_fill_count = event_fill_count + 1 ELSE ld a, [wEventFlags + event_start_byte] @@ -370,7 +370,7 @@ event_fill_count = event_fill_count + 1 xor a ENDC - REPT event_fill_count + -1 + REPT event_fill_count - 1 ld [hli], a ENDR diff --git a/macros/wram.asm b/macros/wram.asm new file mode 100644 index 00000000..7a9b4a6a --- /dev/null +++ b/macros/wram.asm @@ -0,0 +1,92 @@ +; Used in wram.asm + +flag_array: MACRO + ds ((\1) + 7) / 8 +ENDM + +BOX_STRUCT_LENGTH EQU 25 + NUM_MOVES * 2 + +box_struct: MACRO +\1Species:: db +\1HP:: dw +\1BoxLevel:: db +\1Status:: db +\1Type:: +\1Type1:: db +\1Type2:: db +\1CatchRate:: db +\1Moves:: ds NUM_MOVES +\1OTID:: dw +\1Exp:: ds 3 +\1HPExp:: dw +\1AttackExp:: dw +\1DefenseExp:: dw +\1SpeedExp:: dw +\1SpecialExp:: dw +\1DVs:: ds 2 +\1PP:: ds NUM_MOVES +ENDM + +party_struct: MACRO + box_struct \1 +\1Level:: db +\1Stats:: +\1MaxHP:: dw +\1Attack:: dw +\1Defense:: dw +\1Speed:: dw +\1Special:: dw +ENDM + +battle_struct: MACRO +\1Species:: db +\1HP:: dw +\1PartyPos:: +\1BoxLevel:: db +\1Status:: db +\1Type:: +\1Type1:: db +\1Type2:: db +\1CatchRate:: db +\1Moves:: ds NUM_MOVES +\1DVs:: ds 2 +\1Level:: db +\1Stats:: +\1MaxHP:: dw +\1Attack:: dw +\1Defense:: dw +\1Speed:: dw +\1Special:: dw +\1PP:: ds NUM_MOVES +ENDM + +spritestatedata1: MACRO +\1PictureID:: db +\1MovementStatus:: db +\1ImageIndex:: db +\1YStepVector:: db +\1YPixels:: db +\1XStepVector:: db +\1XPixels:: db +\1IntraAnimFrameCounter:: db +\1AnimFrameCounter:: db +\1FacingDirection:: db + ds 6 +\1End:: +ENDM + +spritestatedata2: MACRO +\1WalkAnimationCounter:: db + ds 1 +\1YDisplacement:: db +\1XDisplacement:: db +\1MapY:: db +\1MapX:: db +\1MovementByte1:: db +\1GrassPriority:: db +\1MovementDelay:: db + ds 5 +\1ImageBaseOffset:: db + ds 1 +\1End:: +ENDM diff --git a/scripts/OaksLab.asm b/scripts/OaksLab.asm index 9bb84923..b3347849 100755 --- a/scripts/OaksLab.asm +++ b/scripts/OaksLab.asm @@ -652,7 +652,7 @@ OaksLabScript18: OaksLabScript_RemoveParcel: ld hl, wBagItems - ld bc, $0000 + ld bc, 0 .loop ld a, [hli] cp $ff diff --git a/scripts/VermilionDock.asm b/scripts/VermilionDock.asm index 4b0cf439..90fef6b2 100755 --- a/scripts/VermilionDock.asm +++ b/scripts/VermilionDock.asm @@ -78,7 +78,7 @@ VermilionDock_1db9b: ld d, $0 ld e, $8 .asm_1dbfa - ld hl, $0002 + ld hl, $2 add hl, bc ld a, l ld [wMapViewVRAMPointer], a diff --git a/wram.asm b/wram.asm index 9c37b3db..e2fa05a6 100755 --- a/wram.asm +++ b/wram.asm @@ -1,63 +1,6 @@ INCLUDE "constants.asm" -flag_array: MACRO - ds ((\1) + 7) / 8 -ENDM - -box_struct_length EQU 25 + NUM_MOVES * 2 -box_struct: MACRO -\1Species:: db -\1HP:: dw -\1BoxLevel:: db -\1Status:: db -\1Type:: -\1Type1:: db -\1Type2:: db -\1CatchRate:: db -\1Moves:: ds NUM_MOVES -\1OTID:: dw -\1Exp:: ds 3 -\1HPExp:: dw -\1AttackExp:: dw -\1DefenseExp:: dw -\1SpeedExp:: dw -\1SpecialExp:: dw -\1DVs:: ds 2 -\1PP:: ds NUM_MOVES -ENDM - -party_struct: MACRO - box_struct \1 -\1Level:: db -\1Stats:: -\1MaxHP:: dw -\1Attack:: dw -\1Defense:: dw -\1Speed:: dw -\1Special:: dw -ENDM - -battle_struct: MACRO -\1Species:: db -\1HP:: dw -\1PartyPos:: -\1BoxLevel:: db -\1Status:: db -\1Type:: -\1Type1:: db -\1Type2:: db -\1CatchRate:: db -\1Moves:: ds NUM_MOVES -\1DVs:: ds 2 -\1Level:: db -\1Stats:: -\1MaxHP:: dw -\1Attack:: dw -\1Defense:: dw -\1Speed:: dw -\1Special:: dw -\1PP:: ds NUM_MOVES -ENDM +INCLUDE "macros/wram.asm" SECTION "WRAM Bank 0", WRAM0 @@ -228,21 +171,6 @@ wSpriteStateData1:: ; C1xD ; C1xE ; C1xF -spritestatedata1: MACRO -\1PictureID:: db -\1MovementStatus:: db -\1ImageIndex:: db -\1YStepVector:: db -\1YPixels:: db -\1XStepVector:: db -\1XPixels:: db -\1IntraAnimFrameCounter:: db -\1AnimFrameCounter:: db -\1FacingDirection:: db - ds 6 -\1End:: -endm - wSpritePlayerStateData1:: spritestatedata1 wSpritePlayerStateData1 wSprite01StateData1:: spritestatedata1 wSprite01StateData1 wSprite02StateData1:: spritestatedata1 wSprite02StateData1 @@ -280,22 +208,6 @@ wSpriteStateData2:: ; C2xD ; C2xE: sprite image base offset (in video ram, player always has value 1, used to compute c1x2) ; C2xF -spritestatedata2: MACRO -\1WalkAnimationCounter:: db - ds 1 -\1YDisplacement:: db -\1XDisplacement:: db -\1MapY:: db -\1MapX:: db -\1MovementByte1:: db -\1GrassPriority:: db -\1MovementDelay:: db - ds 5 -\1ImageBaseOffset:: db - ds 1 -\1End:: -endm - wSpritePlayerStateData2:: spritestatedata2 wSpritePlayerStateData2 wSprite01StateData2:: spritestatedata2 wSprite01StateData2 wSprite02StateData2:: spritestatedata2 wSprite02StateData2 @@ -1050,7 +962,7 @@ wOptionsCancelCursorX:: ds 1 wDayCarePerLevelCost:: -; 2-byte BCD number (always set to $0100) +; 2-byte BCD number (always set to $100) wHoFTeamIndex2:: @@ -3185,7 +3097,7 @@ wBoxSpecies:: ds MONS_PER_BOX + 1 wBoxMons:: wBoxMon1:: box_struct wBoxMon1 -wBoxMon2:: ds box_struct_length * (MONS_PER_BOX + -1) +wBoxMon2:: ds BOX_STRUCT_LENGTH * (MONS_PER_BOX - 1) wBoxMonOT:: ds NAME_LENGTH * MONS_PER_BOX wBoxMonNicks:: ds NAME_LENGTH * MONS_PER_BOX -- cgit v1.3.1-sl0p