Split home into separate object file

This commit is contained in:
ElectroDeoxys
2022-12-28 13:38:37 +00:00
parent f415394295
commit d522badb60
88 changed files with 740 additions and 738 deletions
+1
View File
@@ -2,6 +2,7 @@ rom := poketcg.gbc
rom_obj := \
src/main.o \
src/home.o \
src/gfx.o \
src/text.o \
src/audio.o \
+1 -1
View File
@@ -1,7 +1,7 @@
; TODO: Make card data structures more compact and rearrange the fields for
; convenience once the meaning of all fields is figured out.
CardPointers:
CardPointers::
table_width 2, CardPointers
dw NULL
dw GrassEnergyCard
+1 -1
View File
@@ -1,4 +1,4 @@
DeckAIPointerTable:
DeckAIPointerTable::
table_width 2, DeckAIPointerTable
dw AIActionTable_SamPractice ; SAMS_PRACTICE_DECK
dw AIActionTable_GeneralDecks ; PRACTICE_PLAYER_DECK
+1 -1
View File
@@ -1,4 +1,4 @@
DeckPointers:
DeckPointers::
table_width 2, DeckPointers
dw UnnamedDeck
dw UnnamedDeck2
+1 -1
View File
@@ -11,7 +11,7 @@
; c: moved player
; e: load map/closed text box
MapScripts:
MapScripts::
table_width NUM_MAP_SCRIPTS * 2, MapScripts
; OVERWORLD_MAP
+1 -1
View File
@@ -1,4 +1,4 @@
OverworldScriptTable:
OverworldScriptTable::
table_width 2, OverworldScriptTable
dw ScriptCommand_EndScript
dw ScriptCommand_CloseAdvancedTextBox
+2 -2
View File
@@ -49,7 +49,7 @@ Func_1c003: ; unreferenced
call SetWindowOn
ret
Func_1c056:
Func_1c056::
push hl
push bc
push de
@@ -466,7 +466,7 @@ SetNPCDirection:
pop hl
ret
HandleAllNPCMovement:
HandleAllNPCMovement::
push hl
push bc
push de
+2 -2
View File
@@ -919,7 +919,7 @@ ProcessOWFrameset:
; for each of the loaded frameset subgroups
; load their tiles and advance their durations
DoLoadedFramesetSubgroupsFrame:
DoLoadedFramesetSubgroupsFrame::
ld a, [wNumLoadedFramesetSubgroups]
or a
ret z
@@ -1556,7 +1556,7 @@ Func_80cd7:
db SPRITE_OW_GRANNY, SPRITE_ANIM_LIGHT_NPC_UP, SPRITE_ANIM_YELLOW_NPC_UP ; $2b
db SPRITE_OW_AMY, SPRITE_ANIM_SGB_AMY_LAYING, SPRITE_ANIM_CGB_AMY_LAYING ; $2c
SpriteNullAnimationPointer:
SpriteNullAnimationPointer::
dw SpriteNullAnimationFrame
SpriteNullAnimationFrame:
+1 -1
View File
@@ -14,7 +14,7 @@ ChallengeMachine_Reset:
; if a challenge is already in progress, then resume
; otherwise, start a new 5 round challenge
ChallengeMachine_Start:
ChallengeMachine_Start::
ld a, 0
ld [wLineSeparation], a
call Func_10a9b
+1 -1
View File
@@ -1,6 +1,6 @@
; copy the name and level of the card at wLoadedCard1 to wDefaultText
; a = length in number of tiles (the resulting string will be padded with spaces to match it)
_CopyCardNameAndLevel:
_CopyCardNameAndLevel::
push bc
push de
ld [wCardNameLength], a
+1 -1
View File
@@ -1,4 +1,4 @@
PlayCreditsSequence:
PlayCreditsSequence::
ld a, MUSIC_STOP
call PlaySong
call Func_1d705
+5 -5
View File
@@ -1,4 +1,4 @@
Func_1c8bc:
Func_1c8bc::
push hl
push bc
call Set_OBJ_8x8
@@ -25,7 +25,7 @@ Func_1c8bc:
pop hl
ret
PlayLoadedDuelAnimation:
PlayLoadedDuelAnimation::
ld a, [wDoFrameFunction + 0]
cp LOW(Func_3ba2)
jr nz, .error
@@ -274,7 +274,7 @@ AnimationCoordinates:
; appends to end of wDuelAnimBuffer
; the current duel animation
LoadDuelAnimationToBuffer:
LoadDuelAnimationToBuffer::
push hl
push bc
ld a, [wDuelAnimBufferCurPos]
@@ -376,7 +376,7 @@ GetAnimationData:
pop bc
ret
Func_1cac5:
Func_1cac5::
ld a, [wd42a]
cp $ff
jr nz, .asm_1cb03
@@ -431,7 +431,7 @@ Func_1cac5:
ld [wd4c0], a
jr .asm_1cafb
Func_1cb18:
Func_1cb18::
push hl
push bc
push de
+22 -22
View File
@@ -1,12 +1,12 @@
; try to resume a saved duel from the main menu
TryContinueDuel:
TryContinueDuel::
call SetupDuel
call LoadAndValidateDuelSaveData
ldtx hl, BackUpIsBrokenText
jr c, HandleFailedToContinueDuel
; fallthrough
_ContinueDuel:
_ContinueDuel::
ld hl, sp+$00
ld a, l
ld [wDuelReturnAddress], a
@@ -28,7 +28,7 @@ HandleFailedToContinueDuel:
; this function begins the duel after the opponent's graphics, name and deck have been introduced
; loads both player's decks and sets up the variables and resources required to begin a duel.
StartDuel_VSAIOpp:
StartDuel_VSAIOpp::
ld a, PLAYER_TURN
ldh [hWhoseTurn], a
ld a, DUELIST_TYPE_PLAYER
@@ -2327,7 +2327,7 @@ Func_4f2d:
; draw the main scene during a duel, except the contents of the bottom text box,
; which depend on the type of duelist holding the turn.
; includes the background, both arena Pokemon, and both HUDs.
DrawDuelMainScene:
DrawDuelMainScene::
ld a, DUELVARS_DUELIST_TYPE
call GetTurnDuelistVariable
cp DUELIST_TYPE_PLAYER
@@ -2399,7 +2399,7 @@ DrawDuelMainScene:
; draws the main elements of the main duel interface, including HUDs, HPs, card names
; and color symbols, attached cards, and other information, of both duelists.
DrawDuelHUDs:
DrawDuelHUDs::
ld a, DUELVARS_DUELIST_TYPE
call GetTurnDuelistVariable
cp DUELIST_TYPE_PLAYER
@@ -5725,7 +5725,7 @@ Func_64fc:
; Pokemon Power. Includes the card's information above, and the Pokemon Power's
; description below.
; input: hTempPlayAreaLocation_ff9d
DisplayUsePokemonPowerScreen:
DisplayUsePokemonPowerScreen::
ldh a, [hTempPlayAreaLocation_ff9d]
ld [wCurPlayAreaSlot], a
xor a
@@ -5953,7 +5953,7 @@ DisplayOpponentUsedAttackScreen:
; display card detail when a trainer card is used, and print "Used xxx"
; hTempCardIndex_ff9f contains the card's deck index
DisplayUsedTrainerCardDetailScreen:
DisplayUsedTrainerCardDetailScreen::
ldh a, [hTempCardIndex_ff9f]
ldtx hl, UsedText
call DisplayCardDetailScreen
@@ -5982,7 +5982,7 @@ PrintUsedTrainerCardDescription:
; save data of the current duel to sCurrentDuel
; byte 0 is $01, bytes 1 and 2 are the checksum, byte 3 is [wDuelType]
; next $33a bytes come from DuelDataToSave
SaveDuelData:
SaveDuelData::
farcall StubbedUnusedSaveDataValidation
ld de, sCurrentDuel
; fallthrough
@@ -5990,7 +5990,7 @@ SaveDuelData:
; save data of the current duel to de (in SRAM)
; byte 0 is $01, bytes 1 and 2 are the checksum, byte 3 is [wDuelType]
; next $33a bytes come from DuelDataToSave
SaveDuelDataToDE:
SaveDuelDataToDE::
call EnableSRAM
push de
inc de
@@ -7092,7 +7092,7 @@ HandlePoisonDamage:
; and a pointer in hl to the wLoadedCard* buffer where the card data is loaded,
; check if the card is Clefairy Doll or Mysterious Fossil, and, if so, convert it
; to a Pokemon card in the wLoadedCard* buffer, using .trainer_to_pkmn_data.
ConvertSpecialTrainerCardToPokemon:
ConvertSpecialTrainerCardToPokemon::
ld c, a
ld a, [hl]
cp TYPE_TRAINER
@@ -7148,7 +7148,7 @@ ConvertSpecialTrainerCardToPokemon:
; this function applies status conditions to the defending Pokemon,
; returned by the effect functions in wEffectFunctionsFeedback
Func_6df1:
Func_6df1::
xor a
ld [wPlayerArenaCardLastTurnStatus], a
ld [wOpponentArenaCardLastTurnStatus], a
@@ -7215,7 +7215,7 @@ ApplyStatusConditionToArenaPokemon:
ld [de], a
ret
Func_6e49:
Func_6e49::
call HandleDestinyBondSubstatus
; fallthrough
@@ -7491,7 +7491,7 @@ Func_6ff7:
; print one of the "There was no effect from" texts depending
; on the value at wNoEffectFromWhichStatus (NO_STATUS or a status condition constant)
PrintThereWasNoEffectFromStatusText:
PrintThereWasNoEffectFromStatusText::
ld a, [wNoEffectFromWhichStatus]
or a
jr nz, .status
@@ -7762,7 +7762,7 @@ TakeAPrizes:
; clear the non-turn holder's duelvars starting at DUELVARS_ARENA_CARD_DISABLED_ATTACK_INDEX
; these duelvars only last a two-player turn at most.
ClearNonTurnTemporaryDuelvars:
ClearNonTurnTemporaryDuelvars::
ld a, DUELVARS_ARENA_CARD_DISABLED_ATTACK_INDEX
call GetNonTurnDuelistVariable
xor a
@@ -7778,7 +7778,7 @@ ClearNonTurnTemporaryDuelvars:
; same as ClearNonTurnTemporaryDuelvars, except the non-turn holder's arena
; Pokemon status condition is copied to wccc5
ClearNonTurnTemporaryDuelvars_CopyStatus:
ClearNonTurnTemporaryDuelvars_CopyStatus::
ld a, DUELVARS_ARENA_CARD_STATUS
call GetNonTurnDuelistVariable
ld [wccc5], a
@@ -7788,7 +7788,7 @@ ClearNonTurnTemporaryDuelvars_CopyStatus:
; update non-turn holder's DUELVARS_ARENA_CARD_LAST_TURN_DAMAGE
; if wccef == 0: set to [wDealtDamage]
; if wceef != 0: set to 0
Func_7195:
Func_7195::
ld a, DUELVARS_ARENA_CARD_LAST_TURN_DAMAGE
call GetNonTurnDuelistVariable
ld a, [wccef]
@@ -7805,7 +7805,7 @@ Func_7195:
ld [hl], a
ret
_TossCoin:
_TossCoin::
ld [wCoinTossTotalNum], a
ld a, [wDuelDisplayedScreen]
cp COIN_TOSS
@@ -8195,12 +8195,12 @@ SelectComputerOpponentData:
textitem 3, 14, SelectComputerOpponentText
db $ff
Func_7415:
Func_7415::
xor a
ld [wce7e], a
ret
Func_741a:
Func_741a::
ld hl, wEffectFunctionsFeedbackIndex
ld a, [hl]
or a
@@ -8252,7 +8252,7 @@ Func_741a:
; this is a simple version of PlayAttackAnimation_DealAttackDamage that doesn't
; take into account status conditions, damage modifiers, etc, for damage calculation.
; used for confusion damage to self and for damage to benched Pokemon, for example
PlayAttackAnimation_DealAttackDamageSimple:
PlayAttackAnimation_DealAttackDamageSimple::
push hl
push de
call PlayAttackAnimation
@@ -8271,7 +8271,7 @@ PlayAttackAnimation_DealAttackDamageSimple:
ret
; if [wLoadedAttackAnimation] != 0, wait until the animation is over
WaitAttackAnimation:
WaitAttackAnimation::
ld a, [wLoadedAttackAnimation]
or a
ret z
@@ -8288,7 +8288,7 @@ WaitAttackAnimation:
; - [wLoadedAttackAnimation]: animation to play
; - de: damage dealt by the attack (to display the animation with the number)
; - c: a wDamageEffectiveness constant (to print WEAK or RESIST if necessary)
PlayAttackAnimation:
PlayAttackAnimation::
ldh a, [hWhoseTurn]
push af
push hl
+1 -1
View File
@@ -1,4 +1,4 @@
EffectCommands: ; 186f7 (6:46f7)
EffectCommands::
; Each attack has a two-byte effect pointer (attack's 7th param) that points to one of these structures.
; Similarly, trainer cards have a two-byte pointer (7th param) to one of these structures, which determines the card's function.
; Energy cards also point to one of these, but their data is just $00.
+2 -2
View File
@@ -1,6 +1,6 @@
; continuation of Bank0 Start
; meant as the main loop, but the game never returns from _GameLoop anyway
GameLoop:
GameLoop::
di
ld sp, $e000
call ResetSerial
@@ -35,7 +35,7 @@ GameLoop:
.reset_game
jp Reset
InitSaveDataAndSetUppercase:
InitSaveDataAndSetUppercase::
farcall InitSaveData
ld a, 1
ld [wUppercaseHalfWidthLetters], a
+2 -2
View File
@@ -1,6 +1,6 @@
; disables all sprite animations
; and clears memory related to sprites
Func_1296e:
Func_1296e::
push af
ld a, [wd5d7]
or a
@@ -137,7 +137,7 @@ GetSpriteAnimCounter:
pop hl
ret
_HandleAllSpriteAnimations:
_HandleAllSpriteAnimations::
push af
ld a, [wd5d7] ; skip animating this frame if enabled
or a
+1 -1
View File
@@ -39,7 +39,7 @@ Func_758a:
farcall Func_19eb4
ret
SetUpAndStartLinkDuel:
SetUpAndStartLinkDuel::
farcall _SetUpAndStartLinkDuel
ret
+1 -1
View File
@@ -481,7 +481,7 @@ EmptyScreenAndDrawTextBox:
call DrawRegularTextBox
ret
Func_b177:
Func_b177::
ld a, [wd10e]
and $03
ld hl, .FunctionTable
+7 -7
View File
@@ -1,4 +1,4 @@
_OpenDuelCheckMenu:
_OpenDuelCheckMenu::
call ResetCheckMenuCursorPositionAndBlink
xor a
ld [wce5e], a
@@ -397,7 +397,7 @@ DrawYourOrOppPlayAreaScreen:
; loads tiles and icons to display Your Play Area / Opp. Play Area screen,
; and draws the screen according to the turn player
; input: [wCheckMenuPlayAreaWhichDuelist] and [wCheckMenuPlayAreaWhichLayout]
_DrawYourOrOppPlayAreaScreen:
_DrawYourOrOppPlayAreaScreen::
xor a
ld [wTileMapFill], a
call ZeroObjectPositions
@@ -562,7 +562,7 @@ DrawInPlayAreaScreen:
ret
; draws players prize cards and bench cards
_DrawPlayersPrizeAndBenchCards:
_DrawPlayersPrizeAndBenchCards::
xor a
ld [wTileMapFill], a
call ZeroObjectPositions
@@ -1373,7 +1373,7 @@ DisplayCheckMenuCursor_YourOrOppPlayArea:
jr DrawCheckMenuCursor_YourOrOppPlayArea
; handles Peek Pkmn Power selection menus
_HandlePeekSelection:
_HandlePeekSelection::
call Set_OBJ_8x8
call LoadCursorTile
; reset wce5c and wIsSwapTurnPending
@@ -1622,7 +1622,7 @@ PeekOppPlayAreaTransitionTable:
cursor_transition $08, $38, $00, $07, $07, $05, $04
cursor_transition $08, $60, $00, $06, $06, $01, $00
_DrawAIPeekScreen:
_DrawAIPeekScreen::
push bc
call Set_OBJ_8x8
call LoadCursorTile
@@ -1897,7 +1897,7 @@ ZeroObjectPositionsWithCopyToggleOn:
ret
; handles the screen for Player to select prize card(s)
_SelectPrizeCards:
_SelectPrizeCards::
xor a
call GetFirstSetPrizeCard
ld [wYourOrOppPlayAreaCurPosition], a
@@ -2015,7 +2015,7 @@ _SelectPrizeCards:
cursor_transition $08, $48, $00, $02, $00, $05, $05
cursor_transition $30, $48, $20, $03, $01, $04, $04
_DrawPlayAreaToPlacePrizeCards:
_DrawPlayAreaToPlacePrizeCards::
xor a
ld [wTileMapFill], a
call ZeroObjectPositions
+1 -1
View File
@@ -1,7 +1,7 @@
; usually, the game doesn't loop here at all, since as soon as a main menu option
; is selected, there is no need to come back to the menu.
; the only exception is after returning from Card Pop!
_GameLoop:
_GameLoop::
call ZeroObjectPositions
ld hl, wVBlankOAMCopyToggle
inc [hl]
+1 -1
View File
@@ -1,7 +1,7 @@
; this function is called when the player is shown the "In Play Area" screen.
; it can be called with either the select button (DuelMenuShortcut_BothActivePokemon),
; or via the "In Play Area" item of the Check menu (DuelCheckMenu_InPlayArea)
OpenInPlayAreaScreen:
OpenInPlayAreaScreen::
ld a, INPLAYAREA_PLAYER_ACTIVE
ld [wInPlayAreaCurPosition], a
.start
+1 -1
View File
@@ -126,7 +126,7 @@ SetNPCMatchStartTheme:
INCLUDE "data/npcs.asm"
_GetNPCDuelConfigurations:
_GetNPCDuelConfigurations::
push hl
push bc
push de
+4 -4
View File
@@ -1,4 +1,4 @@
LoadMap:
LoadMap::
call DisableLCD
call EnableSRAM
bank1call DiscardSavedDuelData
@@ -665,7 +665,7 @@ Func_c469:
ld [wd234], a
ret
SetScreenScrollWram:
SetScreenScrollWram::
ld a, [wSCXBuffer]
ld [wSCX], a
ld a, [wSCYBuffer]
@@ -775,7 +775,7 @@ Func_c53d:
call nz, Func_c6dc
ret
Func_c554:
Func_c554::
ld a, [wPlayerSpriteIndex]
ld [wWhichSprite], a
ld a, [wCurMap]
@@ -938,7 +938,7 @@ AttemptPlayerMovement:
pop hl
ret
FindPlayerMovementFromDirection:
FindPlayerMovementFromDirection::
ld a, [wPlayerDirection]
FindPlayerMovementWithOffset:
+4 -4
View File
@@ -95,7 +95,7 @@ Func_c9bc:
Func_c9c0:
ld l, MAP_SCRIPT_MOVED_PLAYER
CallMapScriptPointerIfExists:
CallMapScriptPointerIfExists::
call GetMapScriptPointer
ret nc
jp hl
@@ -210,7 +210,7 @@ GetStackEventValue:
; returns the event var's value in a
; also ors it with itself before returning
GetEventValue:
GetEventValue::
push hl
push bc
call GetEventVar
@@ -546,7 +546,7 @@ Script_LegendaryCardRightSpark:
; Enters into the script loop, continuing until wBreakScriptLoop > 0
; When the loop is broken, it resumes normal code execution where script ended
; Note: Some scripts "double return" and skip this.
RST20:
RST20::
pop hl
ld a, l
ld [wScriptPointer], a
@@ -877,7 +877,7 @@ ScriptCommand_MoveActiveNPCByDirection:
; Moves an NPC given the list of directions pointed to by bc
; set bit 7 to only rotate the NPC
ExecuteNPCMovement:
ExecuteNPCMovement::
farcall StartNPCMovement
.loop
call DoFrameIfLCDEnabled
+5 -5
View File
@@ -38,7 +38,7 @@ SaveAndBackupData:
pop de
ret
_SaveGeneralSaveData:
_SaveGeneralSaveData::
push de
call GetReceivedLegendaryCards
ld de, sGeneralSaveData
@@ -200,7 +200,7 @@ ValidateBackupGeneralSaveData:
; returns carry if no error
; is found in sGeneralSaveData
_ValidateGeneralSaveData:
_ValidateGeneralSaveData::
push de
call EnableSRAM
ld de, sGeneralSaveData
@@ -369,7 +369,7 @@ LoadBackupSaveData:
pop hl
ret
_LoadGeneralSaveData:
_LoadGeneralSaveData::
push de
ld de, sGeneralSaveData
call LoadGeneralSaveDataFromDE
@@ -503,7 +503,7 @@ WRAMToSRAMMapper:
; save the game
; if c is 0, save the player at their current position
; otherwise, save the player in Mason's lab
_SaveGame:
_SaveGame::
ld a, c
or a
jr nz, .force_mason_lab
@@ -526,7 +526,7 @@ _SaveGame:
call SaveAndBackupData
ret
_AddCardToCollectionAndUpdateAlbumProgress:
_AddCardToCollectionAndUpdateAlbumProgress::
ld [wCardToAddToCollection], a
push hl
push bc
+2 -2
View File
@@ -2,7 +2,7 @@
; a = scene ID (SCENE_* constant)
; b = base X position of scene in tiles
; c = base Y position of scene in tiles
_LoadScene:
_LoadScene::
push hl
push bc
push de
@@ -243,7 +243,7 @@ SGBPacket_CardPop:
ds 6 ; data set 2
ds 2 ; data set 3
Func_12fc6:
Func_12fc6::
ld a, [wd291]
push af
push de
+3
View File
@@ -1,3 +1,6 @@
INCLUDE "macros.asm"
INCLUDE "constants.asm"
; rst vectors
SECTION "rst00", ROM0
ret
+8 -8
View File
@@ -1,7 +1,7 @@
; loads opponent deck at wOpponentDeckID to wOpponentDeck, and initializes wPlayerDuelistType.
; on a duel against Sam, also loads PRACTICE_PLAYER_DECK to wPlayerDeck.
; also, sets wRNG1, wRNG2, and wRNGCounter to $57.
LoadOpponentDeck:
LoadOpponentDeck::
xor a
ld [wIsPracticeDuel], a
ld a, [wOpponentDeckID]
@@ -45,35 +45,35 @@ LoadOpponentDeck:
ld [hl], a
ret
AIDoAction_Turn:
AIDoAction_Turn::
ld a, AIACTION_DO_TURN
jr AIDoAction
AIDoAction_StartDuel:
AIDoAction_StartDuel::
ld a, AIACTION_START_DUEL
jr AIDoAction
AIDoAction_ForcedSwitch:
AIDoAction_ForcedSwitch::
ld a, AIACTION_FORCED_SWITCH
call AIDoAction
ldh [hTempPlayAreaLocation_ff9d], a
ret
AIDoAction_KOSwitch:
AIDoAction_KOSwitch::
ld a, AIACTION_KO_SWITCH
call AIDoAction
ldh [hTemp_ffa0], a
ret
AIDoAction_TakePrize:
AIDoAction_TakePrize::
ld a, AIACTION_TAKE_PRIZE
jr AIDoAction ; this line is not needed
; calls the appropriate AI routine to handle action,
; depending on the deck ID (see engine/duel/ai/deck_ai.asm)
; input:
; input::
; - a = AIACTION_* constant
AIDoAction:
AIDoAction::
ld c, a
; load bank for Opponent Deck pointer table
+1 -1
View File
@@ -1,6 +1,6 @@
SECTION "Audio Callback", ROM0
; jumps to 3f:hl, then switches to bank 3d
; jumps to 3f::hl, then switches to bank 3d
Bankswitch3dTo3f::
push af
ld a, $3f
+9 -9
View File
@@ -1,19 +1,19 @@
; reads structs:
; reads structs::
; x (1 byte), y (1 byte), data (n bytes), $00
; x (1 byte), y (1 byte), data (n bytes), $00
; ...
; $ff
; for each struct, writes data to BGMap0-translated x,y
WriteDataBlocksToBGMap0:
WriteDataBlocksToBGMap0::
call WriteDataBlockToBGMap0
bit 7, [hl] ; check for $ff
jr z, WriteDataBlocksToBGMap0
ret
; reads struct:
; reads struct::
; x (1 byte), y (1 byte), data (n bytes), $00
; writes data to BGMap0-translated x,y
WriteDataBlockToBGMap0:
WriteDataBlockToBGMap0::
ld b, [hl]
inc hl
ld c, [hl]
@@ -49,7 +49,7 @@ WriteDataBlockToBGMap0:
ret
; writes a to [v*BGMap0 + BG_MAP_WIDTH * c + b]
WriteByteToBGMap0:
WriteByteToBGMap0::
push af
ld a, [wLCDC]
rla
@@ -71,7 +71,7 @@ WriteByteToBGMap0:
; fallthrough
; writes a to [v*BGMap0 + BG_MAP_WIDTH * c + b] during hblank
HblankWriteByteToBGMap0:
HblankWriteByteToBGMap0::
push hl
push de
push bc
@@ -88,7 +88,7 @@ HblankWriteByteToBGMap0:
ret
; copy a bytes of data from hl to vBGMap0 address pointed to by coord at bc
CopyDataToBGMap0:
CopyDataToBGMap0::
push bc
push hl
push af
@@ -102,7 +102,7 @@ CopyDataToBGMap0:
; copy b bytes of data from hl to de
; if LCD on, copy during h-blank only
SafeCopyDataHLtoDE: ; 6fc (0:6fc)
SafeCopyDataHLtoDE:: ; 6fc (0::6fc)
ld a, [wLCDC]
rla
jr c, JPHblankCopyDataHLtoDE
@@ -113,5 +113,5 @@ SafeCopyDataHLtoDE: ; 6fc (0:6fc)
dec b
jr nz, .lcd_off_loop
ret
JPHblankCopyDataHLtoDE:
JPHblankCopyDataHLtoDE::
jp HblankCopyDataHLtoDE
+2 -2
View File
@@ -1,5 +1,5 @@
CallHL2:
CallHL2::
jp hl
CallBC:
CallBC::
retbc
+8 -8
View File
@@ -1,5 +1,5 @@
; return, in hl, the total amount of cards owned anywhere, including duplicates
GetAmountOfCardsOwned:
GetAmountOfCardsOwned::
push de
push bc
call EnableSRAM
@@ -43,7 +43,7 @@ GetAmountOfCardsOwned:
; return carry if the count in sCardCollection plus the count in each deck (sDeck*)
; of the card with id given in a is 0 (if card not owned).
; also return the count (total owned amount) in a.
GetCardCountInCollectionAndDecks:
GetCardCountInCollectionAndDecks::
push hl
push de
push bc
@@ -94,7 +94,7 @@ GetCardCountInCollectionAndDecks:
; return carry if the count in sCardCollection of the card with id given in a is 0.
; also return the count (amount owned outside of decks) in a.
GetCardCountInCollection:
GetCardCountInCollection::
push hl
call EnableSRAM
ld h, HIGH(sCardCollection)
@@ -108,7 +108,7 @@ GetCardCountInCollection:
ret
; creates a list at wTempCardCollection of every card the player owns and how many
CreateTempCardCollection:
CreateTempCardCollection::
call EnableSRAM
ld hl, sCardCollection
ld de, wTempCardCollection
@@ -126,7 +126,7 @@ CreateTempCardCollection:
ret
; adds the cards from a deck to wTempCardCollection given de = sDeck*Name
AddDeckCardsToTempCardCollection:
AddDeckCardsToTempCardCollection::
ld a, [de]
or a
ret z ; return if empty name (empty deck)
@@ -147,7 +147,7 @@ AddDeckCardsToTempCardCollection:
; add card with id given in a to sCardCollection, provided that
; the player has less than MAX_AMOUNT_OF_CARD (99) of them
AddCardToCollection:
AddCardToCollection::
push hl
push de
push bc
@@ -174,7 +174,7 @@ AddCardToCollection:
ret
; remove a card with id given in a from sCardCollection (decrement its count if non-0)
RemoveCardFromCollection:
RemoveCardFromCollection::
push hl
call EnableSRAM
ld h, HIGH(sCardCollection)
@@ -191,7 +191,7 @@ RemoveCardFromCollection:
; return the amount of different cards that the player has collected in d
; return NUM_CARDS in e, minus 1 if VENUSAUR_LV64 or MEW_LV15 has not been collected (minus 2 if neither)
GetCardAlbumProgress:
GetCardAlbumProgress::
push hl
call EnableSRAM
ld e, NUM_CARDS
+10 -10
View File
@@ -1,11 +1,11 @@
; return the turn holder's arena card's color in a, accounting for Venomoth's Shift Pokemon Power if active
GetArenaCardColor:
GetArenaCardColor::
xor a
; fallthrough
; input: a = play area location offset (PLAY_AREA_*) of the desired card
; input:: a = play area location offset (PLAY_AREA_*) of the desired card
; return the turn holder's card's color in a, accounting for Venomoth's Shift Pokemon Power if active
GetPlayAreaCardColor:
GetPlayAreaCardColor::
push hl
push de
ld e, a
@@ -41,7 +41,7 @@ GetPlayAreaCardColor:
; return in a the weakness of the turn holder's arena or benchx Pokemon given the PLAY_AREA_* value in a
; if a == 0 and [DUELVARS_ARENA_CARD_CHANGED_WEAKNESS] != 0,
; return [DUELVARS_ARENA_CARD_CHANGED_WEAKNESS] instead
GetPlayAreaCardWeakness:
GetPlayAreaCardWeakness::
or a
jr z, GetArenaCardWeakness
add DUELVARS_ARENA_CARD
@@ -49,7 +49,7 @@ GetPlayAreaCardWeakness:
; return in a the weakness of the turn holder's arena Pokemon
; if [DUELVARS_ARENA_CARD_CHANGED_WEAKNESS] != 0, return it instead
GetArenaCardWeakness:
GetArenaCardWeakness::
ld a, DUELVARS_ARENA_CARD_CHANGED_WEAKNESS
call GetTurnDuelistVariable
or a
@@ -57,7 +57,7 @@ GetArenaCardWeakness:
ld a, DUELVARS_ARENA_CARD
; fallthrough
GetCardWeakness:
GetCardWeakness::
call GetTurnDuelistVariable
call LoadCardDataToBuffer2_FromDeckIndex
ld a, [wLoadedCard2Weakness]
@@ -66,7 +66,7 @@ GetCardWeakness:
; return in a the resistance of the turn holder's arena or benchx Pokemon given the PLAY_AREA_* value in a
; if a == 0 and [DUELVARS_ARENA_CARD_CHANGED_RESISTANCE] != 0,
; return [DUELVARS_ARENA_CARD_CHANGED_RESISTANCE] instead
GetPlayAreaCardResistance:
GetPlayAreaCardResistance::
or a
jr z, GetArenaCardResistance
add DUELVARS_ARENA_CARD
@@ -74,7 +74,7 @@ GetPlayAreaCardResistance:
; return in a the resistance of the arena Pokemon
; if [DUELVARS_ARENA_CARD_CHANGED_RESISTANCE] != 0, return it instead
GetArenaCardResistance:
GetArenaCardResistance::
ld a, DUELVARS_ARENA_CARD_CHANGED_RESISTANCE
call GetTurnDuelistVariable
or a
@@ -82,7 +82,7 @@ GetArenaCardResistance:
ld a, DUELVARS_ARENA_CARD
; fallthrough
GetCardResistance:
GetCardResistance::
call GetTurnDuelistVariable
call LoadCardDataToBuffer2_FromDeckIndex
ld a, [wLoadedCard2Resistance]
@@ -90,7 +90,7 @@ GetCardResistance:
; this function checks if turn holder's CHARIZARD energy burn is active, and if so, turns
; all energies at wAttachedEnergies except double colorless energies into fire energies
HandleEnergyBurn:
HandleEnergyBurn::
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
call GetCardIDFromDeckIndex
+12 -12
View File
@@ -1,5 +1,5 @@
; load data of card with text id of name at de to wLoadedCard1
LoadCardDataToBuffer1_FromName:
LoadCardDataToBuffer1_FromName::
ld hl, CardPointers + 2 ; skip first NULL pointer
ld a, BANK(CardPointers)
call BankpushROM2
@@ -45,18 +45,18 @@ LoadCardDataToBuffer1_FromName:
ret
; load data of card with id at e to wLoadedCard2
LoadCardDataToBuffer2_FromCardID:
LoadCardDataToBuffer2_FromCardID::
push hl
ld hl, wLoadedCard2
jr LoadCardDataToHL_FromCardID
; load data of card with id at e to wLoadedCard1
LoadCardDataToBuffer1_FromCardID:
LoadCardDataToBuffer1_FromCardID::
push hl
ld hl, wLoadedCard1
; fallthrough
LoadCardDataToHL_FromCardID:
LoadCardDataToHL_FromCardID::
push de
push bc
push hl
@@ -81,7 +81,7 @@ LoadCardDataToHL_FromCardID:
ret
; return in a the type (TYPE_* constant) of the card with id at e
GetCardType:
GetCardType::
push hl
call GetCardPointer
jr c, .done
@@ -96,7 +96,7 @@ GetCardType:
ret
; return in de the 2-byte text id of the name of the card with id at e
GetCardName:
GetCardName::
push hl
call GetCardPointer
jr c, .done
@@ -114,7 +114,7 @@ GetCardName:
ret
; from the card id in a, returns type into a, rarity into b, and set into c
GetCardTypeRarityAndSet:
GetCardTypeRarityAndSet::
push hl
push de
ld d, 0
@@ -139,7 +139,7 @@ GetCardTypeRarityAndSet:
; return at hl the pointer to the data of the card with id at e
; return carry if e was out of bounds, so no pointer was returned
GetCardPointer:
GetCardPointer::
push de
push bc
ld l, e
@@ -167,13 +167,13 @@ GetCardPointer:
pop de
ret
; input:
; input::
; hl = card_gfx_index
; de = where to load the card gfx to
; bc are supposed to be $30 (number of tiles of a card gfx) and TILE_SIZE respectively
; card_gfx_index = (<Name>CardGfx - CardGraphics) / 8 (using absolute ROM addresses)
; also copies the card's palette to wCardPalette
LoadCardGfx:
LoadCardGfx::
ldh a, [hBankROM]
push af
push hl
@@ -185,7 +185,7 @@ LoadCardGfx:
add h
call BankswitchROM
pop hl
; once we have the bank, get the pointer: multiply by 8 and discard the bank offset
; once we have the bank, get the pointer:: multiply by 8 and discard the bank offset
add hl, hl
add hl, hl
add hl, hl
@@ -205,7 +205,7 @@ LoadCardGfx:
ret
; identical to CopyFontsOrDuelGraphicsTiles
CopyFontsOrDuelGraphicsTiles2:
CopyFontsOrDuelGraphicsTiles2::
ld a, BANK(Fonts) ; BANK(DuelGraphics)
call BankpushROM
ld c, TILE_SIZE
+3 -3
View File
@@ -1,6 +1,6 @@
; validate the saved data in SRAM
; it must contain with the sequence $04, $21, $05 at s0a000
ValidateSRAM:
ValidateSRAM::
xor a
call BankswitchSRAM
ld hl, $a000
@@ -41,7 +41,7 @@ ValidateSRAM:
ret
; zero all SRAM banks and set s0a000 to $04, $21, $05
RestartSRAM:
RestartSRAM::
ld a, 3
.clear_loop
call ClearSRAMBank
@@ -57,7 +57,7 @@ RestartSRAM:
ret
; zero the loaded SRAM bank
ClearSRAMBank:
ClearSRAMBank::
push af
call BankswitchSRAM
call EnableSRAM
+5 -5
View File
@@ -1,8 +1,8 @@
; function that executes one or more consecutive coin tosses during a duel (a = number of coin tosses),
; displaying each result ([O] or [X]) starting from the top left corner of the screen.
; text at de is printed in a text box during the coin toss.
; returns: the number of heads in a and in wCoinTossNumHeads, and carry if at least one heads
TossCoinATimes:
; returns:: the number of heads in a and in wCoinTossNumHeads, and carry if at least one heads
TossCoinATimes::
push hl
ld hl, wCoinTossScreenTextID
ld [hl], e
@@ -14,9 +14,9 @@ TossCoinATimes:
; function that executes a single coin toss during a duel.
; text at de is printed in a text box during the coin toss.
; returns: - carry, and 1 in a and in wCoinTossNumHeads if heads
; returns:: - carry, and 1 in a and in wCoinTossNumHeads if heads
; - nc, and 0 in a and in wCoinTossNumHeads if tails
TossCoin:
TossCoin::
push hl
ld hl, wCoinTossScreenTextID
ld [hl], e
@@ -30,7 +30,7 @@ TossCoin:
ret
; cp de, bc
CompareDEtoBC:
CompareDEtoBC::
ld a, d
cp b
ret nz
+3 -3
View File
@@ -1,6 +1,6 @@
; copy c bytes of data from hl to de, b times.
; used to copy gfx data with c = TILE_SIZE
CopyGfxData:
CopyGfxData::
ld a, [wLCDC]
rla
jr nc, .next_tile
@@ -35,7 +35,7 @@ CopyGfxData:
ret
; copy bc bytes from hl to de. preserves all registers except af
CopyDataHLtoDE_SaveRegisters:
CopyDataHLtoDE_SaveRegisters::
push hl
push de
push bc
@@ -46,7 +46,7 @@ CopyDataHLtoDE_SaveRegisters:
ret
; copy bc bytes from hl to de
CopyDataHLtoDE:
CopyDataHLtoDE::
ld a, [hli]
ld [de], a
inc de
+2 -2
View File
@@ -1,5 +1,5 @@
; [wDamage] += a
AddToDamage:
AddToDamage::
push hl
ld hl, wDamage
add [hl]
@@ -11,7 +11,7 @@ AddToDamage:
ret
; [wDamage] -= a
SubtractFromDamage:
SubtractFromDamage::
push de
push hl
ld e, a
+6 -6
View File
@@ -2,7 +2,7 @@
; de = source of compressed data
; b = HIGH byte of secondary buffer ($100 bytes of buffer space)
; also clears this $100 byte space
InitDataDecompression:
InitDataDecompression::
ld hl, wDecompSourcePosPtr
ld [hl], e
inc hl
@@ -33,10 +33,10 @@ InitDataDecompression:
; decompresses data
; uses values initialized by InitDataDecompression
; wDecompSourcePosPtr holds the pointer for compressed source
; input:
; input::
; bc = row width
; de = buffer to place decompressed data
DecompressData:
DecompressData::
push hl
push de
.loop
@@ -53,7 +53,7 @@ DecompressData:
pop hl
ret
; decompression works as follows:
; decompression works as follows::
; first a command byte is read that will dictate how the
; following bytes will be copied
; the position will then move to the next byte (0xXY), and
@@ -63,13 +63,13 @@ DecompressData:
; which means it stores 0xXY in memory as number of bytes to repeat
; from a given offset. This offset is in the next byte in the data,
; 0xZZ, which tells the offset to start repeating. A toggle is switched
; each time the algorithm hits "repeat mode":
; each time the algorithm hits "repeat mode"::
; - if off -> on it reads 0xXY and stores it,
; then repeats (0x0X + 2) bytes from the offset starting at 0xZZ;
; - if on -> off, then the data only provides the offset,
; and the previous byte read for number of bytes to repeat, 0xXY, is reused
; in which case (0x0Y + 2) bytes are repeated starting from the offset.
.Decompress:
.Decompress::
ld hl, wDecompNumBytesToRepeat
ld a, [hl]
or a
+1 -1
View File
@@ -1,5 +1,5 @@
; divides BC by DE. Stores result in BC and stores remainder in HL
DivideBCbyDE:
DivideBCbyDE::
ld hl, $0000
rl c
rl b
+2 -2
View File
@@ -1,5 +1,5 @@
; copy DMA to hDMAFunction
CopyDMAFunction:
CopyDMAFunction::
ld c, LOW(hDMAFunction)
ld b, JumpToFunctionInTable - DMA
ld hl, DMA
@@ -12,7 +12,7 @@ CopyDMAFunction:
ret
; CopyDMAFunction copies this function to hDMAFunction ($ff83)
DMA:
DMA::
ld a, HIGH(wOAM)
ldh [rDMA], a
ld a, $28
+3 -3
View File
@@ -1,5 +1,5 @@
; switch to CGB Normal Speed Mode if playing on CGB and current mode is Double Speed Mode
SwitchToCGBNormalSpeed: ; 7db (0:7db)
SwitchToCGBNormalSpeed:: ; 7db (0::7db)
call CheckForCGB
ret c
ld hl, rKEY1
@@ -8,7 +8,7 @@ SwitchToCGBNormalSpeed: ; 7db (0:7db)
jr CGBSpeedSwitch
; switch to CGB Double Speed Mode if playing on CGB and current mode is Normal Speed Mode
SwitchToCGBDoubleSpeed:
SwitchToCGBDoubleSpeed::
call CheckForCGB
ret c
ld hl, rKEY1
@@ -17,7 +17,7 @@ SwitchToCGBDoubleSpeed:
; fallthrough
; switch between CGB Double Speed Mode and Normal Speed Mode
CGBSpeedSwitch:
CGBSpeedSwitch::
ldh a, [rIE]
push af
xor a
+120 -120
View File
@@ -1,6 +1,6 @@
; save duel state to SRAM
; called between each two-player turn, just after player draws card (ROM bank 1 loaded)
SaveDuelStateToSRAM:
SaveDuelStateToSRAM::
ld a, $2
call BankswitchSRAM
; save duel data to sCurrentDuel
@@ -12,7 +12,7 @@ SaveDuelStateToSRAM:
ld a, [hl]
inc [hl]
call DisableSRAM
; select hl = SRAM3:(a000 + $400 * [s0a008] & $3)
; select hl = SRAM3::(a000 + $400 * [s0a008] & $3)
; save wDuelTurns, non-turn holder's arena card ID, turn holder's arena card ID
and $3
add HIGH($a000) / 4
@@ -44,7 +44,7 @@ SaveDuelStateToSRAM:
ld [hli], a
ld a, [wTempTurnDuelistCardID]
ld [hli], a
; save duel data to SRAM3:(a000 + $400 * [s0a008] & $3) + $0010
; save duel data to SRAM3::(a000 + $400 * [s0a008] & $3) + $0010
pop hl
ld de, $0010
add hl, de
@@ -57,7 +57,7 @@ SaveDuelStateToSRAM:
ret
; copies the deck pointed to by de to wPlayerDeck or wOpponentDeck (depending on whose turn it is)
CopyDeckData:
CopyDeckData::
ld hl, wPlayerDeck
ldh a, [hWhoseTurn]
cp PLAYER_TURN
@@ -104,7 +104,7 @@ CopyDeckData:
ret
; return, in register a, the amount of prizes that the turn holder has not yet drawn
CountPrizes:
CountPrizes::
push hl
ld a, DUELVARS_PRIZES
call GetTurnDuelistVariable
@@ -121,7 +121,7 @@ CountPrizes:
; shuffles the turn holder's deck
; if less than 60 cards remain in the deck, it makes sure that the rest are ignored
ShuffleDeck:
ShuffleDeck::
ldh a, [hWhoseTurn]
ld h, a
ld d, a
@@ -139,7 +139,7 @@ ShuffleDeck:
; draw a card from the turn holder's deck, saving its location as CARD_LOCATION_JUST_DRAWN.
; returns carry if deck is empty, nc if a card was successfully drawn.
; AddCardToHand is meant to be called next (unless this function returned carry).
DrawCardFromDeck:
DrawCardFromDeck::
push hl
ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
call GetTurnDuelistVariable
@@ -162,7 +162,7 @@ DrawCardFromDeck:
; add a card to the top of the turn holder's deck
; the card is identified by register a, which contains the deck index (0-59) of the card
ReturnCardToDeck:
ReturnCardToDeck::
push hl
push af
ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
@@ -182,7 +182,7 @@ ReturnCardToDeck:
; search a card in the turn holder's deck, extract it, and set its location to
; CARD_LOCATION_JUST_DRAWN. AddCardToHand is meant to be called next.
; the card is identified by register a, which contains the deck index (0-59) of the card.
SearchCardInDeckAndAddToHand:
SearchCardInDeckAndAddToHand::
push af
push hl
push de
@@ -218,7 +218,7 @@ SearchCardInDeckAndAddToHand:
; adds a card to the turn holder's hand and increments the number of cards in the hand
; the card is identified by register a, which contains the deck index (0-59) of the card
AddCardToHand:
AddCardToHand::
push af
push hl
push de
@@ -243,7 +243,7 @@ AddCardToHand:
; removes a card from the turn holder's hand and decrements the number of cards in the hand
; the card is identified by register a, which contains the deck index (0-59) of the card
RemoveCardFromHand:
RemoveCardFromHand::
push af
push hl
push bc
@@ -281,7 +281,7 @@ RemoveCardFromHand:
; moves a card to the turn holder's discard pile, as long as it is in the hand
; the card is identified by register a, which contains the deck index (0-59) of the card
MoveHandCardToDiscardPile:
MoveHandCardToDiscardPile::
call GetTurnDuelistVariable
ld a, [hl]
and $ff ^ CARD_LOCATION_JUST_DRAWN
@@ -292,7 +292,7 @@ MoveHandCardToDiscardPile:
; fallthrough
; puts the turn holder's card with the deck index (0-59) given in a into the discard pile
PutCardInDiscardPile:
PutCardInDiscardPile::
push af
push hl
push de
@@ -313,7 +313,7 @@ PutCardInDiscardPile:
; search a card in the turn holder's discard pile, extract it, and set its location to
; CARD_LOCATION_JUST_DRAWN. AddCardToHand is meant to be called next.
; the card is identified by register a, which contains the deck index (0-59) of the card
MoveDiscardPileCardToHand:
MoveDiscardPileCardToHand::
push hl
push de
push bc
@@ -346,8 +346,8 @@ MoveDiscardPileCardToHand:
ret
; return in the z flag whether turn holder's prize a (0-7) has been drawn or not
; z: drawn, nz: not drawn
CheckPrizeTaken:
; z:: drawn, nz:: not drawn
CheckPrizeTaken::
ld e, a
ld d, 0
ld hl, PowersOf2
@@ -361,12 +361,12 @@ CheckPrizeTaken:
and e
ret
PowersOf2:
PowersOf2::
db $01, $02, $04, $08, $10, $20, $40, $80
; fill wDuelTempList with the turn holder's discard pile cards (their 0-59 deck indexes)
; return carry if the turn holder has no cards in the discard pile
CreateDiscardPileCardList:
CreateDiscardPileCardList::
ldh a, [hWhoseTurn]
ld h, a
ld l, DUELVARS_NUMBER_OF_CARDS_IN_DISCARD_PILE
@@ -395,7 +395,7 @@ CreateDiscardPileCardList:
; fill wDuelTempList with the turn holder's remaining deck cards (their 0-59 deck indexes)
; return carry if the turn holder has no cards left in the deck
CreateDeckCardList:
CreateDeckCardList::
ld a, DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK
call GetTurnDuelistVariable
cp DECK_SIZE
@@ -430,10 +430,10 @@ CreateDeckCardList:
; fill wDuelTempList with the turn holder's energy cards
; in the arena or in a bench slot (their 0-59 deck indexes).
; if a == 0: search in CARD_LOCATION_ARENA
; if a != 0: search in CARD_LOCATION_BENCH_[A]
; if a == 0:: search in CARD_LOCATION_ARENA
; if a != 0:: search in CARD_LOCATION_BENCH_[A]
; return carry if no energy cards were found
CreateArenaOrBenchEnergyCardList:
CreateArenaOrBenchEnergyCardList::
or CARD_LOCATION_PLAY_AREA
ld c, a
ld de, wDuelTempList
@@ -471,7 +471,7 @@ CreateArenaOrBenchEnergyCardList:
; fill wDuelTempList with the turn holder's hand cards (their 0-59 deck indexes)
; return carry if the turn holder has no cards in hand
; and outputs in a number of cards.
CreateHandCardList:
CreateHandCardList::
call FindLastCardInHand
inc b
jr .skip_card
@@ -500,7 +500,7 @@ CreateHandCardList:
; sort the turn holder's hand cards by ID (highest to lowest ID)
; makes use of wDuelTempList
SortHandCardsByID:
SortHandCardsByID::
call FindLastCardInHand
.loop
ld a, [hld]
@@ -520,11 +520,11 @@ SortHandCardsByID:
jr nz, .loop2
ret
; returns:
; returns::
; b = turn holder's number of cards in hand (DUELVARS_NUMBER_OF_CARDS_IN_HAND)
; hl = pointer to turn holder's last (newest) card in DUELVARS_HAND
; de = wDuelTempList
FindLastCardInHand:
FindLastCardInHand::
ldh a, [hWhoseTurn]
ld h, a
ld l, DUELVARS_NUMBER_OF_CARDS_IN_HAND
@@ -536,10 +536,10 @@ FindLastCardInHand:
ret
; shuffles the deck by swapping the position of each card with the position of another random card
; input:
; input::
; a = how many cards to shuffle
; hl = DUELVARS_DECK_CARDS + [DUELVARS_NUMBER_OF_CARDS_NOT_IN_DECK]
ShuffleCards:
ShuffleCards::
or a
ret z ; return if deck is empty
push hl
@@ -576,7 +576,7 @@ ShuffleCards:
; sort a $ff-terminated list of deck index cards by ID (lowest to highest ID).
; the list is wDuelTempList.
SortCardsInDuelTempListByID:
SortCardsInDuelTempListByID::
ld hl, hTempListPtr_ff99
ld [hl], LOW(wDuelTempList)
inc hl
@@ -587,7 +587,7 @@ SortCardsInDuelTempListByID:
; the pointer to the list is given in hTempListPtr_ff99.
; sorting by ID rather than deck index means that the order of equal (same ID) cards does not matter,
; even if they have a different deck index.
SortCardsInListByID:
SortCardsInListByID::
; load [hTempListPtr_ff99] into hl and de
ld hl, hTempListPtr_ff99
ld a, [hli]
@@ -648,7 +648,7 @@ SortCardsInListByID:
inc [hl]
; fallthrough
SortCardsInListByID_CheckForListTerminator:
SortCardsInListByID_CheckForListTerminator::
ld hl, hTempListPtr_ff99
ld a, [hli]
ld h, [hl]
@@ -659,7 +659,7 @@ SortCardsInListByID_CheckForListTerminator:
; returns, in register bc, the id of the card with the deck index specified in register a
; preserves hl
GetCardIDFromDeckIndex_bc:
GetCardIDFromDeckIndex_bc::
push hl
call _GetCardIDFromDeckIndex
ld c, a
@@ -668,7 +668,7 @@ GetCardIDFromDeckIndex_bc:
ret
; return [wDuelTempList + a] in a and in hTempCardIndex_ff98
GetCardInDuelTempList_OnlyDeckIndex:
GetCardInDuelTempList_OnlyDeckIndex::
push hl
push de
ld e, a
@@ -681,10 +681,10 @@ GetCardInDuelTempList_OnlyDeckIndex:
pop hl
ret
; given the deck index (0-59) of a card in [wDuelTempList + a], return:
; given the deck index (0-59) of a card in [wDuelTempList + a], return::
; - the id of the card with that deck index in register de
; - [wDuelTempList + a] in hTempCardIndex_ff98 and in register a
GetCardInDuelTempList:
GetCardInDuelTempList::
push hl
ld e, a
ld d, $0
@@ -699,7 +699,7 @@ GetCardInDuelTempList:
; returns, in register de, the id of the card with the deck index (0-59) specified by register a
; preserves af and hl
GetCardIDFromDeckIndex:
GetCardIDFromDeckIndex::
push af
push hl
call _GetCardIDFromDeckIndex
@@ -711,7 +711,7 @@ GetCardIDFromDeckIndex:
; remove card c from wDuelTempList (it contains a $ff-terminated list of deck indexes)
; returns carry if no matches were found.
RemoveCardFromDuelTempList:
RemoveCardFromDuelTempList::
push hl
push de
push bc
@@ -744,7 +744,7 @@ RemoveCardFromDuelTempList:
ret
; return the number of cards in wDuelTempList in a
CountCardsInDuelTempList:
CountCardsInDuelTempList::
push hl
push bc
ld hl, wDuelTempList
@@ -760,7 +760,7 @@ CountCardsInDuelTempList:
ret
; returns, in register a, the id of the card with the deck index (0-59) specified in register a
_GetCardIDFromDeckIndex:
_GetCardIDFromDeckIndex::
push de
ld e, a
ld d, $0
@@ -776,7 +776,7 @@ _GetCardIDFromDeckIndex:
ret
; load data of card with deck index a (0-59) to wLoadedCard1
LoadCardDataToBuffer1_FromDeckIndex:
LoadCardDataToBuffer1_FromDeckIndex::
push hl
push de
push bc
@@ -793,7 +793,7 @@ LoadCardDataToBuffer1_FromDeckIndex:
ret
; load data of card with deck index a (0-59) to wLoadedCard2
LoadCardDataToBuffer2_FromDeckIndex:
LoadCardDataToBuffer2_FromDeckIndex::
push hl
push de
push bc
@@ -812,7 +812,7 @@ LoadCardDataToBuffer2_FromDeckIndex:
; evolve a turn holder's Pokemon card in the play area slot determined by hTempPlayAreaLocation_ff9d
; into another turn holder's Pokemon card identifier by its deck index (0-59) in hTempCardIndex_ff98.
; return nc if evolution was successful.
EvolvePokemonCardIfPossible:
EvolvePokemonCardIfPossible::
; first make sure the attempted evolution is viable
ldh a, [hTempCardIndex_ff98]
ld d, a
@@ -824,7 +824,7 @@ EvolvePokemonCardIfPossible:
; evolve a turn holder's Pokemon card in the play area slot determined by hTempPlayAreaLocation_ff9d
; into another turn holder's Pokemon card identifier by its deck index (0-59) in hTempCardIndex_ff98.
EvolvePokemonCard:
EvolvePokemonCard::
; place the evolved Pokemon card in the play area location of the pre-evolved Pokemon card
ldh a, [hTempPlayAreaLocation_ff9d]
ld e, a
@@ -877,7 +877,7 @@ EvolvePokemonCard:
; e is the play area location offset (PLAY_AREA_*) of the Pokemon trying to evolve.
; d is the deck index (0-59) of the Pokemon card that was selected to be the evolution target.
; return carry if can't evolve, plus nz if the reason for it is the card was played this turn.
CheckIfCanEvolveInto:
CheckIfCanEvolveInto::
push de
ld a, e
add DUELVARS_ARENA_CARD
@@ -920,7 +920,7 @@ CheckIfCanEvolveInto:
; e is the play area location offset (PLAY_AREA_*) of the Pokemon trying to evolve.
; d is the deck index (0-59) of the Pokemon card that was selected to be the evolution target.
; return carry if not basic to stage 2 evolution, or if evolution not possible this turn.
CheckIfCanEvolveInto_BasicToStage2:
CheckIfCanEvolveInto_BasicToStage2::
ld a, e
add DUELVARS_ARENA_CARD_FLAGS
call GetTurnDuelistVariable
@@ -960,7 +960,7 @@ CheckIfCanEvolveInto_BasicToStage2:
; clear the status, all substatuses, and temporary duelvars of the turn holder's
; arena Pokemon. called when sending a new Pokemon into the arena.
; does not reset Headache, since it targets a player rather than a Pokemon.
ClearAllStatusConditions:
ClearAllStatusConditions::
push hl
ldh a, [hWhoseTurn]
ld h, a
@@ -991,10 +991,10 @@ ClearAllStatusConditions:
; Removes a Pokemon card from the hand and places it in the arena or first available bench slot.
; If the Pokemon is placed in the arena, the status conditions of the player's arena card are zeroed.
; input:
; input::
; a = deck index of the card
; return carry if there is no room for more Pokemon
PutHandPokemonCardInPlayArea:
PutHandPokemonCardInPlayArea::
push af
ld a, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
call GetTurnDuelistVariable
@@ -1051,12 +1051,12 @@ PutHandPokemonCardInPlayArea:
; Removes a card from the hand and changes its location to arena or bench. Given that
; DUELVARS_ARENA_CARD or DUELVARS_BENCH aren't affected, this function is meant for energy and trainer cards.
; input:
; input::
; a = deck index of the card
; e = play area location offset (PLAY_AREA_*)
; returns:
; returns::
; a = CARD_LOCATION_PLAY_AREA + e
PutHandCardInPlayArea:
PutHandCardInPlayArea::
call RemoveCardFromHand
call GetTurnDuelistVariable
ld a, e
@@ -1066,7 +1066,7 @@ PutHandCardInPlayArea:
; move the Pokemon card of the turn holder in the
; PLAY_AREA_* location given in e to the discard pile
MovePlayAreaCardToDiscardPile:
MovePlayAreaCardToDiscardPile::
call EmptyPlayAreaSlot
ld l, DUELVARS_NUMBER_OF_POKEMON_IN_PLAY_AREA
dec [hl]
@@ -1089,7 +1089,7 @@ MovePlayAreaCardToDiscardPile:
; init a turn holder's play area slot to empty
; which slot (arena or benchx) is determined by the play area location offset (PLAY_AREA_*) in e
EmptyPlayAreaSlot:
EmptyPlayAreaSlot::
ldh a, [hWhoseTurn]
ld h, a
ld d, -1
@@ -1112,7 +1112,7 @@ EmptyPlayAreaSlot:
ret
; shift play area Pokemon of both players to the first available play area (arena + benchx) slots
ShiftAllPokemonToFirstPlayAreaSlots:
ShiftAllPokemonToFirstPlayAreaSlots::
call ShiftTurnPokemonToFirstPlayAreaSlots
call SwapTurn
call ShiftTurnPokemonToFirstPlayAreaSlots
@@ -1120,7 +1120,7 @@ ShiftAllPokemonToFirstPlayAreaSlots:
ret
; shift play area Pokemon of the turn holder to the first available play area (arena + benchx) slots
ShiftTurnPokemonToFirstPlayAreaSlots:
ShiftTurnPokemonToFirstPlayAreaSlots::
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
lb de, PLAY_AREA_ARENA, PLAY_AREA_ARENA
@@ -1141,7 +1141,7 @@ ShiftTurnPokemonToFirstPlayAreaSlots:
; data of the turn holder's Pokemon card in play area e.
; reset the status and all substatuses of the arena Pokemon before swapping.
; e is the play area location offset of the bench Pokemon (PLAY_AREA_*).
SwapArenaWithBenchPokemon:
SwapArenaWithBenchPokemon::
call ClearAllStatusConditions
ld d, PLAY_AREA_ARENA
; fallthrough
@@ -1149,7 +1149,7 @@ SwapArenaWithBenchPokemon:
; swap the data of the turn holder's Pokemon card in play area d with the
; data of the turn holder's Pokemon card in play area e.
; d and e are play area location offsets (PLAY_AREA_*).
SwapPlayAreaPokemon:
SwapPlayAreaPokemon::
push bc
push de
push hl
@@ -1217,9 +1217,9 @@ SwapPlayAreaPokemon:
; Find which and how many energy cards are attached to the turn holder's Pokemon card in the arena,
; or a Pokemon card in the bench, depending on the value of register e.
; input: e = location to check, i.e. PLAY_AREA_*
; input:: e = location to check, i.e. PLAY_AREA_*
; Feedback is returned in wAttachedEnergies and wTotalAttachedEnergies.
GetPlayAreaCardAttachedEnergies:
GetPlayAreaCardAttachedEnergies::
push hl
push de
push bc
@@ -1288,7 +1288,7 @@ GetPlayAreaCardAttachedEnergies:
; e = card id to search
; b = location to consider (CARD_LOCATION_*)
; h = PLAYER_TURN or OPPONENT_TURN
CountCardIDInLocation:
CountCardIDInLocation::
push bc
ld l, DUELVARS_CARD_LOCATIONS
ld c, $0
@@ -1314,7 +1314,7 @@ CountCardIDInLocation:
; returns [[hWhoseTurn] << 8 + a] in a and in [hl]
; i.e. duelvar a of the player whose turn it is
GetTurnDuelistVariable:
GetTurnDuelistVariable::
ld l, a
ldh a, [hWhoseTurn]
ld h, a
@@ -1323,7 +1323,7 @@ GetTurnDuelistVariable:
; returns [([hWhoseTurn] ^ $1) << 8 + a] in a and in [hl]
; i.e. duelvar a of the player whose turn it is not
GetNonTurnDuelistVariable:
GetNonTurnDuelistVariable::
ld l, a
ldh a, [hWhoseTurn]
ld h, OPPONENT_TURN
@@ -1337,7 +1337,7 @@ GetNonTurnDuelistVariable:
; when playing a Pokemon card, initializes some variables according to the
; card played, and checks if the played card has Pokemon Power to show it to
; the player, and possibly to use it if it triggers when the card is played.
Func_161e:
Func_161e::
ldh a, [hTempCardIndex_ff98]
call ClearChangedTypesIfMuk
ldh a, [hTempCardIndex_ff98]
@@ -1408,12 +1408,12 @@ Func_161e:
call TryExecuteEffectCommandFunction
ret
; copies, given a card identified by register a (card ID):
; copies, given a card identified by register a (card ID)::
; - e into wSelectedAttack and d into hTempCardIndex_ff9f
; - Attack1 (if e == 0) or Attack2 (if e == 1) data into wLoadedAttack
; - Also from that attack, its Damage field into wDamage
; finally, clears wNoDamageOrEffect and wDealtDamage
CopyAttackDataAndDamage_FromCardID:
CopyAttackDataAndDamage_FromCardID::
push de
push af
ld a, e
@@ -1427,12 +1427,12 @@ CopyAttackDataAndDamage_FromCardID:
pop de
jr CopyAttackDataAndDamage
; copies, given a card identified by register d (0-59 deck index):
; copies, given a card identified by register d (0-59 deck index)::
; - e into wSelectedAttack and d into hTempCardIndex_ff9f
; - Attack1 (if e == 0) or Attack2 (if e == 1) data into wLoadedAttack
; - Also from that attack, its Damage field into wDamage
; finally, clears wNoDamageOrEffect and wDealtDamage
CopyAttackDataAndDamage_FromDeckIndex:
CopyAttackDataAndDamage_FromDeckIndex::
ld a, e
ld [wSelectedAttack], a
ld a, d
@@ -1440,7 +1440,7 @@ CopyAttackDataAndDamage_FromDeckIndex:
call LoadCardDataToBuffer1_FromDeckIndex
; fallthrough
CopyAttackDataAndDamage:
CopyAttackDataAndDamage::
ld a, [wLoadedCard1ID]
ld [wTempCardID_ccc2], a
ld hl, wLoadedCard1Atk1
@@ -1471,7 +1471,7 @@ CopyAttackDataAndDamage:
; wTempNonTurnDuelistCardID to the non-turn holder's arena card, and zeroes other temp
; variables that only last between each two-player turn.
; this is called when a Pokemon card is played or when an attack is used
Func_16f6:
Func_16f6::
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
ldh [hTempCardIndex_ff9f], a
@@ -1497,7 +1497,7 @@ Func_16f6:
ret
; Use an attack (from DuelMenu_Attack) or a Pokemon Power (from DuelMenu_PkmnPower)
UseAttackOrPokemonPower:
UseAttackOrPokemonPower::
ld a, [wSelectedAttack]
ld [wPlayerAttackingAttackIndex], a
ldh a, [hTempCardIndex_ff9f]
@@ -1541,7 +1541,7 @@ UseAttackOrPokemonPower:
call SetOppAction_SerialSendDuelData
; fallthrough
PlayAttackAnimation_DealAttackDamage:
PlayAttackAnimation_DealAttackDamage::
call Func_7415
ld a, [wLoadedAttackCategory]
and RESIDUAL
@@ -1583,7 +1583,7 @@ PlayAttackAnimation_DealAttackDamage:
call PrintKnockedOutIfHLZero
jr Func_17fb
Func_17ed:
Func_17ed::
call DrawWideTextBox_WaitForInput
xor a
ld hl, wDamage
@@ -1593,7 +1593,7 @@ Func_17ed:
ld [wNoDamageOrEffect], a
; fallthrough
Func_17fb:
Func_17fb::
ld a, [wTempNonTurnDuelistCardID]
push af
ld a, EFFECTCMDTYPE_AFTER_DAMAGE
@@ -1608,28 +1608,28 @@ Func_17fb:
or a
ret
DisplayUsePokemonPowerScreen_WaitForInput:
DisplayUsePokemonPowerScreen_WaitForInput::
push hl
call DisplayUsePokemonPowerScreen
pop hl
; fallthrough
DrawWideTextBox_WaitForInput_ReturnCarry:
DrawWideTextBox_WaitForInput_ReturnCarry::
call DrawWideTextBox_WaitForInput
; fallthrough
ReturnCarry:
ReturnCarry::
scf
ret
ClearNonTurnTemporaryDuelvars_ResetCarry:
ClearNonTurnTemporaryDuelvars_ResetCarry::
bank1call ClearNonTurnTemporaryDuelvars
or a
ret
; called when attacker deals damage to itself due to confusion
; display the corresponding animation and deal 20 damage to self
HandleConfusionDamageToSelf:
HandleConfusionDamageToSelf::
bank1call DrawDuelMainScene
ld a, 1
ld [wIsDamageToSelf], a
@@ -1646,7 +1646,7 @@ HandleConfusionDamageToSelf:
ret
; use Pokemon Power
UsePokemonPower:
UsePokemonPower::
call Func_7415
ld a, EFFECTCMDTYPE_INITIAL_EFFECT_2
call TryExecuteEffectCommandFunction
@@ -1668,7 +1668,7 @@ UsePokemonPower:
; called by UseAttackOrPokemonPower (on an attack only)
; in a link duel, it's used to send the other game data about the
; attack being in use, triggering a call to OppAction_BeginUseAttack in the receiver
SendAttackDataToLinkOpponent:
SendAttackDataToLinkOpponent::
ld a, [wccec]
or a
ret nz
@@ -1691,7 +1691,7 @@ SendAttackDataToLinkOpponent:
ldh [hTemp_ffa0], a
ret
Func_189d:
Func_189d::
ld a, [wLoadedAttackCategory]
bit RESIDUAL_F, a
ret nz
@@ -1725,7 +1725,7 @@ Func_189d:
ret
; return carry and 1 into wGotHeadsFromConfusionCheck if damage will be dealt to oneself due to confusion
CheckSelfConfusionDamage:
CheckSelfConfusionDamage::
xor a
ld [wGotHeadsFromConfusionCheck], a
ld a, DUELVARS_ARENA_CARD_STATUS
@@ -1750,7 +1750,7 @@ CheckSelfConfusionDamage:
; play the trainer card with deck index at hTempCardIndex_ff98.
; a trainer card is like an attack effect, with its own effect commands.
; return nc if the card was played, carry if it wasn't.
PlayTrainerCard:
PlayTrainerCard::
call CheckCantUseTrainerDueToHeadache
jr c, .cant_use
ldh a, [hWhoseTurn]
@@ -1790,7 +1790,7 @@ PlayTrainerCard:
; loads the effect commands of a (trainer or energy) card with deck index (0-59) at hTempCardIndex_ff9f
; into wLoadedAttackEffectCommands. in practice, only used for trainer cards
LoadNonPokemonCardEffectCommands:
LoadNonPokemonCardEffectCommands::
ldh a, [hTempCardIndex_ff9f]
call LoadCardDataToBuffer1_FromDeckIndex
ld hl, wLoadedCard1EffectCommands
@@ -1804,7 +1804,7 @@ LoadNonPokemonCardEffectCommands:
; Make turn holder deal A damage to self due to recoil (e.g. Thrash, Selfdestruct)
; display recoil animation
DealRecoilDamageToSelf:
DealRecoilDamageToSelf::
push af
ld a, ATK_ANIM_RECOIL_HIT
ld [wLoadedAttackAnimation], a
@@ -1813,7 +1813,7 @@ DealRecoilDamageToSelf:
; Make turn holder deal A damage to self due to confusion
; display animation at wLoadedAttackAnimation
DealConfusionDamageToSelf:
DealConfusionDamageToSelf::
ld hl, wDamage
ld [hli], a
ld [hl], 0
@@ -1840,12 +1840,12 @@ DealConfusionDamageToSelf:
ld [wNoDamageOrEffect], a
ret
; given a damage value at wDamage:
; - if the non-turn holder's arena card is weak to the turn holder's arena card color: double damage
; - if the non-turn holder's arena card resists the turn holder's arena card color: reduce damage by 30
; given a damage value at wDamage::
; - if the non-turn holder's arena card is weak to the turn holder's arena card color:: double damage
; - if the non-turn holder's arena card resists the turn holder's arena card color:: reduce damage by 30
; - also apply Pluspower, Defender, and other kinds of damage reduction accordingly
; return resulting damage in de
ApplyDamageModifiers_DamageToTarget:
ApplyDamageModifiers_DamageToTarget::
xor a
ld [wDamageEffectiveness], a
ld hl, wDamage
@@ -1912,7 +1912,7 @@ ApplyDamageModifiers_DamageToTarget:
ret
; convert a color to its equivalent WR_* (weakness/resistance) value
TranslateColorToWR:
TranslateColorToWR::
push hl
add LOW(InvertedPowersOf2)
ld l, a
@@ -1923,14 +1923,14 @@ TranslateColorToWR:
pop hl
ret
InvertedPowersOf2:
InvertedPowersOf2::
db $80, $40, $20, $10, $08, $04, $02, $01
; given a damage value at wDamage:
; - if the turn holder's arena card is weak to its own color: double damage
; - if the turn holder's arena card resists its own color: reduce damage by 30
; given a damage value at wDamage::
; - if the turn holder's arena card is weak to its own color:: double damage
; - if the turn holder's arena card resists its own color:: reduce damage by 30
; return resulting damage in de
ApplyDamageModifiers_DamageToSelf:
ApplyDamageModifiers_DamageToSelf::
xor a
ld [wDamageEffectiveness], a
ld hl, wDamage
@@ -1973,7 +1973,7 @@ ApplyDamageModifiers_DamageToSelf:
ret
; increases de by 10 points for each Pluspower found in location b
ApplyAttachedPluspower:
ApplyAttachedPluspower::
push de
call GetTurnDuelistVariable
ld de, PLUSPOWER
@@ -1988,7 +1988,7 @@ ApplyAttachedPluspower:
ret
; reduces de by 20 points for each Defender found in location b
ApplyAttachedDefender:
ApplyAttachedDefender::
push de
call GetTurnDuelistVariable
ld de, DEFENDER
@@ -2005,10 +2005,10 @@ ApplyAttachedDefender:
ld d, a
ret
; hl: address to subtract HP from
; de: how much HP to subtract (damage to deal)
; hl:: address to subtract HP from
; de:: how much HP to subtract (damage to deal)
; returns carry if the HP does not become 0 as a result
SubtractHP:
SubtractHP::
push hl
push de
ld a, [hl]
@@ -2031,7 +2031,7 @@ SubtractHP:
; given a play area location offset in a, check if the turn holder's Pokemon card in
; that location has no HP left, and, if so, print that it was knocked out.
PrintPlayAreaCardKnockedOutIfNoHP:
PrintPlayAreaCardKnockedOutIfNoHP::
ld e, a
add DUELVARS_ARENA_CARD_HP
call GetTurnDuelistVariable
@@ -2051,7 +2051,7 @@ PrintPlayAreaCardKnockedOutIfNoHP:
scf
ret
PrintKnockedOutIfHLZero:
PrintKnockedOutIfHLZero::
ld a, [hl] ; this is supposed to point to a remaining HP value after some form of damage calculation
or a
ret nz
@@ -2059,7 +2059,7 @@ PrintKnockedOutIfHLZero:
; print in a text box that the Pokemon card at wTempNonTurnDuelistCardID
; was knocked out and wait 40 frames
PrintKnockedOut:
PrintKnockedOut::
ld a, [wTempNonTurnDuelistCardID]
ld e, a
call LoadCardDataToBuffer1_FromCardID
@@ -2082,7 +2082,7 @@ PrintKnockedOut:
; damage to deal is given in de.
; shows the defending player's play area screen when dealing the damage
; instead of the main duel interface with regular attack animation.
DealDamageToPlayAreaPokemon_RegularAnim:
DealDamageToPlayAreaPokemon_RegularAnim::
ld a, ATK_ANIM_BENCH_HIT
ld [wLoadedAttackAnimation], a
; fallthrough
@@ -2092,7 +2092,7 @@ DealDamageToPlayAreaPokemon_RegularAnim:
; shows the defending player's play area screen when dealing the damage
; instead of the main duel interface.
; plays animation that is loaded in wLoadedAttackAnimation.
DealDamageToPlayAreaPokemon:
DealDamageToPlayAreaPokemon::
ld a, b
ld [wTempPlayAreaLocation_cceb], a
or a ; cp PLAY_AREA_ARENA
@@ -2184,14 +2184,14 @@ DealDamageToPlayAreaPokemon:
; draw duel main scene, then print the "<Pokemon Lvxx>'s <attack>" text
; The Pokemon's name is the turn holder's arena Pokemon, and the
; attack's name is taken from wLoadedAttackName.
DrawDuelMainScene_PrintPokemonsAttackText:
DrawDuelMainScene_PrintPokemonsAttackText::
bank1call DrawDuelMainScene
; fallthrough
; print the "<Pokemon Lvxx>'s <attack>" text
; The Pokemon's name is the turn holder's arena Pokemon, and the
; attack's name is taken from wLoadedAttackName.
PrintPokemonsAttackText:
PrintPokemonsAttackText::
ld a, DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
call LoadCardDataToBuffer1_FromDeckIndex
@@ -2211,7 +2211,7 @@ PrintPokemonsAttackText:
call DrawWideTextBox_PrintText
ret
Func_1bb4:
Func_1bb4::
call Func_3b31
bank1call DrawDuelMainScene
call DrawDuelHUDs
@@ -2224,7 +2224,7 @@ Func_1bb4:
; prints one of the ThereWasNoEffectFrom*Text if wEffectFailed contains EFFECT_FAILED_NO_EFFECT,
; and prints WasUnsuccessfulText if wEffectFailed contains EFFECT_FAILED_UNSUCCESSFUL
Func_1bca:
Func_1bca::
ld a, [wEffectFailed]
or a
ret z
@@ -2259,7 +2259,7 @@ Func_1bca:
; return in a the retreat cost of the turn holder's arena or bench Pokemon
; given the PLAY_AREA_* value in hTempPlayAreaLocation_ff9d
GetPlayAreaCardRetreatCost:
GetPlayAreaCardRetreatCost::
ldh a, [hTempPlayAreaLocation_ff9d]
add DUELVARS_ARENA_CARD
call GetTurnDuelistVariable
@@ -2269,7 +2269,7 @@ GetPlayAreaCardRetreatCost:
; move the turn holder's card with ID at de to the discard pile
; if it's currently in the arena.
MoveCardToDiscardPileIfInArena:
MoveCardToDiscardPileIfInArena::
ld c, e
ld b, d
ld l, DUELVARS_CARD_LOCATIONS
@@ -2297,12 +2297,12 @@ MoveCardToDiscardPileIfInArena:
ret
; calculate damage and max HP of card at PLAY_AREA_* in e.
; input:
; input::
; e = PLAY_AREA_* of card;
; output:
; output::
; a = damage;
; c = max HP.
GetCardDamageAndMaxHP:
GetCardDamageAndMaxHP::
push hl
push de
ld a, DUELVARS_ARENA_CARD
@@ -2322,12 +2322,12 @@ GetCardDamageAndMaxHP:
ret
; check if a flag of wLoadedAttack is set
; input:
; input::
; a = %fffffbbb, where
; fffff = flag address counting from wLoadedAttackFlag1
; bbb = flag bit
; return carry if the flag is set
CheckLoadedAttackFlag:
CheckLoadedAttackFlag::
push hl
push de
push bc
@@ -2360,7 +2360,7 @@ CheckLoadedAttackFlag:
; As a side effect, this also returns a duelist variable in a similar manner to
; GetNonTurnDuelistVariable, but this function appears to be
; only called to swap the turn value.
SwapTurn:
SwapTurn::
push af
push hl
call GetNonTurnDuelistVariable
@@ -2371,7 +2371,7 @@ SwapTurn:
ret
; copy the TX_END-terminated player's name from sPlayerName to de
CopyPlayerName:
CopyPlayerName::
call EnableSRAM
ld hl, sPlayerName
.loop
@@ -2388,7 +2388,7 @@ CopyPlayerName:
; if text ID at wOpponentName is non-0, copy it from there
; else, if text at wc500 is non-0, copy if from there
; else, copy Player2Text
CopyOpponentName:
CopyOpponentName::
ld hl, wOpponentName
ld a, [hli]
or [hl]
+9 -9
View File
@@ -1,4 +1,4 @@
OpenDuelCheckMenu:
OpenDuelCheckMenu::
ldh a, [hBankROM]
push af
ld a, BANK(_OpenDuelCheckMenu)
@@ -8,7 +8,7 @@ OpenDuelCheckMenu:
call BankswitchROM
ret
OpenInPlayAreaScreen_FromSelectButton:
OpenInPlayAreaScreen_FromSelectButton::
ldh a, [hBankROM]
push af
ld a, BANK(OpenInPlayAreaScreen)
@@ -23,11 +23,11 @@ OpenInPlayAreaScreen_FromSelectButton:
; loads tiles and icons to display Your Play Area / Opp. Play Area screen,
; and draws the screen according to the turn player
; input: h -> [wCheckMenuPlayAreaWhichDuelist] and l -> [wCheckMenuPlayAreaWhichLayout]
; input:: h -> [wCheckMenuPlayAreaWhichDuelist] and l -> [wCheckMenuPlayAreaWhichLayout]
; similar to DrawYourOrOppPlayArea (bank 2) except it also draws a wide text box.
; this is because bank 2's DrawYourOrOppPlayArea is supposed to come from the Check Menu,
; so the text box is always already there.
DrawYourOrOppPlayAreaScreen_Bank0:
DrawYourOrOppPlayAreaScreen_Bank0::
ld a, h
ld [wCheckMenuPlayAreaWhichDuelist], a
ld a, l
@@ -42,7 +42,7 @@ DrawYourOrOppPlayAreaScreen_Bank0:
call BankswitchROM
ret
DrawPlayersPrizeAndBenchCards:
DrawPlayersPrizeAndBenchCards::
ldh a, [hBankROM]
push af
ld a, BANK(_DrawPlayersPrizeAndBenchCards)
@@ -52,7 +52,7 @@ DrawPlayersPrizeAndBenchCards:
call BankswitchROM
ret
HandlePeekSelection:
HandlePeekSelection::
ldh a, [hBankROM]
push af
ld a, BANK(_HandlePeekSelection)
@@ -64,7 +64,7 @@ HandlePeekSelection:
ld a, b
ret
DrawAIPeekScreen:
DrawAIPeekScreen::
ld b, a
ldh a, [hBankROM]
push af
@@ -76,7 +76,7 @@ DrawAIPeekScreen:
ret
; a = number of prize cards for player to select to take
SelectPrizeCards:
SelectPrizeCards::
ld [wNumberOfPrizeCardsToSelect], a
ldh a, [hBankROM]
push af
@@ -87,7 +87,7 @@ SelectPrizeCards:
call BankswitchROM
ret
DrawPlayAreaToPlacePrizeCards:
DrawPlayAreaToPlacePrizeCards::
ldh a, [hBankROM]
push af
ld a, BANK(_DrawPlayAreaToPlacePrizeCards)
+5 -5
View File
@@ -1,9 +1,9 @@
; Checks if the command type at a is one of the commands of the attack or
; card effect currently in use, and executes its associated function if so.
; input:
; input::
; a = command type to check
; [wLoadedAttackEffectCommands] = pointer to list of commands of current attack or trainer card
TryExecuteEffectCommandFunction:
TryExecuteEffectCommandFunction::
push af
; grab pointer to command list from wLoadedAttackEffectCommands
ld hl, wLoadedAttackEffectCommands
@@ -18,7 +18,7 @@ TryExecuteEffectCommandFunction:
ret
.execute_function
; execute the function at [wEffectFunctionsBank]:hl
; execute the function at [wEffectFunctionsBank]::hl
ldh a, [hBankROM]
push af
ld a, [wEffectFunctionsBank]
@@ -34,11 +34,11 @@ TryExecuteEffectCommandFunction:
pop af
ret
; input:
; input::
; a = command type to check
; hl = list of commands of current attack or trainer card
; return nc if command type matching a is found, carry otherwise
CheckMatchingCommand:
CheckMatchingCommand::
ld c, a
ld a, l
or h
+3 -3
View File
@@ -1,5 +1,5 @@
; initialize the screen by emptying the tilemap. used during screen transitions
EmptyScreen:
EmptyScreen::
call DisableLCD
call FillTileMap
xor a
@@ -13,7 +13,7 @@ EmptyScreen:
call DisableLCD
ret
AttrBlkPacket_EmptyScreen:
AttrBlkPacket_EmptyScreen::
sgb ATTR_BLK, 1 ; sgb_command, length
db 1 ; number of data sets
; Control Code, Color Palette Designation, X1, Y1, X2, Y2
@@ -23,7 +23,7 @@ AttrBlkPacket_EmptyScreen:
; returns v*BGMap0 + BG_MAP_WIDTH * c + b in de.
; used to map coordinates at bc to a BGMap0 address.
BCCoordToBGMap0Address:
BCCoordToBGMap0Address::
ld l, c
ld h, $0
add hl, hl
+4 -4
View File
@@ -1,7 +1,7 @@
; RST18
; this function affects the stack so that it returns to the pointer following
; the rst call. similar to rst 28, except this always loads bank 1
Bank1Call:
Bank1Call::
push hl
push hl
push hl
@@ -30,7 +30,7 @@ Bank1Call:
ld a, $1
; fallthrough
Bank1Call_FarCall_Common:
Bank1Call_FarCall_Common::
call BankswitchROM
ld hl, sp+$d
inc de
@@ -44,7 +44,7 @@ Bank1Call_FarCall_Common:
ret
; switch to the ROM bank at sp+4
SwitchToBankAtSP: ; 9dc (0:9dc)
SwitchToBankAtSP:: ; 9dc (0::9dc)
push af
push hl
ld hl, sp+$04
@@ -59,7 +59,7 @@ SwitchToBankAtSP: ; 9dc (0:9dc)
; RST28
; this function affects the stack so that it returns
; to the three byte pointer following the rst call
FarCall:
FarCall::
push hl
push hl
push hl
+3 -3
View File
@@ -1,5 +1,5 @@
; calls DoFrame a times
DoAFrames:
DoAFrames::
.loop
push af
call DoFrame
@@ -10,7 +10,7 @@ DoAFrames:
; updates background, sprites and other game variables, halts until vblank, and reads user input
; if wDebugPauseAllowed is not 0, the game can be paused (and resumed) by pressing the SELECT button
DoFrame:
DoFrame::
push af
push hl
push de
@@ -42,7 +42,7 @@ DoFrame:
; handle D-pad repeat counter
; used to quickly scroll through menus when a relevant D-pad key is held
HandleDPadRepeat:
HandleDPadRepeat::
ldh a, [hKeysHeld]
ldh [hDPadHeld], a
and D_PAD
+2 -2
View File
@@ -1,5 +1,5 @@
; copy b bytes of data from hl to de, but only during hblank
HblankCopyDataHLtoDE:
HblankCopyDataHLtoDE::
push bc
.loop
ei
@@ -21,7 +21,7 @@ HblankCopyDataHLtoDE:
ret
; copy c bytes of data from de to hl, but only during hblank
HblankCopyDataDEtoHL:
HblankCopyDataDEtoHL::
push bc
.loop
ei
+5 -5
View File
@@ -1,6 +1,6 @@
; read joypad data to refresh hKeysHeld, hKeysPressed, and hKeysReleased
; the A + B + Start + Select combination resets the game
ReadJoypad:
ReadJoypad::
ld a, JOY_BTNS_SELECT
ldh [rJOYP], a
ldh a, [rJOYP]
@@ -36,16 +36,16 @@ ReadJoypad:
and BUTTONS
cp BUTTONS
jr nz, SaveButtonsHeld
; A + B + Start + Select: reset game
; A + B + Start + Select:: reset game
call ResetSerial
; fallthrough
Reset:
Reset::
ld a, [wInitialA]
di
jp Start
SaveButtonsHeld:
SaveButtonsHeld::
ld a, c
ldh [hKeysHeld], a
ld a, JOY_BTNS_SELECT | JOY_DPAD_SELECT
@@ -53,7 +53,7 @@ SaveButtonsHeld:
ret
; clear joypad hmem data
ClearJoypad:
ClearJoypad::
push hl
ld hl, hDPadRepeat
xor a
+4 -4
View File
@@ -1,19 +1,19 @@
; enable timer interrupt
EnableInt_Timer:
EnableInt_Timer::
ldh a, [rIE]
or 1 << INT_TIMER
ldh [rIE], a
ret
; enable vblank interrupt
EnableInt_VBlank:
EnableInt_VBlank::
ldh a, [rIE]
or 1 << INT_VBLANK
ldh [rIE], a
ret
; enable lcdc interrupt on hblank mode
EnableInt_HBlank:
EnableInt_HBlank::
ldh a, [rSTAT]
or 1 << STAT_MODE_HBLANK
ldh [rSTAT], a
@@ -25,7 +25,7 @@ EnableInt_HBlank:
ret
; disable lcdc interrupt and the hblank mode trigger
DisableInt_HBlank:
DisableInt_HBlank::
ldh a, [rSTAT]
and ~(1 << STAT_MODE_HBLANK)
ldh [rSTAT], a
+3 -3
View File
@@ -1,5 +1,5 @@
; jumps to index a in pointer table hl
JumpToFunctionInTable:
JumpToFunctionInTable::
add a
add l
ld l, a
@@ -12,7 +12,7 @@ JumpToFunctionInTable:
jp hl
; call function at [hl] if non-NULL
CallIndirect:
CallIndirect::
push af
ld a, [hli]
or [hl]
@@ -26,5 +26,5 @@ CallIndirect:
pop af
; fallthrough
CallHL:
CallHL::
jp hl
+9 -9
View File
@@ -1,5 +1,5 @@
; wait for VBlankHandler to finish unless lcd is off
WaitForVBlank:
WaitForVBlank::
push hl
ld a, [wLCDC]
bit LCDC_ENABLE_F, a
@@ -16,7 +16,7 @@ WaitForVBlank:
ret
; turn LCD on
EnableLCD:
EnableLCD::
ld a, [wLCDC] ;
bit LCDC_ENABLE_F, a ;
ret nz ; assert that LCD is off
@@ -28,7 +28,7 @@ EnableLCD:
ret
; wait for vblank, then turn LCD off
DisableLCD:
DisableLCD::
ldh a, [rLCDC] ;
bit LCDC_ENABLE_F, a ;
ret z ; assert that LCD is on
@@ -54,29 +54,29 @@ DisableLCD:
ldh [rIE], a
ret
; set OBJ size: 8x8
Set_OBJ_8x8:
; set OBJ size:: 8x8
Set_OBJ_8x8::
ld a, [wLCDC]
and LCDC_OBJ8
ld [wLCDC], a
ret
; set OBJ size: 8x16
Set_OBJ_8x16:
; set OBJ size:: 8x16
Set_OBJ_8x16::
ld a, [wLCDC]
or LCDC_OBJ16
ld [wLCDC], a
ret
; set Window Display on
SetWindowOn:
SetWindowOn::
ld a, [wLCDC]
or LCDC_WINON
ld [wLCDC], a
ret
; set Window Display off
SetWindowOff:
SetWindowOff::
ld a, [wLCDC]
and LCDC_WINOFF
ld [wLCDC], a
+1 -1
View File
@@ -1,4 +1,4 @@
DoFrameIfLCDEnabled:
DoFrameIfLCDEnabled::
push af
ldh a, [rLCDC]
bit LCDC_ENABLE_F, a
+4 -4
View File
@@ -1,5 +1,5 @@
; Save a pointer to a list, given at de, to wListPointer
SetListPointer:
SetListPointer::
push hl
ld hl, wListPointer
ld [hl], e
@@ -10,7 +10,7 @@ SetListPointer:
; Return the current element of the list at wListPointer,
; and advance the list to the next element
GetNextElementOfList:
GetNextElementOfList::
push hl
push de
ld hl, wListPointer
@@ -21,7 +21,7 @@ GetNextElementOfList:
inc de
; fallthrough
SetListToNextPosition:
SetListToNextPosition::
ld [hl], d
dec hl
ld [hl], e
@@ -31,7 +31,7 @@ SetListToNextPosition:
; Set the current element of the list at wListPointer to a,
; and advance the list to the next element
SetNextElementOfList:
SetNextElementOfList::
push hl
push de
ld hl, wListPointer
+15 -15
View File
@@ -1,10 +1,10 @@
; clear [SOMETHING] - something relating to animations
Func_3ca0:
Func_3ca0::
xor a
ld [wd5d7], a
; fallthrough
Func_3ca4:
Func_3ca4::
ldh a, [hBankROM]
push af
ld a, BANK(Func_1296e)
@@ -14,7 +14,7 @@ Func_3ca4:
call BankswitchROM
ret
HandleAllSpriteAnimations:
HandleAllSpriteAnimations::
ldh a, [hBankROM]
push af
ld a, BANK(_HandleAllSpriteAnimations)
@@ -26,7 +26,7 @@ HandleAllSpriteAnimations:
; hl - pointer to animation frame
; wd5d6 - bank of animation frame
DrawSpriteAnimationFrame:
DrawSpriteAnimationFrame::
ldh a, [hBankROM]
push af
ld a, [wd5d6]
@@ -143,7 +143,7 @@ DrawSpriteAnimationFrame:
; the current frame's offset
; [wd4ca] - current frame offset
; wTempPointer* - Pointer to current Animation
GetAnimationFramePointer:
GetAnimationFramePointer::
ldh a, [hBankROM]
push af
push hl
@@ -194,7 +194,7 @@ GetAnimationFramePointer:
; return hl pointing to the start of a sprite in wSpriteAnimBuffer.
; the sprite is identified by its index in wWhichSprite.
GetFirstSpriteAnimBufferProperty:
GetFirstSpriteAnimBufferProperty::
push bc
ld c, SPRITE_ANIM_ENABLED
call GetSpriteAnimBufferProperty
@@ -203,11 +203,11 @@ GetFirstSpriteAnimBufferProperty:
; return hl pointing to the property (byte) c of a sprite in wSpriteAnimBuffer.
; the sprite is identified by its index in wWhichSprite.
GetSpriteAnimBufferProperty:
GetSpriteAnimBufferProperty::
ld a, [wWhichSprite]
; fallthrough
GetSpriteAnimBufferProperty_SpriteInA:
GetSpriteAnimBufferProperty_SpriteInA::
cp SPRITE_ANIM_BUFFER_CAPACITY
jr c, .got_sprite
debug_nop
@@ -227,7 +227,7 @@ GetSpriteAnimBufferProperty_SpriteInA:
pop bc
ret
Func_3ddb:
Func_3ddb::
push hl
push bc
ld c, SPRITE_ANIM_FLAGS
@@ -237,7 +237,7 @@ Func_3ddb:
pop hl
ret
Func_3de7:
Func_3de7::
push hl
push bc
ld c, SPRITE_ANIM_FLAGS
@@ -247,7 +247,7 @@ Func_3de7:
pop hl
ret
LoadScene:
LoadScene::
push af
ldh a, [hBankROM]
push af
@@ -266,13 +266,13 @@ LoadScene:
ret
; draws player's portrait at b,c
DrawPlayerPortrait:
DrawPlayerPortrait::
ld a, $1
ld [wd61e], a
ld a, TILEMAP_PLAYER
; fallthrough
DrawPortrait:
DrawPortrait::
ld [wCurTilemap], a
ldh a, [hBankROM]
push af
@@ -284,12 +284,12 @@ DrawPortrait:
ret
; draws opponent's portrait given in a at b,c
DrawOpponentPortrait:
DrawOpponentPortrait::
ld [wd61e], a
ld a, TILEMAP_OPPONENT
jr DrawPortrait
Func_3e31:
Func_3e31::
ldh a, [hBankROM]
push af
call HandleAllSpriteAnimations
+1 -1
View File
@@ -1,7 +1,7 @@
; loads the deck id in a from DeckPointers and copies it to wPlayerDeck or to
; wOpponentDeck, depending on whose turn it is.
; sets carry flag if an invalid deck id is used.
LoadDeck:
LoadDeck::
push hl
ld l, a
ld h, $0
+27 -27
View File
@@ -1,5 +1,5 @@
OverworldDoFrameFunction:
OverworldDoFrameFunction::
ld a, [wOverworldNPCFlags]
bit HIDE_ALL_NPC_SPRITES, a
ret nz
@@ -23,7 +23,7 @@ OverworldDoFrameFunction:
; enable the play time counter and execute the game event at [wGameEvent].
; then return to the overworld, or restart the game (only after Credits).
ExecuteGameEvent:
ExecuteGameEvent::
ld a, 1
ld [wPlayTimeCounterEnable], a
ldh a, [hBankROM]
@@ -39,7 +39,7 @@ ExecuteGameEvent:
ret
; execute a game event at [wGameEvent] from GameEventPointerTable
_ExecuteGameEvent:
_ExecuteGameEvent::
ld a, [wGameEvent]
cp NUM_GAME_EVENTS
jr c, .got_game_event
@@ -48,7 +48,7 @@ _ExecuteGameEvent:
ld hl, GameEventPointerTable
jp JumpToFunctionInTable
GameEventPointerTable:
GameEventPointerTable::
dw GameEvent_Overworld
dw GameEvent_Duel
dw GameEvent_BattleCenter
@@ -58,11 +58,11 @@ GameEventPointerTable:
dw GameEvent_ChallengeMachine
dw GameEvent_Overworld
GameEvent_Overworld:
GameEvent_Overworld::
scf
ret
GameEvent_GiftCenter:
GameEvent_GiftCenter::
ldh a, [hBankROM]
push af
call PauseSong
@@ -83,7 +83,7 @@ GameEvent_GiftCenter:
scf
ret
GameEvent_BattleCenter:
GameEvent_BattleCenter::
ld a, GAME_EVENT_BATTLE_CENTER
ld [wActiveGameEvent], a
xor a
@@ -98,7 +98,7 @@ GameEvent_BattleCenter:
scf
ret
GameEvent_Duel:
GameEvent_Duel::
ld a, GAME_EVENT_DUEL
ld [wActiveGameEvent], a
xor a
@@ -112,7 +112,7 @@ GameEvent_Duel:
scf
ret
GameEvent_ChallengeMachine:
GameEvent_ChallengeMachine::
ld a, MUSIC_PC_MAIN_MENU
ld [wDefaultSong], a
call PlayDefaultSong
@@ -128,7 +128,7 @@ GameEvent_ChallengeMachine:
scf
ret
GameEvent_ContinueDuel:
GameEvent_ContinueDuel::
xor a
ld [wSongOverride], a
bank1call TryContinueDuel
@@ -140,12 +140,12 @@ GameEvent_ContinueDuel:
scf
ret
GameEvent_Credits:
GameEvent_Credits::
farcall PlayCreditsSequence
or a
ret
GetReceivedLegendaryCards:
GetReceivedLegendaryCards::
ld a, EVENT_RECEIVED_LEGENDARY_CARDS
farcall GetEventValue
call EnableSRAM
@@ -154,7 +154,7 @@ GetReceivedLegendaryCards:
ret
; return in a the permission byte corresponding to the current map's x,y coordinates at bc
GetPermissionOfMapPosition:
GetPermissionOfMapPosition::
push hl
call GetPermissionByteOfMapPosition
ld a, [hl]
@@ -162,7 +162,7 @@ GetPermissionOfMapPosition:
ret
; set to a the permission byte corresponding to the current map's x,y coordinates at bc
SetPermissionOfMapPosition:
SetPermissionOfMapPosition::
push hl
push af
call GetPermissionByteOfMapPosition
@@ -173,7 +173,7 @@ SetPermissionOfMapPosition:
; set the permission byte corresponding to the current map's x,y coordinates at bc
; to the value of register a anded by its current value
UpdatePermissionOfMapPosition:
UpdatePermissionOfMapPosition::
push hl
push bc
push de
@@ -190,7 +190,7 @@ UpdatePermissionOfMapPosition:
; returns in hl the address within wPermissionMap that corresponds to
; the current map's x,y coordinates at bc
GetPermissionByteOfMapPosition:
GetPermissionByteOfMapPosition::
push bc
srl b
srl c
@@ -206,7 +206,7 @@ GetPermissionByteOfMapPosition:
ret
; copy c bytes of data from hl in bank wTempPointerBank to de, b times.
CopyGfxDataFromTempBank:
CopyGfxDataFromTempBank::
ldh a, [hBankROM]
push af
ld a, [wTempPointerBank]
@@ -217,20 +217,20 @@ CopyGfxDataFromTempBank:
ret
; Movement offsets for player movements
PlayerMovementOffsetTable:
PlayerMovementOffsetTable::
db 0, -1 ; NORTH
db 1, 0 ; EAST
db 0, 1 ; SOUTH
db -1, 0 ; WEST
; Movement offsets for player movements, in tiles
PlayerMovementOffsetTable_Tiles:
PlayerMovementOffsetTable_Tiles::
db 0, -2 ; NORTH
db 2, 0 ; EAST
db 0, 2 ; SOUTH
db -2, 0 ; WEST
OverworldMapNames:
OverworldMapNames::
table_width 2, OverworldMapNames
tx OverworldMapMasonLaboratoryText
tx OverworldMapMasonLaboratoryText
@@ -248,7 +248,7 @@ OverworldMapNames:
tx OverworldMapMysteryHouseText
assert_table_length NUM_OWMAP_NAMES
Func_3997:
Func_3997::
ldh a, [hBankROM]
push af
ld a, BANK(Func_1c056)
@@ -259,13 +259,13 @@ Func_3997:
ret
; returns in hl a pointer to the first element for the a'th NPC
GetLoadedNPCID:
GetLoadedNPCID::
ld l, LOADED_NPC_ID
call GetItemInLoadedNPCIndex
ret
; return in hl a pointer to the a'th items element l
GetItemInLoadedNPCIndex:
GetItemInLoadedNPCIndex::
push bc
cp LOADED_NPC_MAX
jr c, .asm_39b4
@@ -288,7 +288,7 @@ GetItemInLoadedNPCIndex:
; Finds the index on wLoadedNPCs table of the npc in wTempNPC
; returns it in a and puts it into wLoadedNPCTempIndex
; c flag set if no npc found
FindLoadedNPC:
FindLoadedNPC::
push hl
push bc
push de
@@ -318,7 +318,7 @@ FindLoadedNPC:
pop hl
ret
GetNextNPCMovementByte:
GetNextNPCMovementByte::
push bc
ldh a, [hBankROM]
push af
@@ -332,7 +332,7 @@ GetNextNPCMovementByte:
pop bc
ret
PlayDefaultSong:
PlayDefaultSong::
push hl
push bc
call AssertSongFinished
@@ -358,7 +358,7 @@ PlayDefaultSong:
ret
; returns [wDefaultSong] or MUSIC_RONALD in a
GetDefaultSong:
GetDefaultSong::
ld a, [wRonaldIsInMap]
or a
jr z, .default_song
+3 -3
View File
@@ -1,5 +1,5 @@
; returns a *= 10
ATimes10:
ATimes10::
push de
ld e, a
add a
@@ -10,7 +10,7 @@ ATimes10:
ret
; returns hl *= 10
HLTimes10:
HLTimes10::
push de
ld l, a
ld e, a
@@ -25,7 +25,7 @@ HLTimes10:
; returns a /= 10
; returns carry if a % 10 >= 5
ADividedBy10:
ADividedBy10::
push de
ld e, -1
.asm_c62
+7 -7
View File
@@ -1,9 +1,9 @@
; decompresses data from a given bank
; uses values initialized by InitDataDecompression
; input:
; input::
; bc = row width
; de = buffer to place decompressed data
DecompressDataFromBank:
DecompressDataFromBank::
ldh a, [hBankROM]
push af
ld a, [wTempPointerBank]
@@ -14,7 +14,7 @@ DecompressDataFromBank:
ret
; Copies bc bytes from [wTempPointer] to de
CopyBankedDataToDE:
CopyBankedDataToDE::
ldh a, [hBankROM]
push af
push hl
@@ -31,7 +31,7 @@ CopyBankedDataToDE:
ret
; fill bc bytes of data at hl with a
FillMemoryWithA:
FillMemoryWithA::
push hl
push de
push bc
@@ -49,7 +49,7 @@ FillMemoryWithA:
ret
; fill 2*bc bytes of data at hl with d,e
FillMemoryWithDE:
FillMemoryWithDE::
push hl
push bc
.loop
@@ -65,8 +65,8 @@ FillMemoryWithDE:
pop hl
ret
; gets far byte a:hl, outputs value in a
GetFarByte:
; gets far byte a::hl, outputs value in a
GetFarByte::
push hl
push af
ldh a, [hBankROM]
+59 -59
View File
@@ -1,9 +1,9 @@
; initializes parameters for a card list (e.g. list of hand cards in a duel, or booster pack cards)
; input:
; input::
; a = list length
; de = initial page scroll offset, initial item (in the visible page)
; hl: 9 bytes with the rest of the parameters
InitializeCardListParameters:
; hl:: 9 bytes with the rest of the parameters
InitializeCardListParameters::
ld [wNumListItems], a
ld a, d
ld [wListScrollOffset], a
@@ -39,7 +39,7 @@ InitializeCardListParameters:
; state of the list in a, d, and e if A or B were pressed. also returns carry
; if A or B were pressed, nc otherwise. returns -1 in a if B was pressed.
; used for example in the Hand card list and Discard Pile card list screens.
HandleCardListInput:
HandleCardListInput::
call HandleMenuInput
ret nc
ld a, [wListScrollOffset]
@@ -51,11 +51,11 @@ HandleCardListInput:
ret
; initializes parameters for a menu, given the 8 bytes starting at hl,
; which are loaded to the following addresses:
; which are loaded to the following addresses::
; wCursorXPosition, wCursorYPosition, wYDisplacementBetweenMenuItems, wNumMenuItems,
; wCursorTile, wTileBehindCursor, wMenuFunctionPointer.
; also sets the current menu item (wCurMenuItem) to the one specified in register a.
InitializeMenuParameters:
InitializeMenuParameters::
ld [wCurMenuItem], a
ldh [hCurMenuItem], a
ld de, wCursorXPosition
@@ -72,8 +72,8 @@ InitializeMenuParameters:
; returns with the carry flag set if A or B were pressed
; returns a = 0 if A was pressed, a = -1 if B was pressed
; note: return values still subject to those of the function at [wMenuFunctionPointer] if any
HandleMenuInput:
; note:: return values still subject to those of the function at [wMenuFunctionPointer] if any
HandleMenuInput::
xor a
ld [wRefreshMenuCursorSFX], a
ldh a, [hDPadHeld]
@@ -146,7 +146,7 @@ HandleMenuInput:
; plays an "open screen" sound (SFX_02) if [hCurMenuItem] != 0xff
; plays an "exit screen" sound (SFX_03) if [hCurMenuItem] == 0xff
PlayOpenOrExitScreenSFX:
PlayOpenOrExitScreenSFX::
push af
ldh a, [hCurMenuItem]
inc a
@@ -163,14 +163,14 @@ PlayOpenOrExitScreenSFX:
; called once per frame when a menu is open
; play the sound effect at wRefreshMenuCursorSFX if non-0 and blink the
; cursor when wCursorBlinkCounter hits 16 (i.e. every 16 frames)
RefreshMenuCursor_CheckPlaySFX:
RefreshMenuCursor_CheckPlaySFX::
ld a, [wRefreshMenuCursorSFX]
or a
jr z, RefreshMenuCursor
call PlaySFX
; fallthrough
RefreshMenuCursor:
RefreshMenuCursor::
ld hl, wCursorBlinkCounter
ld a, [hl]
inc [hl]
@@ -183,12 +183,12 @@ RefreshMenuCursor:
; fallthrough
; set the tile at [wCursorXPosition],[wCursorYPosition] to [wTileBehindCursor]
EraseCursor:
EraseCursor::
ld a, [wTileBehindCursor]
; fallthrough
; set the tile at [wCursorXPosition],[wCursorYPosition] to a
DrawCursor:
DrawCursor::
ld c, a
ld a, [wYDisplacementBetweenMenuItems]
ld l, a
@@ -210,12 +210,12 @@ DrawCursor:
ret
; set the tile at [wCursorXPosition],[wCursorYPosition] to [wCursorTile]
DrawCursor2:
DrawCursor2::
ld a, [wCursorTile]
jr DrawCursor
; set wCurMenuItem, and hCurMenuItem to a, and zero wCursorBlinkCounter
SetMenuItem:
SetMenuItem::
ld [wCurMenuItem], a
ldh [hCurMenuItem], a
xor a
@@ -226,7 +226,7 @@ SetMenuItem:
; only handles input not involving the B, START, or SELECT buttons, that is,
; navigating through the menu or selecting an item with the A button.
; other input in handled by PrintDuelMenuAndHandleInput.handle_input
HandleDuelMenuInput:
HandleDuelMenuInput::
ldh a, [hDPadHeld]
or a
jr z, .blink_cursor
@@ -301,7 +301,7 @@ HandleDuelMenuInput:
or a
ret
DuelMenuCursorCoords:
DuelMenuCursorCoords::
db 2, 14 ; Hand
db 2, 16 ; Attack
db 8, 14 ; Check
@@ -310,12 +310,12 @@ DuelMenuCursorCoords:
db 14, 16 ; Done
; print the items of a list of cards (hand cards in a duel, cards from a booster pack...)
; and initialize the parameters of the list given:
; and initialize the parameters of the list given::
; wDuelTempList = card list source
; a = list length
; de = initial page scroll offset, initial item (in the visible page)
; hl: 9 bytes with the rest of the parameters
PrintCardListItems:
; hl:: 9 bytes with the rest of the parameters
PrintCardListItems::
call InitializeCardListParameters
ld hl, wMenuFunctionPointer
ld a, LOW(CardListMenuFunction)
@@ -330,7 +330,7 @@ PrintCardListItems:
; like PrintCardListItems, except more parameters are already initialized
; called instead of PrintCardListItems to reload the list after moving up or down
ReloadCardListItems:
ReloadCardListItems::
ld e, SYM_SPACE
ld a, [wListScrollOffset]
or a
@@ -402,7 +402,7 @@ ReloadCardListItems:
ret
; reload a list of cards, except don't print their names
Func_2827:
Func_2827::
ld a, $01
ldh [hffb0], a
call ReloadCardListItems
@@ -412,7 +412,7 @@ Func_2827:
; convert the number at a to TX_SYMBOL text format and write it to wDefaultText
; if the first digit is a 0, delete it and shift the number one tile to the left
OneByteNumberToTxSymbol_TrimLeadingZerosAndAlign:
OneByteNumberToTxSymbol_TrimLeadingZerosAndAlign::
call OneByteNumberToTxSymbol
ld a, [hli]
cp SYM_0
@@ -426,7 +426,7 @@ OneByteNumberToTxSymbol_TrimLeadingZerosAndAlign:
; this function is always loaded to wMenuFunctionPointer by PrintCardListItems
; takes care of things like handling page scrolling and calling the function at wListFunctionPointer
CardListMenuFunction:
CardListMenuFunction::
ldh a, [hDPadHeld]
ld b, a
ld a, [wNumMenuItems]
@@ -595,7 +595,7 @@ CardListMenuFunction:
; convert the number at a to TX_SYMBOL text format and write it to wDefaultText
; replace leading zeros with SYM_SPACE
OneByteNumberToTxSymbol_TrimLeadingZeros:
OneByteNumberToTxSymbol_TrimLeadingZeros::
call OneByteNumberToTxSymbol
ld a, [hl]
cp SYM_0
@@ -604,7 +604,7 @@ OneByteNumberToTxSymbol_TrimLeadingZeros:
ret
; convert the number at a to TX_SYMBOL text format and write it to wDefaultText
OneByteNumberToTxSymbol:
OneByteNumberToTxSymbol::
ld hl, wDefaultText
push hl
ld e, SYM_0 - 1
@@ -621,7 +621,7 @@ OneByteNumberToTxSymbol:
ret
; translate the TYPE_* constant in wLoadedCard1Type to an index for CardSymbolTable
CardTypeToSymbolID:
CardTypeToSymbolID::
ld a, [wLoadedCard1Type]
cp TYPE_TRAINER
jr nc, .trainer_card
@@ -640,7 +640,7 @@ CardTypeToSymbolID:
; return the entry in CardSymbolTable of the TYPE_* constant in wLoadedCard1Type
; also return the first byte of said entry (starting tile number) in a
GetCardSymbolData:
GetCardSymbolData::
call CardTypeToSymbolID
add a
ld c, a
@@ -651,7 +651,7 @@ GetCardSymbolData:
ret
; draw, at de, the 2x2 tile card symbol associated to the TYPE_* constant in wLoadedCard1Type
DrawCardSymbol:
DrawCardSymbol::
push hl
push de
push bc
@@ -682,7 +682,7 @@ DrawCardSymbol:
pop hl
ret
CardSymbolTable:
CardSymbolTable::
; starting tile number, cgb palette (grey, yellow/red, green/blue, pink/orange)
db $e0, $01 ; TYPE_ENERGY_FIRE
db $e4, $02 ; TYPE_ENERGY_GRASS
@@ -699,21 +699,21 @@ CardSymbolTable:
; copy the name and level of the card at wLoadedCard1 to wDefaultText
; a = length in number of tiles (the resulting string will be padded with spaces to match it)
CopyCardNameAndLevel:
CopyCardNameAndLevel::
farcall _CopyCardNameAndLevel
ret
; sets cursor parameters for navigating in a text box, but using
; default values for the cursor tile (SYM_CURSOR_R) and the tile behind it (SYM_SPACE).
; d,e: coordinates of the cursor
SetCursorParametersForTextBox_Default:
; d,e:: coordinates of the cursor
SetCursorParametersForTextBox_Default::
lb bc, SYM_CURSOR_R, SYM_SPACE ; cursor tile, tile behind cursor
call SetCursorParametersForTextBox
; fallthrough
; wait until A or B is pressed.
; return carry if A is pressed, nc if B is pressed. erase the cursor either way
WaitForButtonAorB:
WaitForButtonAorB::
call DoFrame
call RefreshMenuCursor
ldh a, [hKeysPressed]
@@ -730,9 +730,9 @@ WaitForButtonAorB:
ret
; sets cursor parameters for navigating in a text box
; d,e: coordinates of the cursor
; b,c: tile numbers of the cursor and of the tile behind it
SetCursorParametersForTextBox:
; d,e:: coordinates of the cursor
; b,c:: tile numbers of the cursor and of the tile behind it
SetCursorParametersForTextBox::
xor a
ld hl, wCurMenuItem
ld [hli], a
@@ -752,13 +752,13 @@ SetCursorParametersForTextBox:
; draw a 20x6 text box aligned to the bottom of the screen,
; print the text at hl without letter delay, and wait for A or B pressed
DrawWideTextBox_PrintTextNoDelay_Wait:
DrawWideTextBox_PrintTextNoDelay_Wait::
call DrawWideTextBox_PrintTextNoDelay
jp WaitForWideTextBoxInput
; draw a 20x6 text box aligned to the bottom of the screen
; and print the text at hl without letter delay
DrawWideTextBox_PrintTextNoDelay:
DrawWideTextBox_PrintTextNoDelay::
push hl
call DrawWideTextBox
ld a, 19
@@ -766,13 +766,13 @@ DrawWideTextBox_PrintTextNoDelay:
; draw a 12x6 text box aligned to the bottom left of the screen
; and print the text at hl without letter delay
DrawNarrowTextBox_PrintTextNoDelay:
DrawNarrowTextBox_PrintTextNoDelay::
push hl
call DrawNarrowTextBox
ld a, 11
; fallthrough
DrawTextBox_PrintTextNoDelay:
DrawTextBox_PrintTextNoDelay::
lb de, 1, 14
call AdjustCoordinatesForBGScroll
call InitTextPrintingInTextbox
@@ -785,7 +785,7 @@ DrawTextBox_PrintTextNoDelay:
; draw a 20x6 text box aligned to the bottom of the screen
; and print the text at hl with letter delay
DrawWideTextBox_PrintText:
DrawWideTextBox_PrintText::
push hl
call DrawWideTextBox
ld a, 19
@@ -797,7 +797,7 @@ DrawWideTextBox_PrintText:
jp PrintText
; draw a 12x6 text box aligned to the bottom left of the screen
DrawNarrowTextBox:
DrawNarrowTextBox::
lb de, 0, 12
lb bc, 12, 6
call AdjustCoordinatesForBGScroll
@@ -806,7 +806,7 @@ DrawNarrowTextBox:
; draw a 12x6 text box aligned to the bottom left of the screen,
; print the text at hl without letter delay, and wait for A or B pressed
DrawNarrowTextBox_WaitForInput:
DrawNarrowTextBox_WaitForInput::
call DrawNarrowTextBox_PrintTextNoDelay
xor a
ld hl, NarrowTextBoxMenuParameters
@@ -820,7 +820,7 @@ DrawNarrowTextBox_WaitForInput:
jr z, .wait_A_or_B_loop
ret
NarrowTextBoxMenuParameters:
NarrowTextBoxMenuParameters::
db 10, 17 ; cursor x, cursor y
db 1 ; y displacement between items
db 1 ; number of items
@@ -829,7 +829,7 @@ NarrowTextBoxMenuParameters:
dw NULL ; function pointer if non-0
; draw a 20x6 text box aligned to the bottom of the screen
DrawWideTextBox:
DrawWideTextBox::
lb de, 0, 12
lb bc, 20, 6
call AdjustCoordinatesForBGScroll
@@ -838,12 +838,12 @@ DrawWideTextBox:
; draw a 20x6 text box aligned to the bottom of the screen,
; print the text at hl with letter delay, and wait for A or B pressed
DrawWideTextBox_WaitForInput:
DrawWideTextBox_WaitForInput::
call DrawWideTextBox_PrintText
; fallthrough
; wait for A or B to be pressed on a wide (20x6) text box
WaitForWideTextBoxInput:
WaitForWideTextBoxInput::
xor a
ld hl, WideTextBoxMenuParameters
call InitializeMenuParameters
@@ -857,7 +857,7 @@ WaitForWideTextBoxInput:
call EraseCursor
ret
WideTextBoxMenuParameters:
WideTextBoxMenuParameters::
db 18, 17 ; cursor x, cursor y
db 1 ; y displacement between items
db 1 ; number of items
@@ -866,7 +866,7 @@ WideTextBoxMenuParameters:
dw NULL ; function pointer if non-0
; display a two-item horizontal menu with custom text provided in hl and handle input
TwoItemHorizontalMenu:
TwoItemHorizontalMenu::
call DrawWideTextBox_PrintText
lb de, 6, 16 ; x, y
ld a, d
@@ -878,7 +878,7 @@ TwoItemHorizontalMenu:
call EnableLCD
jp HandleYesOrNoMenu.refresh_menu
YesOrNoMenuWithText_SetCursorToYes:
YesOrNoMenuWithText_SetCursorToYes::
ld a, $01
ld [wDefaultYesOrNo], a
; fallthrough
@@ -886,28 +886,28 @@ YesOrNoMenuWithText_SetCursorToYes:
; display a yes / no menu in a 20x8 textbox with custom text provided in hl and handle input
; wDefaultYesOrNo determines whether the cursor initially points to YES or to NO
; returns carry if "no" selected
YesOrNoMenuWithText:
YesOrNoMenuWithText::
call DrawWideTextBox_PrintText
; fallthrough
; prints the YES / NO menu items at coordinates x,y = 7,16 and handles input
; input: wDefaultYesOrNo. returns carry if "no" selected
YesOrNoMenu:
; input:: wDefaultYesOrNo. returns carry if "no" selected
YesOrNoMenu::
lb de, 7, 16 ; x, y
call PrintYesOrNoItems
lb de, 6, 16 ; x, y
jr HandleYesOrNoMenu
; prints the YES / NO menu items at coordinates x,y = 3,16 and handles input
; input: wDefaultYesOrNo. returns carry if "no" selected
YesOrNoMenuWithText_LeftAligned:
; input:: wDefaultYesOrNo. returns carry if "no" selected
YesOrNoMenuWithText_LeftAligned::
call DrawNarrowTextBox_PrintTextNoDelay
lb de, 3, 16 ; x, y
call PrintYesOrNoItems
lb de, 2, 16 ; x, y
; fallthrough
HandleYesOrNoMenu:
HandleYesOrNoMenu::
ld a, d
ld [wLeftmostItemCursorX], a
lb bc, SYM_CURSOR_R, SYM_SPACE ; cursor tile, tile behind cursor
@@ -962,13 +962,13 @@ HandleYesOrNoMenu:
ret
; prints "YES NO" at de
PrintYesOrNoItems:
PrintYesOrNoItems::
call AdjustCoordinatesForBGScroll
ldtx hl, YesOrNoText
call InitTextPrinting_ProcessTextFromID
ret
ContinueDuel:
ContinueDuel::
ld a, BANK(_ContinueDuel)
call BankswitchROM
jp _ContinueDuel
+3 -3
View File
@@ -1,6 +1,6 @@
; set attributes for [hl] sprites starting from wOAM + [wOAMOffset] / 4
; return carry if reached end of wOAM before finishing
SetManyObjectsAttributes: ; 950 (0:950)
SetManyObjectsAttributes:: ; 950 (0::950)
push hl
ld a, [wOAMOffset]
ld c, a
@@ -43,7 +43,7 @@ SetManyObjectsAttributes: ; 950 (0:950)
; for the sprite at wOAM + [wOAMOffset] / 4, set its attributes from registers e, d, c, b
; return carry if [wOAMOffset] > 40 * 4 (beyond the end of wOAM)
SetOneObjectAttributes:
SetOneObjectAttributes::
push hl
ld a, [wOAMOffset]
ld l, a
@@ -69,7 +69,7 @@ SetOneObjectAttributes:
ret
; set the Y Position and X Position of all sprites in wOAM to $00
ZeroObjectPositions:
ZeroObjectPositions::
xor a
ld [wOAMOffset], a
ld hl, wOAM
+10 -10
View File
@@ -1,25 +1,25 @@
; Flush all non-CGB and CGB palettes
FlushAllPalettes:
FlushAllPalettes::
ld a, FLUSH_ALL_PALS
jr FlushPalettes
; Flush non-CGB palettes and a single CGB palette,
; provided in a as an index between 0-7 (BGP) or 8-15 (OBP)
FlushPalette:
FlushPalette::
or FLUSH_ONE_PAL
jr FlushPalettes
; Set wBGP to the specified value, flush non-CGB palettes, and the first CGB palette.
SetBGP:
SetBGP::
ld [wBGP], a
; fallthrough
; Flush non-CGB palettes and the first CGB palette
FlushPalette0:
FlushPalette0::
ld a, FLUSH_ONE_PAL
; fallthrough
FlushPalettes:
FlushPalettes::
ld [wFlushPaletteFlags], a
ld a, [wLCDC]
rla
@@ -34,12 +34,12 @@ FlushPalettes:
ret
; Set wOBP0 to the specified value, flush non-CGB palettes, and the first CGB palette.
SetOBP0:
SetOBP0::
ld [wOBP0], a
jr FlushPalette0
; Set wOBP1 to the specified value, flush non-CGB palettes, and the first CGB palette.
SetOBP1:
SetOBP1::
ld [wOBP1], a
jr FlushPalette0
@@ -48,7 +48,7 @@ SetOBP1:
; and [wObjectPalettesCGB+$00..wObjectPalettesCGB+$3f] (sprite palette).
; Only flushes if [wFlushPaletteFlags] is nonzero, and only flushes
; a single CGB palette if bit6 of that location is reset.
FlushPalettesIfRequested:
FlushPalettesIfRequested::
ld a, [wFlushPaletteFlags]
or a
ret z
@@ -77,7 +77,7 @@ FlushPalettesIfRequested:
call CopyCGBPalettes
jr .done
FlushAllCGBPalettes:
FlushAllCGBPalettes::
; flush 8 BGP palettes
xor a
ld b, 8 palettes
@@ -90,7 +90,7 @@ FlushAllCGBPalettes:
; copy b bytes of CGB palette data starting at
; (wBackgroundPalettesCGB + a palettes) into rBGPD or rOBPD.
CopyCGBPalettes:
CopyCGBPalettes::
add a
add a
add a
+7 -7
View File
@@ -1,6 +1,6 @@
; return nc if wd42a, wd4c0, and wAnimationQueue[] are all equal to $ff
; nc means no animation is playing (or animation(s) has/have ended)
CheckAnyAnimationPlaying:
CheckAnyAnimationPlaying::
push hl
push bc
ld a, [wd42a]
@@ -21,9 +21,9 @@ CheckAnyAnimationPlaying:
; plays duel animation
; the animations are loaded to a buffer
; and played in order, so they can be stacked
; input:
; input::
; - a = animation index
PlayDuelAnimation:
PlayDuelAnimation::
ld [wTempAnimation], a ; hold an animation temporarily
ldh a, [hBankROM]
push af
@@ -61,7 +61,7 @@ PlayDuelAnimation:
call BankswitchROM
ret
Func_3ba2:
Func_3ba2::
ldh a, [hBankROM]
push af
ld a, BANK(Func_1cac5)
@@ -72,7 +72,7 @@ Func_3ba2:
call BankswitchROM
ret
Func_3bb5:
Func_3bb5::
xor a
ld [wd4c0], a
ldh a, [hBankROM]
@@ -88,14 +88,14 @@ Func_3bb5:
ret
; writes from hl the pointer to the function to be called by DoFrame
SetDoFrameFunction:
SetDoFrameFunction::
ld a, l
ld [wDoFrameFunction], a
ld a, h
ld [wDoFrameFunction + 1], a
ret
ResetDoFrameFunction:
ResetDoFrameFunction::
push hl
ld hl, NULL
call SetDoFrameFunction
+3 -3
View File
@@ -1,8 +1,8 @@
ScriptPlaySong:
ScriptPlaySong::
call PlaySong
ret
Func_3c87:
Func_3c87::
push af
call PauseSong
pop af
@@ -11,7 +11,7 @@ Func_3c87:
call ResumeSong
ret
WaitForSongToFinish:
WaitForSongToFinish::
call DoFrameIfLCDEnabled
call AssertSongFinished
or a
+36 -36
View File
@@ -1,7 +1,7 @@
; writes n items of text each given in the following format in hl:
; writes n items of text each given in the following format in hl::
; x coord, y coord, text id
; $ff-terminated
PlaceTextItems:
PlaceTextItems::
ld d, [hl] ; x coord
inc hl
bit 7, d
@@ -17,18 +17,18 @@ PlaceTextItems:
jr PlaceTextItems ; do next item
; like ProcessTextFromID, except it calls InitTextPrinting first
InitTextPrinting_ProcessTextFromID:
InitTextPrinting_ProcessTextFromID::
call InitTextPrinting
jr ProcessTextFromID
; like ProcessTextFromPointerToID, except it calls InitTextPrinting first
InitTextPrinting_ProcessTextFromPointerToID:
InitTextPrinting_ProcessTextFromPointerToID::
call InitTextPrinting
; fallthrough
; like ProcessTextFromID below, except a memory address containing a text ID is
; provided in hl rather than the text ID directly.
ProcessTextFromPointerToID:
ProcessTextFromPointerToID::
ld a, [hli]
or [hl]
ret z
@@ -40,7 +40,7 @@ ProcessTextFromPointerToID:
; given the ID of a text in hl, reads the characters from it processes them.
; loops until TX_END is found. ignores TX_RAM1, TX_RAM2, and TX_RAM3 characters.
; restores original ROM bank before returning.
ProcessTextFromID:
ProcessTextFromID::
ldh a, [hBankROM]
push af
call GetTextOffsetFromTextID
@@ -51,7 +51,7 @@ ProcessTextFromID:
; return, in a, the number of lines of the text given in hl as an ID
; this is calculated by counting the amount of '\n' characters and adding 1 to the result
CountLinesOfTextFromID:
CountLinesOfTextFromID::
push hl
push de
push bc
@@ -86,11 +86,11 @@ CountLinesOfTextFromID:
; call PrintScrollableText with text box label, then wait for the
; player to press A or B to advance the printed text
PrintScrollableText_WithTextBoxLabel:
PrintScrollableText_WithTextBoxLabel::
call PrintScrollableText_WithTextBoxLabel_NoWait
jr WaitForPlayerToAdvanceText
PrintScrollableText_WithTextBoxLabel_NoWait:
PrintScrollableText_WithTextBoxLabel_NoWait::
push hl
ld hl, wTextBoxLabel
ld [hl], e
@@ -102,14 +102,14 @@ PrintScrollableText_WithTextBoxLabel_NoWait:
; call PrintScrollableText with no text box label, then wait for the
; player to press A or B to advance the printed text
PrintScrollableText_NoTextBoxLabel:
PrintScrollableText_NoTextBoxLabel::
xor a
call PrintScrollableText
; fallthrough
; when a text box is full or the text is over, prompt the player to
; press A or B in order to clear the text and print the next lines.
WaitForPlayerToAdvanceText:
WaitForPlayerToAdvanceText::
lb bc, SYM_CURSOR_D, SYM_BOX_BOTTOM ; cursor tile, tile behind cursor
lb de, 18, 17 ; x, y
call SetCursorParametersForTextBox
@@ -121,7 +121,7 @@ WaitForPlayerToAdvanceText:
; to advance the page or close the text. register a determines whether the textbox is
; labeled or not. if labeled, the text id of the label is provided in wTextBoxLabel.
; PrintScrollableText is used mostly for overworld NPC text.
PrintScrollableText:
PrintScrollableText::
ld [wIsTextBoxLabeled], a
ldh a, [hBankROM]
push af
@@ -165,7 +165,7 @@ PrintScrollableText:
; zero wWhichTextHeader, wWhichTxRam2 and wWhichTxRam3, and set hJapaneseSyllabary to TX_KATAKANA
; fill wTextHeader1 with TX_KATAKANA, wFontWidth, hBankROM, and register bc for the text's pointer.
ResetTxRam_WriteToTextHeader:
ResetTxRam_WriteToTextHeader::
xor a
ld [wWhichTextHeader], a
ld [wWhichTxRam2], a
@@ -176,7 +176,7 @@ ResetTxRam_WriteToTextHeader:
; fill the wTextHeader specified in wWhichTextHeader (0-3) with hJapaneseSyllabary,
; wFontWidth, hBankROM, and register bc for the text's pointer.
WriteToTextHeader:
WriteToTextHeader::
push hl
call GetPointerToTextHeader
pop bc
@@ -194,7 +194,7 @@ WriteToTextHeader:
; same as WriteToTextHeader, except it then increases wWhichTextHeader to
; set the next text header to the current one (usually, because
; it will soon be written to due to a TX_RAM command).
WriteToTextHeader_MoveToNext:
WriteToTextHeader_MoveToNext::
call WriteToTextHeader
ld hl, wWhichTextHeader
inc [hl]
@@ -203,7 +203,7 @@ WriteToTextHeader_MoveToNext:
; read the wTextHeader specified in wWhichTextHeader (0-3) and use the data to
; populate the corresponding memory addresses. also switch to the text's rombank
; and return the address of the next character in hl.
ReadTextHeader:
ReadTextHeader::
call GetPointerToTextHeader
ld a, [hli]
ld [hJapaneseSyllabary], a
@@ -217,7 +217,7 @@ ReadTextHeader:
ret
; return in hl, the address of the wTextHeader specified in wWhichTextHeader (0-3)
GetPointerToTextHeader:
GetPointerToTextHeader::
ld a, [wWhichTextHeader]
ld e, a
add a
@@ -232,7 +232,7 @@ GetPointerToTextHeader:
; draws a wide text box with or without label depending on wIsTextBoxLabeled
; if labeled, the label's text ID is provided in wTextBoxLabel
; calls InitTextPrintingInTextbox after drawing the text box
DrawTextReadyLabeledOrRegularTextBox:
DrawTextReadyLabeledOrRegularTextBox::
push hl
lb de, 0, 12
lb bc, 20, 6
@@ -261,7 +261,7 @@ DrawTextReadyLabeledOrRegularTextBox:
; then updates the current wTextHeader to point to the next character.
; a TX_RAM command causes a switch to a wTextHeader in the level below, and a TX_END
; command terminates the text unless there is a pending wTextHeader in the above level.
ProcessTextHeader:
ProcessTextHeader::
call ReadTextHeader
ld a, [hli]
or a ; TX_END
@@ -344,12 +344,12 @@ ProcessTextHeader:
call WriteToTextHeader
jp ProcessTextHeader
; input:
; de: wTxRam2 or wTxRam3
; hl: wWhichTxRam2 or wWhichTxRam3
; input::
; de:: wTxRam2 or wTxRam3
; hl:: wWhichTxRam2 or wWhichTxRam3
; return, in hl, the contents of the contents of the
; wTxRam* buffer's current entry, and increment wWhichTxRam*.
HandleTxRam2Or3:
HandleTxRam2Or3::
push de
ld a, [hl]
inc [hl]
@@ -365,7 +365,7 @@ HandleTxRam2Or3:
; uses the two byte text id in hl to read the three byte text offset
; loads the correct bank for the specific text and returns the pointer in hl
GetTextOffsetFromTextID:
GetTextOffsetFromTextID::
push de
ld e, l
ld d, h
@@ -393,13 +393,13 @@ GetTextOffsetFromTextID:
pop de
ret
; if [wFontWidth] == HALF_WIDTH:
; if [wFontWidth] == HALF_WIDTH::
; convert the number at hl to text (ascii) format and write it to wStringBuffer
; return c = 4 - leading_zeros
; if [wFontWidth] == FULL_WIDTH:
; if [wFontWidth] == FULL_WIDTH::
; convert the number at hl to TX_SYMBOL text format and write it to wStringBuffer
; replace leading zeros with SYM_SPACE
TwoByteNumberToText_CountLeadingZeros:
TwoByteNumberToText_CountLeadingZeros::
ld a, [wFontWidth]
or a ; FULL_WIDTH
jp z, TwoByteNumberToTxSymbol_TrimLeadingZeros
@@ -417,9 +417,9 @@ TwoByteNumberToText_CountLeadingZeros:
jr nz, .digit_loop
ret
; in the overworld: copy the player's name to wStringBuffer
; in a duel: copy the name of the duelist whose turn it is to wStringBuffer
CopyPlayerNameOrTurnDuelistName:
; in the overworld:: copy the player's name to wStringBuffer
; in a duel:: copy the name of the duelist whose turn it is to wStringBuffer
CopyPlayerNameOrTurnDuelistName::
ld de, wStringBuffer
push de
ldh a, [hWhoseTurn]
@@ -435,7 +435,7 @@ CopyPlayerNameOrTurnDuelistName:
; prints text with id at hl, with letter delay, in a textbox area.
; the text must fit in the textbox; PrintScrollableText should be used instead.
PrintText:
PrintText::
ld a, l
or h
jr z, .from_ram
@@ -474,7 +474,7 @@ PrintText:
; prints text with id at hl, without letter delay, in a textbox area.
; the text must fit in the textbox; PrintScrollableText should be used instead.
PrintTextNoDelay:
PrintTextNoDelay::
ldh a, [hBankROM]
push af
call GetTextOffsetFromTextID
@@ -488,7 +488,7 @@ PrintTextNoDelay:
; copies a text given its id at hl, to de
; if hl is 0, the name of the turn duelist is copied instead
CopyText:
CopyText::
ld a, l
or h
jr z, .special
@@ -515,7 +515,7 @@ CopyText:
; then terminate the text with TX_END if it doesn't contain it already.
; fill any remaining bytes with spaces plus TX_END to match the length specified in a.
; return the text's actual length in characters (i.e. before the first TX_END) in e.
CopyTextData_FromTextID:
CopyTextData_FromTextID::
ldh [hff96], a
ldh a, [hBankROM]
push af
@@ -527,7 +527,7 @@ CopyTextData_FromTextID:
ret
; text id (usually of a card name) for TX_RAM2
LoadTxRam2:
LoadTxRam2::
ld a, l
ld [wTxRam2], a
ld a, h
@@ -535,7 +535,7 @@ LoadTxRam2:
ret
; a number between 0 and 65535 for TX_RAM3
LoadTxRam3:
LoadTxRam3::
ld a, l
ld [wTxRam3], a
ld a, h
+15 -15
View File
@@ -1,5 +1,5 @@
; serial transfer-related
SendPrinterPacket:
SendPrinterPacket::
push hl
ld hl, wce64
; Preamble
@@ -66,12 +66,12 @@ SendPrinterPacket:
scf
ret
Func_3189:
Func_3189::
ld hl, PointerTable_3190
dec a
jp JumpToFunctionInTable
PointerTable_3190:
PointerTable_3190::
dw Func_31a8
dw Func_31a8
dw Func_31a8
@@ -85,14 +85,14 @@ PointerTable_3190:
dw Func_31ea
dw Func_31f2
Func_31a8:
Func_31a8::
call Func_31fc
Func_31ab:
Func_31ab::
ld hl, wce63
inc [hl]
ret
Func_31b0:
Func_31b0::
call Func_31ab
ld hl, wce68
ld a, [hli]
@@ -111,7 +111,7 @@ Func_31b0:
ld [de], a
; fallthrough
Func_31ca:
Func_31ca::
call Func_31fc
ld hl, wce68
ld a, [hl]
@@ -127,31 +127,31 @@ Func_31ca:
jr z, Func_31ab
ret
Func_31dd:
Func_31dd::
ld a, [wce6c]
Func_31e0:
Func_31e0::
call Func_3212
jr Func_31ab
Func_31e5:
Func_31e5::
ld a, [wce6d]
jr Func_31e0
Func_31ea:
Func_31ea::
ldh a, [rSB]
ld [wce6e], a
Func_31ef:
Func_31ef::
xor a
jr Func_31e0
Func_31f2:
Func_31f2::
ldh a, [rSB]
ld [wPrinterStatus], a
xor a
ld [wce63], a
ret
Func_31fc:
Func_31fc::
ld hl, wSerialDataPtr
ld e, [hl]
inc hl
@@ -172,7 +172,7 @@ Func_31fc:
ld a, e
; fallthrough
Func_3212:
Func_3212::
ldh [rSB], a
ld a, SC_INTERNAL
ldh [rSC], a
+41 -41
View File
@@ -1,7 +1,7 @@
; similar to ProcessText except it calls InitTextPrinting first
; with the first two bytes of hl being used to set hTextBGMap0Address.
; (the caller to ProcessText usually calls InitTextPrinting first)
InitTextPrinting_ProcessText:
InitTextPrinting_ProcessText::
push de
push bc
ld d, [hl]
@@ -13,7 +13,7 @@ InitTextPrinting_ProcessText:
; reads the characters from the text at hl processes them. loops until
; TX_END is found. ignores TX_RAM1, TX_RAM2, and TX_RAM3 characters.
ProcessText:
ProcessText::
push de
push bc
call InitTextFormat
@@ -48,7 +48,7 @@ ProcessText:
; processes the text character provided in a checking for specific control characters.
; hl points to the text character coming right after the one loaded into a.
; returns carry if the character was not processed by this function.
ProcessSpecialTextCharacter:
ProcessSpecialTextCharacter::
or a ; TX_END
jr z, .tx_end
cp TX_HIRAGANA
@@ -136,7 +136,7 @@ ProcessSpecialTextCharacter:
; calls InitTextFormat, selects tiles at $8800-$97FF for text, and clears the wc600.
; selects the first and last tile to be reserved for constructing text tiles in VRAM
; based on the values given in d and e respectively.
SetupText:
SetupText::
ld a, d
dec a
ld [wcd04], a
@@ -162,7 +162,7 @@ SetupText:
; hTextLineCurPos <- 0
; wHalfWidthPrintState <- 0
; hJapaneseSyllabary <- TX_KATAKANA
InitTextFormat:
InitTextFormat::
xor a ; FULL_WIDTH
ld [wFontWidth], a
ldh [hTextLineCurPos], a
@@ -173,7 +173,7 @@ InitTextFormat:
; call InitTextPrinting
; hTextLineLength <- a
InitTextPrintingInTextbox:
InitTextPrintingInTextbox::
push af
call InitTextPrinting
pop af
@@ -185,7 +185,7 @@ InitTextPrintingInTextbox:
; wCurTextLine <- 0
; write BGMap0-translated DE to hTextBGMap0Address
; call InitTextFormat
InitTextPrinting:
InitTextPrinting::
push hl
ld a, d
ldh [hTextHorizontalAlign], a
@@ -204,11 +204,11 @@ InitTextPrinting:
ret
; requests a text tile to be generated and prints it in the screen
; different modes depending on hffb0:
; hffb0 == $0: generate and place text tile
; hffb0 == $2 (bit 1 set): only generate text tile?
; hffb0 == $1 (bit 0 set): not even generate it, but just update text buffers?
Func_22ca:
; different modes depending on hffb0::
; hffb0 == $0:: generate and place text tile
; hffb0 == $2 (bit 1 set):: only generate text tile?
; hffb0 == $1 (bit 0 set):: not even generate it, but just update text buffers?
Func_22ca::
push hl
push de
push bc
@@ -237,7 +237,7 @@ Func_22ca:
; writes a to wCurTextTile and to the tile pointed to by hTextBGMap0Address,
; then increments hTextBGMap0Address and hTextLineCurPos
PlaceNextTextTile:
PlaceNextTextTile::
ld [wCurTextTile], a
ld hl, hTextBGMap0Address
ld e, [hl]
@@ -260,7 +260,7 @@ PlaceNextTextTile:
; when terminating half-width text with "\n" or TX_END, or switching to full-width
; with TX_HALF2FULL or to symbols with TX_SYMBOL, check if it's necessary to append
; a half-width space to finish an incomplete character pair.
TerminateHalfWidthText:
TerminateHalfWidthText::
ld a, [wFontWidth]
or a ; FULL_WIDTH
ret z
@@ -277,7 +277,7 @@ TerminateHalfWidthText:
pop hl
ret
Func_2325:
Func_2325::
call Func_235e
ret c
or a
@@ -324,7 +324,7 @@ Func_2325:
; search linked-list for text characters e/d (registers), if found hoist
; the result to head of list and return it. carry flag denotes success.
Func_235e:
Func_235e::
ld a, [wFontWidth]
or a
jr z, .print
@@ -356,7 +356,7 @@ Func_235e:
jr nz, .asm_238a ; ; linked list
inc h ; $c7 ; ;
ld a, [hl] ; if key1[l] == e and ;
cp d ; key2[l] == d: ;
cp d ; key2[l] == d:: ;
jr z, .asm_238f ; break ;
.asm_238a
ld h, $c8 ; ;
@@ -383,7 +383,7 @@ Func_235e:
ld h, $c9
inc c
dec c
jr z, .asm_23af ; if next[i] != NULL:
jr z, .asm_23af ; if next[i] != NULL::
ld l, c ; l ← next[i]
ld [hl], b ; prev[next[i]] ← prev[i]
.asm_23af
@@ -391,7 +391,7 @@ Func_235e:
ret ; (return new linked-list head in a)
; uppercases e if [wUppercaseHalfWidthLetters] is nonzero
CaseHalfWidthLetter:
CaseHalfWidthLetter::
ld a, [wUppercaseHalfWidthLetters]
or a
ret z
@@ -406,11 +406,11 @@ CaseHalfWidthLetter:
; iterates over text at hl until TX_END is found, and sets wFontWidth to
; FULL_WIDTH if the first character is TX_HALFWIDTH
; returns:
; returns::
; b = length of text in tiles
; c = length of text in bytes
; a = -b
GetTextLengthInTiles:
GetTextLengthInTiles::
ld a, [hl]
cp TX_HALFWIDTH
jr nz, .full_width
@@ -427,11 +427,11 @@ GetTextLengthInTiles:
; fallthrough
; iterates over text at hl until TX_END is found
; returns:
; returns::
; b = length of text in half-tiles
; c = length of text in bytes
; a = -b
GetTextLengthInHalfTiles:
GetTextLengthInHalfTiles::
push hl
push de
lb bc, $00, $00
@@ -439,8 +439,8 @@ GetTextLengthInHalfTiles:
ld a, [hli]
or a ; TX_END
jr z, .tx_end
inc c ; any char except TX_END: c ++
; TX_FULLWIDTH, TX_SYMBOL, or > TX_CTRL_END : b ++
inc c ; any char except TX_END:: c ++
; TX_FULLWIDTH, TX_SYMBOL, or > TX_CTRL_END :: b ++
cp TX_CTRL_START
jr c, .character_pair
cp TX_CTRL_END
@@ -457,7 +457,7 @@ GetTextLengthInHalfTiles:
jr nc, .char_loop
; TX_FULLWIDTH
.next
inc c ; TX_FULLWIDTH or TX_SYMBOL: c ++
inc c ; TX_FULLWIDTH or TX_SYMBOL:: c ++
inc hl
jr .char_loop
.tx_end
@@ -472,7 +472,7 @@ GetTextLengthInHalfTiles:
; the text with TX_END if it doesn't contain it already.
; fill any remaining bytes with spaces plus TX_END to match the length specified in a.
; return the text's actual length in characters (i.e. before the first TX_END) in e.
CopyTextData:
CopyTextData::
ld [wTextMaxLength], a
ld a, [hl]
cp TX_HALFWIDTH
@@ -552,7 +552,7 @@ CopyTextData:
; convert the number at hl to TX_SYMBOL text format and write it to wStringBuffer
; replace leading zeros with SYM_SPACE
TwoByteNumberToTxSymbol_TrimLeadingZeros:
TwoByteNumberToTxSymbol_TrimLeadingZeros::
push de
push bc
ld de, wStringBuffer
@@ -614,7 +614,7 @@ TwoByteNumberToTxSymbol_TrimLeadingZeros:
; d = half-width character 1 (left)
; e = half-width character 2 (right)
; b = destination VRAM tile number
GenerateTextTile:
GenerateTextTile::
push hl
push de
push bc
@@ -637,7 +637,7 @@ GenerateTextTile:
; create, at wTextTileBuffer, a half-width font tile
; made from the ascii characters given in d and e
CreateHalfWidthFontTile:
CreateHalfWidthFontTile::
push bc
ldh a, [hBankROM]
push af
@@ -673,7 +673,7 @@ CreateHalfWidthFontTile:
; copies a 1bpp tile corresponding to a half-width font character to de.
; the ascii value of the character to copy is provided in a.
; assumes BANK(HalfWidthFont) is already loaded.
CopyHalfWidthCharacterToDE:
CopyHalfWidthCharacterToDE::
sub $20 ; HalfWidthFont begins at ascii $20
ld l, a
ld h, $0
@@ -695,7 +695,7 @@ CopyHalfWidthCharacterToDE:
; create, at wTextTileBuffer, a full-width font tile given its tile
; number within the full-width font graphics (FullWidthFonts) in de.
; return its v*Tiles address in hl, and return c = TILE_SIZE.
CreateFullWidthFontTile_ConvertToTileDataAddress:
CreateFullWidthFontTile_ConvertToTileDataAddress::
push bc
call GetFullWidthFontTileOffset
call CreateFullWidthFontTile
@@ -703,10 +703,10 @@ CreateFullWidthFontTile_ConvertToTileDataAddress:
; fallthrough
; given a tile number in b, return its v*Tiles address in hl, and return c = TILE_SIZE
; wTilePatternSelector and wTilePatternSelectorCorrection are used to select the source:
; wTilePatternSelector and wTilePatternSelectorCorrection are used to select the source::
; - if wTilePatternSelector == $80 and wTilePatternSelectorCorrection == $00 -> $8000-$8FFF
; - if wTilePatternSelector == $88 and wTilePatternSelectorCorrection == $80 -> $8800-$97FF
ConvertTileNumberToTileDataAddress:
ConvertTileNumberToTileDataAddress::
ld hl, wTilePatternSelectorCorrection
ld a, b
xor [hl]
@@ -725,7 +725,7 @@ ConvertTileNumberToTileDataAddress:
; create, at wTextTileBuffer, a full-width font tile given its
; within the full-width font graphics (FullWidthFonts) in hl
CreateFullWidthFontTile:
CreateFullWidthFontTile::
ld a, BANK(Fonts) ; BANK(DuelGraphics)
call BankpushROM
ld de, wTextTileBuffer
@@ -746,7 +746,7 @@ CreateFullWidthFontTile:
; given two text characters at de, use the char at e (first one)
; to determine which type of text this pair of characters belongs to.
; return carry if TX_FULLWIDTH1 to TX_FULLWIDTH4.
ClassifyTextCharacterPair:
ClassifyTextCharacterPair::
ld a, [wFontWidth]
or a ; FULL_WIDTH
jr nz, .half_width
@@ -783,10 +783,10 @@ ClassifyTextCharacterPair:
; convert the full-width font tile number at de to the
; equivalent offset within the full-width font tile graphics.
; if d == TX_KATAKANA: get tile from the 0_0_katakana.1bpp font.
; if d == TX_HIRAGANA or d == $0: get tile from the 0_1_hiragana.1bpp or 0_2_digits_kanji1.1bpp font.
; if d >= TX_FULLWIDTH1 and d <= TX_FULLWIDTH4: get tile from one of the other full-width fonts.
GetFullWidthFontTileOffset:
; if d == TX_KATAKANA:: get tile from the 0_0_katakana.1bpp font.
; if d == TX_HIRAGANA or d == $0:: get tile from the 0_1_hiragana.1bpp or 0_2_digits_kanji1.1bpp font.
; if d >= TX_FULLWIDTH1 and d <= TX_FULLWIDTH4:: get tile from one of the other full-width fonts.
GetFullWidthFontTileOffset::
ld bc, $50 tiles_1bpp
ld a, d
cp TX_HIRAGANA
@@ -810,7 +810,7 @@ GetFullWidthFontTileOffset:
; pointers to VRAM?
; unreferenced
Unknown_2589:
Unknown_2589::
db $18
dw $8140
dw $817e
+3 -3
View File
@@ -1,5 +1,5 @@
; returns h * l in hl
HtimesL:
HtimesL::
push de
ld a, h
ld e, l
@@ -20,7 +20,7 @@ HtimesL:
ret
; return a random number between 0 and a (exclusive) in a
Random:
Random::
push hl
ld h, a
call UpdateRNGSources
@@ -31,7 +31,7 @@ Random:
ret
; get the next random numbers of the wRNG1 and wRNG2 sequences
UpdateRNGSources:
UpdateRNGSources::
push hl
push de
ld hl, wRNG1
+5 -5
View File
@@ -1,22 +1,22 @@
SaveGeneralSaveData:
SaveGeneralSaveData::
farcall _SaveGeneralSaveData
ret
LoadGeneralSaveData:
LoadGeneralSaveData::
farcall _LoadGeneralSaveData
ret
ValidateGeneralSaveData:
ValidateGeneralSaveData::
farcall _ValidateGeneralSaveData
ret
; adds card with card ID in register a to collection
; and updates album progress in RAM
AddCardToCollectionAndUpdateAlbumProgress:
AddCardToCollectionAndUpdateAlbumProgress::
farcall _AddCardToCollectionAndUpdateAlbumProgress
ret
SaveGame:
SaveGame::
push af
push bc
push de
+7 -7
View File
@@ -1,4 +1,4 @@
HandleMoveModeAPress:
HandleMoveModeAPress::
ldh a, [hBankROM]
push af
ld l, MAP_SCRIPT_OBJECTS
@@ -59,7 +59,7 @@ HandleMoveModeAPress:
; returns a map script pointer in hl given
; current map in wCurMap and which sub-script in l
; sets c if pointer is found
GetMapScriptPointer:
GetMapScriptPointer::
push bc
push hl
ld a, [wCurMap]
@@ -100,12 +100,12 @@ GetMapScriptPointer:
; are stored in the script-related NPC data for normal gameplay
; returns carry if a duel configuration was found
; for the given NPC deck ID
GetNPCDuelConfigurations:
GetNPCDuelConfigurations::
farcall _GetNPCDuelConfigurations
ret
; finds a Script from the first byte and puts the next two bytes (usually arguments?) into cb
RunOverworldScript:
RunOverworldScript::
ld hl, wScriptPointer
ld a, [hli]
ld h, [hl]
@@ -132,7 +132,7 @@ RunOverworldScript:
pop bc
jp hl
Func_3b11:
Func_3b11::
ldh a, [hBankROM]
push af
ld a, BANK(_GameLoop)
@@ -142,7 +142,7 @@ Func_3b11:
call BankswitchROM
ret
Func_3b21:
Func_3b21::
ldh a, [hBankROM]
push af
ld a, BANK(Func_1c8bc)
@@ -152,7 +152,7 @@ Func_3b21:
call BankswitchROM
ret
Func_3b31:
Func_3b31::
ldh a, [hBankROM]
push af
ld a, BANK(Func_1cb18)
+6 -6
View File
@@ -1,5 +1,5 @@
; something window scroll
Func_3e44:
Func_3e44::
push af
push hl
push bc
@@ -57,7 +57,7 @@ Func_3e44:
; apply background scroll for lines 0 to 96 using the values at BGScrollData
; skip if wApplyBGScroll is non-0
ApplyBackgroundScroll:
ApplyBackgroundScroll::
push af
push hl
call DisableInt_LYCoincidence
@@ -109,7 +109,7 @@ ApplyBackgroundScroll:
pop af
ret
BGScrollData:
BGScrollData::
db 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3
db 4, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0
db 0, -1, -1, -1, -2, -2, -2, -3, -3, -3, -4, -4, -4, -4, -4, -4
@@ -117,7 +117,7 @@ BGScrollData:
; x = BGScrollData[(wVBlankCounter + a) & $3f]
; return, in register a, x rotated right [wBGScrollMod]-1 times (max 3 times)
GetNextBackgroundScroll:
GetNextBackgroundScroll::
ld hl, wVBlankCounter
add [hl]
and $3f
@@ -144,7 +144,7 @@ GetNextBackgroundScroll:
ret
; enable lcdc interrupt on LYC=LC coincidence
EnableInt_LYCoincidence:
EnableInt_LYCoincidence::
push hl
ld hl, rSTAT
set STAT_LYC, [hl]
@@ -155,7 +155,7 @@ EnableInt_LYCoincidence:
ret
; disable lcdc interrupt and the LYC=LC coincidence trigger
DisableInt_LYCoincidence:
DisableInt_LYCoincidence::
push hl
ld hl, rSTAT
res STAT_LYC, [hl]
+24 -24
View File
@@ -1,5 +1,5 @@
; called at roughly 240Hz by TimerHandler
SerialTimerHandler:
SerialTimerHandler::
ld a, [wSerialOp]
cp $29
jr z, .begin_transfer
@@ -35,7 +35,7 @@ SerialTimerHandler:
ld [hl], $0
ret
Func_0cc5:
Func_0cc5::
ld hl, wSerialRecvCounter
or a
jr nz, .asm_cdc
@@ -94,14 +94,14 @@ Func_0cc5:
scf
ret
SerialHandler:
SerialHandler::
push af
push hl
push de
push bc
ld a, [wce63] ;
or a ;
jr z, .asm_d35 ; if [wce63] nonzero:
jr z, .asm_d35 ; if [wce63] nonzero::
call Func_3189 ; ?
jr .done ; return
.asm_d35
@@ -148,7 +148,7 @@ SerialHandler:
; handles a byte read from serial transfer by decoding it and storing it into
; the receive buffer
SerialHandleRecv:
SerialHandleRecv::
ld hl, wSerialLastReadCA
ld e, [hl]
dec e
@@ -210,7 +210,7 @@ SerialHandleRecv:
; prepares a byte to send over serial transfer, either from the send-save byte
; slot or the send buffer
SerialHandleSend:
SerialHandleSend::
ld hl, wSerialSendSave
ld a, [hl]
or a
@@ -260,7 +260,7 @@ SerialHandleSend:
ret
; store byte at a in wSerialSendBuf for sending
SerialSendByte:
SerialSendByte::
push hl
push de
push bc
@@ -290,7 +290,7 @@ SerialSendByte:
ret
; sets carry if [wSerialRecvCounter] nonzero
Func_0e32:
Func_0e32::
ld a, [wSerialRecvCounter]
or a
ret z
@@ -298,7 +298,7 @@ Func_0e32:
ret
; receive byte in wSerialRecvBuf
SerialRecvByte:
SerialRecvByte::
push hl
ld hl, wSerialRecvCounter
ld a, [hl]
@@ -331,7 +331,7 @@ SerialRecvByte:
ret
; exchange c bytes. send bytes at hl and store received bytes in de
SerialExchangeBytes:
SerialExchangeBytes::
ld b, c
.asm_e64
ld a, b
@@ -368,7 +368,7 @@ SerialExchangeBytes:
ret
; go into slave mode (external clock) for serial transfer?
Func_0e8e:
Func_0e8e::
call ClearSerialData
ld a, $12
ldh [rSB], a ; send $12
@@ -383,7 +383,7 @@ Func_0e8e:
ret
; disable serial interrupt, and clear rSB, rSC, and serial registers in WRAM
ResetSerial:
ResetSerial::
ldh a, [rIE]
and ~(1 << INT_SERIAL)
ldh [rIE], a
@@ -393,7 +393,7 @@ ResetSerial:
; fallthrough
; zero serial registers in WRAM
ClearSerialData:
ClearSerialData::
ld hl, wSerialOp
ld bc, wSerialEnd - wSerialOp
.loop
@@ -406,7 +406,7 @@ ClearSerialData:
ret
; store bc bytes from hl in wSerialSendBuf for sending
SerialSendBytes:
SerialSendBytes::
push bc
.send_loop
ld a, [hli]
@@ -427,7 +427,7 @@ SerialSendBytes:
ret
; receive bc bytes in wSerialRecvBuf and save them to hl
SerialRecvBytes:
SerialRecvBytes::
push bc
.recv_loop
call SerialRecvByte
@@ -452,7 +452,7 @@ SerialRecvBytes:
scf
ret
Func_0ef1:
Func_0ef1::
ld de, wcb79
ld hl, sp+$fe
ld a, l
@@ -471,7 +471,7 @@ Func_0ef1:
or a
ret
Func_0f05:
Func_0f05::
push hl
ld hl, wcb7b
ld a, [hli]
@@ -491,7 +491,7 @@ Func_0f05:
scf
ret
Func_0f1d:
Func_0f1d::
ld a, [wSerialFlags]
or a
jr nz, .asm_f27
@@ -510,7 +510,7 @@ Func_0f1d:
; load the number at wSerialFlags (error code?) to TxRam3, print
; TransmissionErrorText, exit the duel, and reset serial registers.
DuelTransmissionError:
DuelTransmissionError::
ld a, [wSerialFlags]
ld l, a
ld h, 0
@@ -530,7 +530,7 @@ DuelTransmissionError:
ret
; exchange RNG during a link duel between both games
ExchangeRNG:
ExchangeRNG::
ld a, [wDuelType]
cp DUELTYPE_LINK
jr z, .link_duel
@@ -559,7 +559,7 @@ ExchangeRNG:
; finally exchange RNG data.
; the receiving side will use this data to read the OPPACTION_* value in
; [hOppActionTableIndex] and match it by calling the corresponding OppAction* function
SetOppAction_SerialSendDuelData:
SetOppAction_SerialSendDuelData::
push hl
push bc
ldh [hOppActionTableIndex], a
@@ -579,7 +579,7 @@ SetOppAction_SerialSendDuelData:
; receive 10 bytes of data from wSerialRecvBuf and store them into hOppActionTableIndex,
; hTempCardIndex_ff9f, hTemp_ffa0, and hTempPlayAreaLocation_ffa1,
; and hTempRetreatCostCards. also exchange RNG data.
SerialRecvDuelData:
SerialRecvDuelData::
push hl
push bc
ld hl, hOppActionTableIndex
@@ -592,7 +592,7 @@ SerialRecvDuelData:
; serial send 8 bytes at f, a, l, h, e, d, c, b
; only during a duel against a link opponent
SerialSend8Bytes:
SerialSend8Bytes::
push hl
push af
ld a, DUELVARS_DUELIST_TYPE
@@ -643,7 +643,7 @@ SerialSend8Bytes:
ret
; serial recv 8 bytes to f, a, l, h, e, d, c, b
SerialRecv8Bytes:
SerialRecv8Bytes::
ld hl, wTempSerialBuf
ld bc, 8
push hl
+8 -8
View File
@@ -1,6 +1,6 @@
; initialize scroll, window, and lcdc registers, set trampoline functions
; for the lcdc and vblank interrupts, latch clock data, and enable SRAM/RTC
SetupRegisters:
SetupRegisters::
xor a
ldh [rSCY], a
ldh [rSCX], a
@@ -28,11 +28,11 @@ SetupRegisters:
ld [MBC3LatchClock], a
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
NoOp:
NoOp::
ret
; sets wConsole and, if CGB, selects WRAM bank 1 and switches to double speed mode
DetectConsole:
DetectConsole::
ld b, CONSOLE_CGB
cp GBC
jr z, .got_console
@@ -52,7 +52,7 @@ DetectConsole:
ret
; initialize the palettes (both monochrome and color)
SetupPalettes:
SetupPalettes::
ld hl, wBGP
ld a, %11100100
ldh [rBGP], a
@@ -82,14 +82,14 @@ SetupPalettes:
call FlushAllCGBPalettes
ret
InitialPalette:
InitialPalette::
rgb 28, 28, 24
rgb 21, 21, 16
rgb 10, 10, 08
rgb 00, 00, 00
; clear VRAM tile data ([wTileMapFill] should be an empty tile)
SetupVRAM:
SetupVRAM::
call FillTileMap
call CheckForCGB
jr c, .vram0
@@ -109,7 +109,7 @@ SetupVRAM:
ret
; fill VRAM0 BG map 0 with [wTileMapFill] and VRAM1 BG map 0 with $00
FillTileMap:
FillTileMap::
call BankswitchVRAM0
ld hl, v0BGMap0
ld bc, v0BGMap1 - v0BGMap0
@@ -137,7 +137,7 @@ FillTileMap:
ret
; zero work RAM, stack area, and high RAM ($C000-$DFFF, $FF80-$FFEF)
ZeroRAM:
ZeroRAM::
ld hl, $c000
ld bc, $e000 - $c000
.zero_wram_loop
+20 -20
View File
@@ -1,5 +1,5 @@
; setup SNES memory $810-$867 and palette
InitSGB:
InitSGB::
ld hl, MaskEnPacket_Freeze
call SendSGB
ld hl, DataSndPacket1
@@ -24,65 +24,65 @@ InitSGB:
call SendSGB
ret
DataSndPacket1:
DataSndPacket1::
sgb DATA_SND, 1 ; sgb_command, length
dwb $085d, $00 ; destination address, bank
db $0b ; number of bytes to write
db $8c, $d0, $f4, $60, $00, $00, $00, $00, $00, $00, $00 ; data bytes
DataSndPacket2:
DataSndPacket2::
sgb DATA_SND, 1 ; sgb_command, length
dwb $0852, $00 ; destination address, bank
db $0b ; number of bytes to write
db $a9, $e7, $9f, $01, $c0, $7e, $e8, $e8, $e8, $e8, $e0 ; data bytes
DataSndPacket3:
DataSndPacket3::
sgb DATA_SND, 1 ; sgb_command, length
dwb $0847, $00 ; destination address, bank
db $0b ; number of bytes to write
db $c4, $d0, $16, $a5, $cb, $c9, $05, $d0, $10, $a2, $28 ; data bytes
DataSndPacket4:
DataSndPacket4::
sgb DATA_SND, 1 ; sgb_command, length
dwb $083c, $00 ; destination address, bank
db $0b ; number of bytes to write
db $f0, $12, $a5, $c9, $c9, $c8, $d0, $1c, $a5, $ca, $c9 ; data bytes
DataSndPacket5:
DataSndPacket5::
sgb DATA_SND, 1 ; sgb_command, length
dwb $0831, $00 ; destination address, bank
db $0b ; number of bytes to write
db $0c, $a5, $ca, $c9, $7e, $d0, $06, $a5, $cb, $c9, $7e ; data bytes
DataSndPacket6:
DataSndPacket6::
sgb DATA_SND, 1 ; sgb_command, length
dwb $0826, $00 ; destination address, bank
db $0b ; number of bytes to write
db $39, $cd, $48, $0c, $d0, $34, $a5, $c9, $c9, $80, $d0 ; data bytes
DataSndPacket7:
DataSndPacket7::
sgb DATA_SND, 1 ; sgb_command, length
dwb $081b, $00 ; destination address, bank
db $0b ; number of bytes to write
db $ea, $ea, $ea, $ea, $ea, $a9, $01, $cd, $4f, $0c, $d0 ; data bytes
DataSndPacket8:
DataSndPacket8::
sgb DATA_SND, 1 ; sgb_command, length
dwb $0810, $00 ; destination address, bank
db $0b ; number of bytes to write
db $4c, $20, $08, $ea, $ea, $ea, $ea, $ea, $60, $ea, $ea ; data bytes
MaskEnPacket_Freeze:
MaskEnPacket_Freeze::
sgb MASK_EN, 1 ; sgb_command, length
db MASK_EN_FREEZE_SCREEN
ds $0e
MaskEnPacket_Cancel:
MaskEnPacket_Cancel::
sgb MASK_EN, 1 ; sgb_command, length
db MASK_EN_CANCEL_MASK
ds $0e
Pal01Packet_InitSGB:
Pal01Packet_InitSGB::
sgb PAL01, 1 ; sgb_command, length
rgb 28, 28, 24
rgb 20, 20, 16
@@ -93,7 +93,7 @@ Pal01Packet_InitSGB:
rgb 7, 0, 0
db $00
Pal23Packet_0b00:
Pal23Packet_0b00::
sgb PAL23, 1 ; sgb_command, length
rgb 0, 31, 0
rgb 0, 15, 0
@@ -104,7 +104,7 @@ Pal23Packet_0b00:
rgb 0, 0, 7
db $00
AttrBlkPacket_0b10:
AttrBlkPacket_0b10::
sgb ATTR_BLK, 1 ; sgb_command, length
db 1 ; number of data sets
; Control Code, Color Palette Designation, X1, Y1, X2, Y2
@@ -113,7 +113,7 @@ AttrBlkPacket_0b10:
ds 2 ; data set 3
; send SGB packet at hl (or packets, if length > 1)
SendSGB:
SendSGB::
ld a, [hl]
and $7
ret z ; return if packet length is 0
@@ -157,7 +157,7 @@ SendSGB:
; SGB hardware detection
; return carry if SGB detected and disable multi-controller mode before returning
DetectSGB:
DetectSGB::
ld bc, 60
call Wait
ld hl, MltReq2Packet
@@ -199,12 +199,12 @@ DetectSGB:
scf
ret
MltReq1Packet:
MltReq1Packet::
sgb MLT_REQ, 1 ; sgb_command, length
db MLT_REQ_1_PLAYER
ds $0e
MltReq2Packet:
MltReq2Packet::
sgb MLT_REQ, 1 ; sgb_command, length
db MLT_REQ_2_PLAYERS
ds $0e
@@ -212,7 +212,7 @@ MltReq2Packet:
; fill v*Tiles1 and v*Tiles2 with data at hl
; write $0d sequences of $80,$81,$82,...,$94 separated each by $0c bytes to v*BGMap0
; send the SGB packet at de
Func_0bcb:
Func_0bcb::
di
push de
.wait_vblank
@@ -255,7 +255,7 @@ Func_0bcb:
ret
; loops 63000 * bc cycles (~15 * bc ms)
Wait:
Wait::
ld de, 1750
.loop
nop
+13 -13
View File
@@ -1,38 +1,38 @@
SetupSound:
SetupSound::
farcall _SetupSound
ret
StopMusic:
StopMusic::
xor a ; MUSIC_STOP
PlaySong:
PlaySong::
farcall _PlaySong
ret
; return a = 0: song finished, a = 1: song not finished
AssertSongFinished:
; return a = 0:: song finished, a = 1:: song not finished
AssertSongFinished::
farcall _AssertSongFinished
ret
; return a = 0: SFX finished, a = 1: SFX not finished
AssertSFXFinished:
; return a = 0:: SFX finished, a = 1:: SFX not finished
AssertSFXFinished::
farcall _AssertSFXFinished
ret
Func_3794:
Func_3794::
ld a, $04
PlaySFX:
PlaySFX::
farcall _PlaySFX
ret
PauseSong:
PauseSong::
farcall _PauseSong
ret
ResumeSong:
ResumeSong::
farcall _ResumeSong
ret
Func_37a5:
Func_37a5::
ldh a, [hBankROM]
push af
push hl
@@ -53,7 +53,7 @@ Func_37a5:
call BankswitchROM
ret
Func_37c5:
Func_37c5::
ld c, $08
.asm_37c7
ld b, $06
+3 -3
View File
@@ -1,5 +1,5 @@
; switch SRAM bank to a
BankswitchSRAM:
BankswitchSRAM::
push af
ldh [hBankSRAM], a
ld [MBC3SRamBank], a
@@ -9,7 +9,7 @@ BankswitchSRAM:
ret
; enable external RAM (SRAM)
EnableSRAM:
EnableSRAM::
push af
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
@@ -17,7 +17,7 @@ EnableSRAM:
ret
; disable external RAM (SRAM)
DisableSRAM:
DisableSRAM::
push af
xor a ; SRAM_DISABLE
ld [MBC3SRamEnable], a
+1 -1
View File
@@ -1,5 +1,5 @@
SECTION "start", ROM0
Start:
Start::
di
ld sp, $fffe
push af
+35 -35
View File
@@ -1,6 +1,6 @@
; doubles the damage at de if swords dance or focus energy was used
; in the last turn by the turn holder's arena Pokemon
HandleDoubleDamageSubstatus:
HandleDoubleDamageSubstatus::
ld a, DUELVARS_ARENA_CARD_SUBSTATUS3
call GetTurnDuelistVariable
bit SUBSTATUS3_THIS_TURN_DOUBLE_DAMAGE, [hl]
@@ -31,7 +31,7 @@ HandleDoubleDamageSubstatus:
; check if the defending card (turn holder's arena card) has any substatus that
; reduces the damage dealt to it this turn (SUBSTATUS1 or Pkmn Powers).
; damage is given in de as input and the possibly updated damage is also returned in de.
HandleDamageReduction:
HandleDamageReduction::
call HandleDamageReductionExceptSubstatus2
ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
call GetNonTurnDuelistVariable
@@ -60,7 +60,7 @@ HandleDamageReduction:
; check if the defending card (turn holder's arena card) has any substatus that
; reduces the damage dealt to it this turn. (SUBSTATUS1 or Pkmn Powers)
; damage is given in de as input and the possibly updated damage is also returned in de.
HandleDamageReductionExceptSubstatus2:
HandleDamageReductionExceptSubstatus2::
ld a, [wNoDamageOrEffect]
or a
jr nz, .no_damage
@@ -150,7 +150,7 @@ HandleDamageReductionExceptSubstatus2:
; check for Invisible Wall, Kabuto Armor, NShield, or Transparency, in order to
; possibly reduce or make zero the damage at de.
HandleDamageReductionOrNoDamageFromPkmnPowerEffects:
HandleDamageReductionOrNoDamageFromPkmnPowerEffects::
ld a, [wLoadedAttackCategory]
cp POKEMON_POWER
ret z
@@ -173,7 +173,7 @@ HandleDamageReductionOrNoDamageFromPkmnPowerEffects:
; attacking Pokemon (turn holder's arena Pokemon) takes 10 damage.
; ignore if damage taken at de is 0.
; used to bounce back a damaging attack.
HandleStrikesBack_AgainstDamagingAttack:
HandleStrikesBack_AgainstDamagingAttack::
ld a, e
or d
ret z
@@ -233,7 +233,7 @@ HandleStrikesBack_AgainstDamagingAttack:
; return carry if NShield or Transparency activate (if MEW_LV8 or HAUNTER_LV17 is
; the turn holder's arena Pokemon), and print their corresponding text if so
HandleNShieldAndTransparency:
HandleNShieldAndTransparency::
push de
ld a, DUELVARS_ARENA_CARD
add e
@@ -274,7 +274,7 @@ HandleNShieldAndTransparency:
; return carry if the turn holder's arena Pokemon is under a condition that makes
; it unable to attack. also return in hl the text id to be displayed
HandleCantAttackSubstatus:
HandleCantAttackSubstatus::
ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
call GetTurnDuelistVariable
or a
@@ -296,7 +296,7 @@ HandleCantAttackSubstatus:
; return carry if the turn holder's arena Pokemon cannot use
; selected attack at wSelectedAttack due to amnesia
HandleAmnesiaSubstatus:
HandleAmnesiaSubstatus::
ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
call GetTurnDuelistVariable
or a
@@ -319,7 +319,7 @@ HandleAmnesiaSubstatus:
ret
; return carry if the turn holder's attack was unsuccessful due to sand attack or smokescreen effect
HandleSandAttackOrSmokescreenSubstatus:
HandleSandAttackOrSmokescreenSubstatus::
call CheckSandAttackOrSmokescreenSubstatus
ret nc
call TossCoin
@@ -332,7 +332,7 @@ HandleSandAttackOrSmokescreenSubstatus:
ret
; return carry if the turn holder's arena card is under the effects of sand attack or smokescreen
CheckSandAttackOrSmokescreenSubstatus:
CheckSandAttackOrSmokescreenSubstatus::
ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
call GetTurnDuelistVariable
or a
@@ -355,7 +355,7 @@ CheckSandAttackOrSmokescreenSubstatus:
; return carry if the defending card (turn holder's arena card) is under a substatus
; that prevents any damage or effect dealt to it for a turn.
; also return the cause of the substatus in wNoDamageOrEffect
HandleNoDamageOrEffectSubstatus:
HandleNoDamageOrEffectSubstatus::
xor a
ld [wNoDamageOrEffect], a
ld a, [wLoadedAttackCategory]
@@ -408,7 +408,7 @@ HandleNoDamageOrEffectSubstatus:
; if the Pokemon being attacked is HAUNTER_LV17, and its Transparency is active,
; there is a 50% chance that any damage or effect is prevented
; return carry if damage is prevented
HandleTransparency:
HandleTransparency::
ld a, [wTempNonTurnDuelistCardID]
cp HAUNTER_LV17
jr z, .transparency
@@ -435,8 +435,8 @@ HandleTransparency:
; return carry and return the appropriate text id in hl if the target has an
; special status or power that prevents any damage or effect done to it this turn
; input: a = NO_DAMAGE_OR_EFFECT_*
CheckNoDamageOrEffect:
; input:: a = NO_DAMAGE_OR_EFFECT_*
CheckNoDamageOrEffect::
ld a, [wNoDamageOrEffect]
or a
ret z
@@ -461,7 +461,7 @@ CheckNoDamageOrEffect:
scf
ret
NoDamageOrEffectTextIDTable:
NoDamageOrEffectTextIDTable::
tx NoDamageOrEffectDueToAgilityText ; NO_DAMAGE_OR_EFFECT_AGILITY
tx NoDamageOrEffectDueToBarrierText ; NO_DAMAGE_OR_EFFECT_BARRIER
tx NoDamageOrEffectDueToFlyText ; NO_DAMAGE_OR_EFFECT_FLY
@@ -469,7 +469,7 @@ NoDamageOrEffectTextIDTable:
tx NoDamageOrEffectDueToNShieldText ; NO_DAMAGE_OR_EFFECT_NSHIELD
; return carry if turn holder has Omanyte and its Clairvoyance Pkmn Power is active
IsClairvoyanceActive:
IsClairvoyanceActive::
ld a, MUK
call CountPokemonIDInBothPlayAreas
ccf
@@ -480,11 +480,11 @@ IsClairvoyanceActive:
; returns carry if turn holder's arena card is paralyzed, asleep, confused,
; and/or toxic gas in play, meaning that attack and/or pkmn power cannot be used
CheckCannotUseDueToStatus:
CheckCannotUseDueToStatus::
xor a
; same as above, but if a is non-0, only toxic gas is checked
CheckCannotUseDueToStatus_OnlyToxicGasIfANon0:
CheckCannotUseDueToStatus_OnlyToxicGasIfANon0::
or a
jr nz, .check_toxic_gas
ld a, DUELVARS_ARENA_CARD_STATUS
@@ -503,8 +503,8 @@ CheckCannotUseDueToStatus_OnlyToxicGasIfANon0:
; return, in a, the amount of times that the Pokemon card with a given ID is found in the
; play area of both duelists. Also return carry if the Pokemon card is at least found once.
; if the arena Pokemon is asleep, confused, or paralyzed (Pkmn Power-incapable), it doesn't count.
; input: a = Pokemon card ID to search
CountPokemonIDInBothPlayAreas:
; input:: a = Pokemon card ID to search
CountPokemonIDInBothPlayAreas::
push bc
ld [wTempPokemonID_ce7c], a
call CountPokemonIDInPlayArea
@@ -525,8 +525,8 @@ CountPokemonIDInBothPlayAreas:
; return, in a, the amount of times that the Pokemon card with a given ID is found in the
; turn holder's play area. Also return carry if the Pokemon card is at least found once.
; if the arena Pokemon is asleep, confused, or paralyzed (Pkmn Power-incapable), it doesn't count.
; input: a = Pokemon card ID to search
CountPokemonIDInPlayArea:
; input:: a = Pokemon card ID to search
CountPokemonIDInPlayArea::
push hl
push de
push bc
@@ -574,7 +574,7 @@ CountPokemonIDInPlayArea:
; return, in a, the retreat cost of the card in wLoadedCard1,
; adjusting for any Dodrio's Retreat Aid Pkmn Power that is active.
GetLoadedCard1RetreatCost:
GetLoadedCard1RetreatCost::
ld c, 0
ld a, DUELVARS_BENCH
call GetTurnDuelistVariable
@@ -607,7 +607,7 @@ GetLoadedCard1RetreatCost:
ret
; return carry if the turn holder's arena Pokemon is affected by Acid and can't retreat
CheckCantRetreatDueToAcid:
CheckCantRetreatDueToAcid::
ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
call GetTurnDuelistVariable
or a
@@ -622,7 +622,7 @@ CheckCantRetreatDueToAcid:
ret
; return carry if the turn holder is affected by Headache and trainer cards can't be used
CheckCantUseTrainerDueToHeadache:
CheckCantUseTrainerDueToHeadache::
ld a, DUELVARS_ARENA_CARD_SUBSTATUS3
call GetTurnDuelistVariable
or a
@@ -633,7 +633,7 @@ CheckCantUseTrainerDueToHeadache:
ret
; return carry if any duelist has Aerodactyl and its Prehistoric Power Pkmn Power is active
IsPrehistoricPowerActive:
IsPrehistoricPowerActive::
ld a, AERODACTYL
call CountPokemonIDInBothPlayAreas
ret nc
@@ -646,7 +646,7 @@ IsPrehistoricPowerActive:
; clears some SUBSTATUS2 conditions from the turn holder's active Pokemon.
; more specifically, those conditions that reduce the damage from an attack
; or prevent the opposing Pokemon from attacking the substatus condition inducer.
ClearDamageReductionSubstatus2:
ClearDamageReductionSubstatus2::
ld a, DUELVARS_ARENA_CARD_SUBSTATUS2
call GetTurnDuelistVariable
or a
@@ -667,7 +667,7 @@ ClearDamageReductionSubstatus2:
ret
; clears the SUBSTATUS1 and updates the double damage condition of the player about to start his turn
UpdateSubstatusConditions_StartOfTurn:
UpdateSubstatusConditions_StartOfTurn::
ld a, DUELVARS_ARENA_CARD_SUBSTATUS1
call GetTurnDuelistVariable
ld [hl], $0
@@ -681,7 +681,7 @@ UpdateSubstatusConditions_StartOfTurn:
ret
; clears the SUBSTATUS2, Headache, and updates the double damage condition of the player ending his turn
UpdateSubstatusConditions_EndOfTurn:
UpdateSubstatusConditions_EndOfTurn::
ld a, DUELVARS_ARENA_CARD_SUBSTATUS3
call GetTurnDuelistVariable
res SUBSTATUS3_HEADACHE, [hl]
@@ -699,7 +699,7 @@ UpdateSubstatusConditions_EndOfTurn:
ret
; return carry if turn holder has Blastoise and its Rain Dance Pkmn Power is active
IsRainDanceActive:
IsRainDanceActive::
ld a, BLASTOISE
call CountPokemonIDInPlayArea
ret nc ; return if no Pkmn Power-capable Blastoise found in turn holder's play area
@@ -710,7 +710,7 @@ IsRainDanceActive:
; return carry if card at [hTempCardIndex_ff98] is a water energy card AND
; if card at [hTempPlayAreaLocation_ff9d] is a water Pokemon card.
CheckRainDanceScenario:
CheckRainDanceScenario::
ldh a, [hTempCardIndex_ff98]
call GetCardIDFromDeckIndex
call GetCardType
@@ -728,7 +728,7 @@ CheckRainDanceScenario:
; if the defending (non-turn) card's HP is 0 and the attacking (turn) card's HP
; is not, the attacking card faints if it was affected by destiny bond
HandleDestinyBondSubstatus:
HandleDestinyBondSubstatus::
ld a, DUELVARS_ARENA_CARD_SUBSTATUS1
call GetNonTurnDuelistVariable
cp SUBSTATUS1_DESTINY_BOND
@@ -768,7 +768,7 @@ HandleDestinyBondSubstatus:
; when MACHAMP is damaged, if its Strikes Back is active, the
; attacking Pokemon (turn holder's arena Pokemon) takes 10 damage.
; used to bounce back an attack of the RESIDUAL category
HandleStrikesBack_AgainstResidualAttack:
HandleStrikesBack_AgainstResidualAttack::
ld a, [wTempNonTurnDuelistCardID]
cp MACHAMP
jr z, .strikes_back
@@ -789,7 +789,7 @@ HandleStrikesBack_AgainstResidualAttack:
call nc, WaitForWideTextBoxInput
ret
ApplyStrikesBack_AgainstResidualAttack:
ApplyStrikesBack_AgainstResidualAttack::
push hl
call LoadTxRam3
ld a, [wTempTurnDuelistCardID]
@@ -822,7 +822,7 @@ ApplyStrikesBack_AgainstResidualAttack:
; if the id of the card provided in register a as a deck index is MUK,
; clear the changed type of all arena and bench Pokemon
ClearChangedTypesIfMuk:
ClearChangedTypesIfMuk::
call GetCardIDFromDeckIndex
ld a, e
cp MUK
+4 -4
View File
@@ -1,7 +1,7 @@
; switch to rombank (a + top2 of h shifted down),
; set top2 of h to 01 (switchable ROM bank area),
; return old rombank id on top-of-stack
BankpushROM:
BankpushROM::
push hl
push bc
push af
@@ -38,7 +38,7 @@ BankpushROM:
; switch to rombank a,
; return old rombank id on top-of-stack
BankpushROM2:
BankpushROM2::
push hl
push bc
push af
@@ -66,7 +66,7 @@ BankpushROM2:
ret
; restore rombank from top-of-stack
BankpopROM:
BankpopROM::
push hl
push de
ld hl, sp+$7
@@ -87,7 +87,7 @@ BankpopROM:
ret
; switch ROM bank to a
BankswitchROM:
BankswitchROM::
ldh [hBankROM], a
ld [MBC3RomBank], a
ret
+17 -17
View File
@@ -1,7 +1,7 @@
; copy c bytes of data from de to hl
; if LCD on, copy during h-blank only
SafeCopyDataDEtoHL:
SafeCopyDataDEtoHL::
ld a, [wLCDC] ;
bit LCDC_ENABLE_F, a ;
jr nz, .lcd_on ; assert that LCD is on
@@ -17,7 +17,7 @@ SafeCopyDataDEtoHL:
; returns v*BGMap0 + BG_MAP_WIDTH * e + d in hl.
; used to map coordinates at de to a BGMap0 address.
DECoordToBGMap0Address:
DECoordToBGMap0Address::
ld l, e
ld h, $0
add hl, hl
@@ -34,7 +34,7 @@ DECoordToBGMap0Address:
ret
; Apply SCX and SCY correction to xy coordinates at de
AdjustCoordinatesForBGScroll:
AdjustCoordinatesForBGScroll::
push af
ldh a, [hSCX]
rra
@@ -56,7 +56,7 @@ AdjustCoordinatesForBGScroll:
; Draws a bxc text box at de printing a name in the left side of the top border.
; The name's text id must be at hl when this function is called.
; Mostly used to print text boxes for talked-to NPCs, but occasionally used in duels as well.
DrawLabeledTextBox:
DrawLabeledTextBox::
ld a, [wConsole]
cp CONSOLE_SGB
jr nz, .draw_textbox
@@ -150,7 +150,7 @@ DrawLabeledTextBox:
; Draws a bxc text box at de to print menu data in the overworld.
; Also used to print a text box during a duel.
; When talking to NPCs, DrawLabeledTextBox is used instead.
DrawRegularTextBox:
DrawRegularTextBox::
ld a, [wConsole]
cp CONSOLE_CGB
jr z, DrawRegularTextBoxCGB
@@ -158,7 +158,7 @@ DrawRegularTextBox:
jp z, DrawRegularTextBoxSGB
; fallthrough
DrawRegularTextBoxDMG:
DrawRegularTextBoxDMG::
call DECoordToBGMap0Address
; top line (border) of the text box
ld a, SYM_BOX_TOP
@@ -166,9 +166,9 @@ DrawRegularTextBoxDMG:
call CopyLine
; fallthrough
; continue drawing a labeled or regular textbox on DMG or SGB:
; continue drawing a labeled or regular textbox on DMG or SGB::
; body and bottom line of either type of textbox
ContinueDrawingTextBoxDMGorSGB:
ContinueDrawingTextBoxDMGorSGB::
dec c
dec c
.draw_text_box_body_loop
@@ -187,7 +187,7 @@ ContinueDrawingTextBoxDMGorSGB:
; e = value of byte b
; a = value of bytes [1, b-1]
; b is supposed to be BG_MAP_WIDTH or smaller, else the stack would get corrupted
CopyLine:
CopyLine::
add sp, -BG_MAP_WIDTH
push hl
push bc
@@ -219,7 +219,7 @@ CopyLine:
ret
; DrawRegularTextBox branches here on CGB console
DrawRegularTextBoxCGB:
DrawRegularTextBoxCGB::
call DECoordToBGMap0Address
; top line (border) of the text box
ld a, SYM_BOX_TOP
@@ -227,9 +227,9 @@ DrawRegularTextBoxCGB:
call CopyCurrentLineTilesAndAttrCGB
; fallthrough
; continue drawing a labeled or regular textbox on CGB:
; continue drawing a labeled or regular textbox on CGB::
; body and bottom line of either type of textbox
ContinueDrawingTextBoxCGB:
ContinueDrawingTextBoxCGB::
dec c
dec c
.draw_text_box_body_loop
@@ -257,13 +257,13 @@ ContinueDrawingTextBoxCGB:
; e = id of top right tile
; a = id of rest of tiles
; Assumes b = SCREEN_WIDTH and that VRAM bank 0 is loaded
CopyCurrentLineTilesAndAttrCGB:
CopyCurrentLineTilesAndAttrCGB::
push hl
call CopyLine
pop hl
; fallthrough
CopyCurrentLineAttrCGB:
CopyCurrentLineAttrCGB::
call BankswitchVRAM1
ld a, [wTextBoxFrameType] ; on CGB, wTextBoxFrameType determines the palette and the other attributes
ld e, a
@@ -273,7 +273,7 @@ CopyCurrentLineAttrCGB:
ret
; DrawRegularTextBox branches here on SGB console
DrawRegularTextBoxSGB:
DrawRegularTextBoxSGB::
push bc
push de
call DrawRegularTextBoxDMG
@@ -284,7 +284,7 @@ DrawRegularTextBoxSGB:
ret z
; fallthrough
ColorizeTextBoxSGB:
ColorizeTextBoxSGB::
push bc
push de
ld hl, wTempSGBPacket
@@ -326,7 +326,7 @@ ColorizeTextBoxSGB:
call SendSGB
ret
AttrBlkPacket_TextBox:
AttrBlkPacket_TextBox::
sgb ATTR_BLK, 1 ; sgb_command, length
db 1 ; number of data sets
; Control Code, Color Palette Designation, X1, Y1, X2, Y2
+26 -26
View File
@@ -1,9 +1,9 @@
; Fill a bxc rectangle at de and at sp-$26,
; using tile a and the subsequent ones in the following pattern:
; using tile a and the subsequent ones in the following pattern::
; | a+0*l+0*h | a+0*l+1*h | a+0*l+2*h |
; | a+1*l+0*h | a+1*l+1*h | a+1*l+2*h |
; | a+2*l+0*h | a+2*l+1*h | a+2*l+2*h |
FillRectangle:
FillRectangle::
push de
push af
push hl
@@ -46,7 +46,7 @@ FillRectangle:
pop de
ret
Func_1f96:
Func_1f96::
add sp, -10
ld hl, sp+0
ld [hli], a ; sp-10 <- a
@@ -179,7 +179,7 @@ Func_1f96:
scf
ret
Func_2046:
Func_2046::
ld hl, sp+3
ld a, [hl]
inc [hl]
@@ -189,15 +189,15 @@ Func_2046:
jr z, Func_2055
; fallthrough
Func_2051:
Func_2051::
ld hl, sp+9
jr Func_2057
Func_2055:
Func_2055::
ld hl, sp+8
; fallthrough
Func_2057:
Func_2057::
ld e, [hl]
ld hl, sp+2
ld a, [hl]
@@ -212,7 +212,7 @@ Func_2057:
; loads the four tiles of the card set 2 icon constant provided in register a
; returns carry if the specified set does not have an icon
LoadCardSet2Tiles:
LoadCardSet2Tiles::
and $7 ; mask out PRO
ld e, a
ld d, 0
@@ -237,7 +237,7 @@ LoadCardSet2Tiles:
db -1, $0 tiles, $4 tiles, -1, -1, -1, -1, $8 tiles
; loads the Deck and Hand icons for the "Draw X card(s) from the deck." screen
LoadDuelDrawCardsScreenTiles:
LoadDuelDrawCardsScreenTiles::
ld hl, DuelOtherGraphics + $29 tiles
ld de, v0Tiles1 + $74 tiles
ld b, $08
@@ -245,7 +245,7 @@ LoadDuelDrawCardsScreenTiles:
; loads the 8 tiles that make up the border of the main duel menu as well as the border
; of a large card picture (displayed after drawing the card or placing it in the arena).
LoadCardOrDuelMenuBorderTiles:
LoadCardOrDuelMenuBorderTiles::
ld hl, DuelOtherGraphics + $15 tiles
ld de, v0Tiles1 + $50 tiles
ld b, $08
@@ -253,7 +253,7 @@ LoadCardOrDuelMenuBorderTiles:
; loads the graphics of a card type header, used to display a picture of a card after drawing it
; or placing it in the arena. register e determines which header (TRAINER, ENERGY, PoKéMoN)
LoadCardTypeHeaderTiles:
LoadCardTypeHeaderTiles::
ld d, a
ld e, 0
ld hl, DuelCardHeaderGraphics - $4000
@@ -263,7 +263,7 @@ LoadCardTypeHeaderTiles:
jr CopyFontsOrDuelGraphicsTiles
; loads the symbols that are displayed near the names of a list of cards in the hand or discard pile
LoadDuelCardSymbolTiles:
LoadDuelCardSymbolTiles::
ld hl, DuelDmgSgbSymbolGraphics - $4000
ld a, [wConsole]
cp CONSOLE_CGB
@@ -276,7 +276,7 @@ LoadDuelCardSymbolTiles:
; loads the symbols for Stage 1 Pkmn card, Stage 2 Pkmn card, and Trainer card.
; unlike LoadDuelCardSymbolTiles excludes the symbols for Basic Pkmn and all energies.
LoadDuelCardSymbolTiles2:
LoadDuelCardSymbolTiles2::
ld hl, DuelDmgSgbSymbolGraphics + $4 tiles - $4000
ld a, [wConsole]
cp CONSOLE_CGB
@@ -288,12 +288,12 @@ LoadDuelCardSymbolTiles2:
jr CopyFontsOrDuelGraphicsTiles
; load the face down basic / stage1 / stage2 card images shown in the check Pokemon screens
LoadDuelFaceDownCardTiles:
LoadDuelFaceDownCardTiles::
ld b, $10
jr LoadDuelCheckPokemonScreenTiles.got_num_tiles
; same as LoadDuelFaceDownCardTiles, plus also load the ACT / BPx tiles
LoadDuelCheckPokemonScreenTiles:
LoadDuelCheckPokemonScreenTiles::
ld b, $24
.got_num_tiles
ld hl, DuelDmgSgbSymbolGraphics + $30 tiles - $4000
@@ -306,7 +306,7 @@ LoadDuelCheckPokemonScreenTiles:
jr CopyFontsOrDuelGraphicsTiles
; load the tiles for the "Placing the prizes..." screen
LoadPlacingThePrizesScreenTiles:
LoadPlacingThePrizesScreenTiles::
; load the Pokeball field tiles
ld hl, DuelOtherGraphics
ld de, v0Tiles1 + $20 tiles
@@ -315,7 +315,7 @@ LoadPlacingThePrizesScreenTiles:
; fallthrough
; load the Deck and the Discard Pile icons
LoadDeckAndDiscardPileIcons:
LoadDeckAndDiscardPileIcons::
ld hl, DuelDmgSgbSymbolGraphics + $54 tiles - $4000
ld a, [wConsole]
cp CONSOLE_CGB
@@ -327,24 +327,24 @@ LoadDeckAndDiscardPileIcons:
jr CopyFontsOrDuelGraphicsTiles
; load the tiles for the [O] and [X] symbols used to display the results of a coin toss
LoadDuelCoinTossResultTiles:
LoadDuelCoinTossResultTiles::
ld hl, DuelOtherGraphics + $d tiles
ld de, v0Tiles2 + $30 tiles
ld b, $8
jr CopyFontsOrDuelGraphicsTiles
; load the tiles of the text characters used with TX_SYMBOL
LoadSymbolsFont:
LoadSymbolsFont::
ld hl, SymbolsFont - $4000
ld de, v0Tiles2 ; destination
ld b, (DuelCardHeaderGraphics - SymbolsFont) / TILE_SIZE ; number of tiles
; fallthrough
; if hl ≤ $3fff
; copy b tiles from Gfx1:(hl+$4000) to de
; copy b tiles from Gfx1::(hl+$4000) to de
; if $4000 ≤ hl ≤ $7fff
; copy b tiles from Gfx2:hl to de
CopyFontsOrDuelGraphicsTiles:
; copy b tiles from Gfx2::hl to de
CopyFontsOrDuelGraphicsTiles::
ld a, BANK(Fonts) ; BANK(DuelGraphics)
call BankpushROM
ld c, TILE_SIZE
@@ -353,7 +353,7 @@ CopyFontsOrDuelGraphicsTiles:
ret
; this function copies gfx data into sram
Func_212f:
Func_212f::
; loads symbols fonts to sGfxBuffer1
ld hl, SymbolsFont - $4000
ld de, sGfxBuffer1
@@ -383,7 +383,7 @@ Func_212f:
jr CopyFontsOrDuelGraphicsTiles
; load the graphics and draw the duel box message given a BOXMSG_* constant in a
DrawDuelBoxMessage:
DrawDuelBoxMessage::
ld l, a
ld h, 40 tiles / 4 ; boxes are 10x4 tiles
call HtimesL
@@ -403,7 +403,7 @@ DrawDuelBoxMessage:
; load the tiles for the latin, katakana, and hiragana fonts into VRAM
; from gfx/fonts/full_width/3.1bpp and gfx/fonts/full_width/4.1bpp
LoadFullWidthFontTiles:
LoadFullWidthFontTiles::
ld hl, FullWidthFonts + $3cc tiles_1bpp - $4000
ld a, BANK(Fonts) ; BANK(DuelGraphics)
call BankpushROM
@@ -421,7 +421,7 @@ LoadFullWidthFontTiles:
ret
; copy 128 1bpp tiles from de to hl as 2bpp
Copy1bppTiles:
Copy1bppTiles::
ld b, $80
.tile_loop
ld c, TILE_SIZE_1BPP
+4 -4
View File
@@ -1,5 +1,5 @@
; timer interrupt handler
TimerHandler:
TimerHandler::
push af
push hl
push de
@@ -37,7 +37,7 @@ TimerHandler:
reti
; increment play time counter by a tick
IncrementPlayTimeCounter:
IncrementPlayTimeCounter::
ld a, [wPlayTimeCounterEnable]
or a
ret z
@@ -67,7 +67,7 @@ IncrementPlayTimeCounter:
ret
; setup timer to 16384/68 ≈ 240.94 Hz
SetupTimer:
SetupTimer::
ld b, -68 ; Value for Normal Speed
call CheckForCGB
jr c, .set_timer
@@ -85,7 +85,7 @@ SetupTimer:
ret
; return carry if not CGB
CheckForCGB:
CheckForCGB::
ld a, [wConsole]
cp CONSOLE_CGB
ret z
+3 -3
View File
@@ -1,8 +1,8 @@
; reads struct:
; reads struct::
; x (1 byte), y (1 byte), data (n bytes), $00
; writes data to BGMap0-translated x,y
; important: make sure VRAM can be accessed first, else use WriteDataBlockToBGMap0
UnsafeWriteDataBlockToBGMap0:
; important:: make sure VRAM can be accessed first, else use WriteDataBlockToBGMap0
UnsafeWriteDataBlockToBGMap0::
ld a, [hli]
ld b, a
ld a, [hli]
+1 -1
View File
@@ -1,5 +1,5 @@
; vblank interrupt handler
VBlankHandler:
VBlankHandler::
push af
push bc
push de
+3 -3
View File
@@ -1,5 +1,5 @@
; set current dest VRAM bank to 0
BankswitchVRAM0:
BankswitchVRAM0::
push af
xor a
ldh [hBankVRAM], a
@@ -8,7 +8,7 @@ BankswitchVRAM0:
ret
; set current dest VRAM bank to 1
BankswitchVRAM1:
BankswitchVRAM1::
push af
ld a, $1
ldh [hBankVRAM], a
@@ -17,7 +17,7 @@ BankswitchVRAM1:
ret
; set current dest VRAM bank to a
BankswitchVRAM:
BankswitchVRAM::
ldh [hBankVRAM], a
ldh [rVBK], a
ret
+8 -8
View File
@@ -1,6 +1,6 @@
; converts the two-digit BCD number provided in a to text (ascii) format,
; writes them to [wStringBuffer] and [wStringBuffer + 1], and to the BGMap0 address at bc
WriteTwoDigitBCDNumber:
WriteTwoDigitBCDNumber::
push hl
push bc
push de
@@ -20,7 +20,7 @@ WriteTwoDigitBCDNumber:
; converts the one-digit BCD number provided in the lower nybble of a to text
; (ascii) format, and writes it to [wStringBuffer] and to the BGMap0 address at bc
WriteOneDigitBCDNumber:
WriteOneDigitBCDNumber::
push hl
push bc
push de
@@ -40,7 +40,7 @@ WriteOneDigitBCDNumber:
; converts the four-digit BCD number provided in h and l to text (ascii) format,
; writes them to [wStringBuffer] through [wStringBuffer + 3], and to the BGMap0 address at bc
WriteFourDigitBCDNumber:
WriteFourDigitBCDNumber::
push hl
push bc
push de
@@ -66,7 +66,7 @@ WriteFourDigitBCDNumber:
; given two BCD digits in the two nybbles of register a,
; write them in text (ascii) format to hl (most significant nybble first).
; numbers above 9 end up converted to half-width font tiles.
WriteBCDNumberInTextFormat:
WriteBCDNumberInTextFormat::
push af
swap a
call WriteBCDDigitInTextFormat
@@ -75,7 +75,7 @@ WriteBCDNumberInTextFormat:
; given a BCD digit in the (lower nybble) of register a, write it in text (ascii)
; format to hl. numbers above 9 end up converted to half-width font tiles.
WriteBCDDigitInTextFormat:
WriteBCDDigitInTextFormat::
and $0f
add "0"
cp "9" + 1
@@ -87,7 +87,7 @@ WriteBCDDigitInTextFormat:
; converts the one-byte number at a to text (ascii) format,
; and writes it to [wStringBuffer] and the BGMap0 address at bc
WriteOneByteNumber:
WriteOneByteNumber::
push bc
push hl
ld l, a
@@ -112,7 +112,7 @@ WriteOneByteNumber:
; converts the two-byte number at hl to text (ascii) format,
; and writes it to [wStringBuffer] and the BGMap0 address at bc
WriteTwoByteNumber:
WriteTwoByteNumber::
push bc
ld de, wStringBuffer
push de
@@ -125,7 +125,7 @@ WriteTwoByteNumber:
ret
; convert the number at hl to text (ascii) format and write it to de
TwoByteNumberToText:
TwoByteNumberToText::
push bc
ld bc, -10000
call .get_digit
-2
View File
@@ -1,8 +1,6 @@
INCLUDE "macros.asm"
INCLUDE "constants.asm"
INCLUDE "engine/home.asm"
SECTION "Game Loop", ROMX
INCLUDE "engine/game_loop.asm"