diff options
-rw-r--r-- | engine/movie/trade_animation.asm | 1375 |
1 files changed, 1374 insertions, 1 deletions
diff --git a/engine/movie/trade_animation.asm b/engine/movie/trade_animation.asm index 7cbc6cee..b737380e 100644 --- a/engine/movie/trade_animation.asm +++ b/engine/movie/trade_animation.asm @@ -1 +1,1374 @@ -TRADEANIM_RIGHT_ARROW EQU "▶" ; $ed
TRADEANIM_LEFT_ARROW EQU "▼" ; $ee
; TradeAnim_TubeAnimJumptable.Jumptable indexes
const_def
const TRADEANIMSTATE_0 ; 0
const TRADEANIMSTATE_1 ; 1
const TRADEANIMSTATE_2 ; 2
const TRADEANIMSTATE_3 ; 3
TRADEANIMJUMPTABLE_LENGTH EQU const_value
add_tradeanim: MACRO
\1_TradeCmd:
dw \1
ENDM
tradeanim: MACRO
db (\1_TradeCmd - DoTradeAnimation.JumpTable) / 2
ENDM
TradeAnimation:
ld hl, wPlayerTrademonSenderName
ld de, wOTTrademonSenderName
call LinkTradeAnim_LoadTradePlayerNames
ld hl, wPlayerTrademonSpecies
ld de, wOTTrademonSpecies
call LinkTradeAnim_LoadTradeMonSpecies
ld de, .script
jr RunTradeAnimScript
.script
tradeanim TradeAnim_SetupGivemonScroll
tradeanim TradeAnim_ShowGivemonData
tradeanim TradeAnim_DoGivemonScroll
tradeanim TradeAnim_Wait80
tradeanim TradeAnim_Poof
tradeanim TradeAnim_RockingBall
tradeanim TradeAnim_EnterLinkTube1
tradeanim TradeAnim_WaitAnim
tradeanim TradeAnim_BulgeThroughTube
tradeanim TradeAnim_WaitAnim
tradeanim TradeAnim_TextboxScrollStart
tradeanim TradeAnim_GiveTrademonSFX
tradeanim TradeAnim_TubeToOT1
tradeanim TradeAnim_SentToOTText
tradeanim TradeAnim_ScrollOutRight
tradeanim TradeAnim_OTSendsText1
tradeanim TradeAnim_OTBidsFarewell
tradeanim TradeAnim_ScrollOutRight
tradeanim TradeAnim_GetTrademonSFX
tradeanim TradeAnim_TubeToPlayer1
tradeanim TradeAnim_EnterLinkTube1
tradeanim TradeAnim_DropBall
tradeanim TradeAnim_ExitLinkTube
tradeanim TradeAnim_WaitAnim
tradeanim TradeAnim_ShowGetmonData
tradeanim TradeAnim_Poof
tradeanim TradeAnim_WaitAnim
tradeanim TradeAnim_FrontpicScrollStart
tradeanim TradeAnim_Wait80
tradeanim TradeAnim_TextboxScrollStart
tradeanim TradeAnim_TakeCareOfText
tradeanim TradeAnim_ScrollOutRight
tradeanim TradeAnim_End
TradeAnimationPlayer2:
ld hl, wOTTrademonSenderName
ld de, wPlayerTrademonSenderName
call LinkTradeAnim_LoadTradePlayerNames
ld hl, wOTTrademonSpecies
ld de, wPlayerTrademonSpecies
call LinkTradeAnim_LoadTradeMonSpecies
ld de, .script
jr RunTradeAnimScript
.script
tradeanim TradeAnim_OTSendsText2
tradeanim TradeAnim_OTBidsFarewell
tradeanim TradeAnim_ScrollOutRight
tradeanim TradeAnim_GetTrademonSFX
tradeanim TradeAnim_TubeToOT1
tradeanim TradeAnim_EnterLinkTube1
tradeanim TradeAnim_DropBall
tradeanim TradeAnim_ExitLinkTube
tradeanim TradeAnim_WaitAnim
tradeanim TradeAnim_ShowGetmonData
tradeanim TradeAnim_Poof
tradeanim TradeAnim_WaitAnim
tradeanim TradeAnim_FrontpicScrollStart
tradeanim TradeAnim_Wait80
tradeanim TradeAnim_TextboxScrollStart
tradeanim TradeAnim_TakeCareOfText
tradeanim TradeAnim_ScrollOutRight
tradeanim TradeAnim_SetupGivemonScroll
tradeanim TradeAnim_ShowGivemonData
tradeanim TradeAnim_DoGivemonScroll
tradeanim TradeAnim_Wait80
tradeanim TradeAnim_Poof
tradeanim TradeAnim_RockingBall
tradeanim TradeAnim_EnterLinkTube1
tradeanim TradeAnim_WaitAnim
tradeanim TradeAnim_BulgeThroughTube
tradeanim TradeAnim_WaitAnim
tradeanim TradeAnim_TextboxScrollStart
tradeanim TradeAnim_GiveTrademonSFX
tradeanim TradeAnim_TubeToPlayer1
tradeanim TradeAnim_SentToOTText
tradeanim TradeAnim_ScrollOutRight
tradeanim TradeAnim_End
RunTradeAnimScript:
ld hl, wTradeAnimAddress
ld [hl], e
inc hl
ld [hl], d
ldh a, [hMapAnims]
push af
xor a
ldh [hMapAnims], a
ld hl, wVramState
ld a, [hl]
push af
res 0, [hl]
ld hl, wOptions
ld a, [hl]
push af
set NO_TEXT_SCROLL, [hl]
call .TradeAnimLayout
ld de, MUSIC_EVOLUTION
call PlayMusic2
.anim_loop
call DoTradeAnimation
jr nc, .anim_loop
pop af
ld [wOptions], a
pop af
ld [wVramState], a
pop af
ldh [hMapAnims], a
ret
.TradeAnimLayout:
xor a
ld [wJumptableIndex], a
call ClearBGPalettes
call ClearSprites
call ClearTilemap
call DisableLCD
call LoadFontsBattleExtra
callfar ClearSpriteAnims
ldh a, [hCGB]
and a
jr z, .NotCGB
ld a, $1
ldh [rVBK], a
ld hl, vTiles0
ld bc, sScratch - vTiles0
xor a
call ByteFill
ld a, $0
ldh [rVBK], a
.NotCGB:
hlbgcoord 0, 0
ld bc, sScratch - vBGMap0
ld a, " "
call ByteFill
ld hl, TradeGameBoyLZ
ld de, vTiles2 tile $31
call Decompress
ld hl, TradeArrowRightGFX
ld de, vTiles0 tile TRADEANIM_RIGHT_ARROW
ld bc, 1 tiles
ld a, BANK(TradeArrowRightGFX)
call FarCopyBytes
ld hl, TradeArrowLeftGFX
ld de, vTiles0 tile TRADEANIM_LEFT_ARROW
ld bc, 1 tiles
ld a, BANK(TradeArrowLeftGFX)
call FarCopyBytes
xor a
ldh [hSCX], a
ldh [hSCY], a
ld a, $7
ldh [hWX], a
ld a, $90
ldh [hWY], a
call EnableLCD
call LoadTradeBallAndCableGFX
ld a, [wPlayerTrademonSpecies]
ld hl, wPlayerTrademonDVs
ld de, vTiles0
call TradeAnim_GetFrontpic
ld a, [wOTTrademonSpecies]
ld hl, wOTTrademonDVs
ld de, vTiles0 tile $31
call TradeAnim_GetFrontpic
ld a, [wPlayerTrademonSpecies]
ld de, wPlayerTrademonSpeciesName
call TradeAnim_GetNickname
ld a, [wOTTrademonSpecies]
ld de, wOTTrademonSpeciesName
call TradeAnim_GetNickname
call TradeAnim_NormalPals
ret
DoTradeAnimation:
ld a, [wJumptableIndex]
bit 7, a
jr nz, .finished
call .DoTradeAnimCommand
callfar PlaySpriteAnimations
ld hl, wce65
inc [hl]
call DelayFrame
and a
ret
.finished
call LoadStandardFont
scf
ret
.DoTradeAnimCommand:
jumptable .JumpTable, wJumptableIndex
.JumpTable:
; entries correspond to tradeanim_* constants (see macros/scripts/trade_anims.asm)
add_tradeanim TradeAnim_AdvanceScriptPointer ; 00
add_tradeanim TradeAnim_ShowGivemonData ; 01
add_tradeanim TradeAnim_ShowGetmonData ; 02
add_tradeanim TradeAnim_EnterLinkTube1 ; 03
add_tradeanim TradeAnim_EnterLinkTube2 ; 04
add_tradeanim TradeAnim_ExitLinkTube ; 05
add_tradeanim TradeAnim_TubeToOT1 ; 06
add_tradeanim TradeAnim_TubeToOT2 ; 07
add_tradeanim TradeAnim_TubeToOT3 ; 08
add_tradeanim TradeAnim_TubeToOT4 ; 09
add_tradeanim TradeAnim_TubeToOT5 ; 0a
add_tradeanim TradeAnim_TubeToOT6 ; 0b
add_tradeanim TradeAnim_TubeToOT7 ; 0c
add_tradeanim TradeAnim_TubeToOT8 ; 0d
add_tradeanim TradeAnim_TubeToPlayer1 ; 0e
add_tradeanim TradeAnim_TubeToPlayer2 ; 0f
add_tradeanim TradeAnim_TubeToPlayer3 ; 10
add_tradeanim TradeAnim_TubeToPlayer4 ; 11
add_tradeanim TradeAnim_TubeToPlayer5 ; 12
add_tradeanim TradeAnim_TubeToPlayer6 ; 13
add_tradeanim TradeAnim_TubeToPlayer7 ; 14
add_tradeanim TradeAnim_TubeToPlayer8 ; 15
add_tradeanim TradeAnim_SentToOTText ; 16
add_tradeanim TradeAnim_OTBidsFarewell ; 17
add_tradeanim TradeAnim_TakeCareOfText ; 18
add_tradeanim TradeAnim_OTSendsText1 ; 19
add_tradeanim TradeAnim_OTSendsText2 ; 1a
add_tradeanim TradeAnim_SetupGivemonScroll ; 1b
add_tradeanim TradeAnim_DoGivemonScroll ; 1c
add_tradeanim TradeAnim_FrontpicScrollStart ; 1d
add_tradeanim TradeAnim_TextboxScrollStart ; 1e
add_tradeanim TradeAnim_ScrollOutRight ; 1f
add_tradeanim TradeAnim_ScrollOutRight2 ; 20
add_tradeanim TradeAnim_Wait80 ; 21
add_tradeanim TradeAnim_RockingBall ; 22
add_tradeanim TradeAnim_DropBall ; 23
add_tradeanim TradeAnim_WaitAnim ; 24
add_tradeanim TradeAnim_Poof ; 25
add_tradeanim TradeAnim_BulgeThroughTube ; 26
add_tradeanim TradeAnim_GiveTrademonSFX ; 27
add_tradeanim TradeAnim_GetTrademonSFX ; 28
add_tradeanim TradeAnim_End ; 29
TradeAnim_IncrementJumptableIndex:
ld hl, wJumptableIndex
inc [hl]
ret
TradeAnim_AdvanceScriptPointer:
ld hl, wTradeAnimAddress
ld e, [hl]
inc hl
ld d, [hl]
ld a, [de]
ld [wJumptableIndex], a
inc de
ld [hl], d
dec hl
ld [hl], e
ret
TradeAnim_End:
ld hl, wJumptableIndex
set 7, [hl]
ret
TradeAnim_TubeToOT1:
ld a, TRADEANIM_RIGHT_ARROW
call TradeAnim_PlaceTrademonStatsOnTubeAnim
ld a, [wLinkTradeSendmonSpecies]
ld [wTempIconSpecies], a
xor a
depixel 5, 11, 4, 0
ld b, $0
jr TradeAnim_InitTubeAnim
TradeAnim_TubeToPlayer1:
ld a, TRADEANIM_LEFT_ARROW
call TradeAnim_PlaceTrademonStatsOnTubeAnim
ld a, [wLinkTradeGetmonSpecies]
ld [wTempIconSpecies], a
ld a, TRADEANIMSTATE_2
depixel 9, 18, 4, 4
ld b, $4
TradeAnim_InitTubeAnim:
push bc
push de
push bc
push de
push af
call DisableLCD
callfar ClearSpriteAnims
hlbgcoord 20, 3
ld bc, 12
ld a, $60
call ByteFill
pop af
call TradeAnim_TubeAnimJumptable
xor a
ldh [hSCX], a
ld a, $7
ldh [hWX], a
ld a, $70
ldh [hWY], a
call EnableLCD
call LoadTradeBubbleGFX
pop de
ld a, SPRITE_ANIM_INDEX_TRADEMON_ICON
call InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
add hl, bc
pop bc
ld [hl], b
pop de
ld a, SPRITE_ANIM_INDEX_TRADEMON_BUBBLE
call InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
add hl, bc
pop bc
ld [hl], b
call WaitBGMap
ld b, SCGB_TRADE_TUBE
call GetSGBLayout
ld a, %11100100 ; 3,2,1,0
call DmgToCgbBGPals
ld a, %11010000
call DmgToCgbObjPal0
call TradeAnim_IncrementJumptableIndex
ld a, 92
ld [wFrameCounter], a
ret
TradeAnim_TubeToOT2:
call TradeAnim_FlashBGPals
ldh a, [hSCX]
add $2
ldh [hSCX], a
cp $50
ret nz
ld a, TRADEANIMSTATE_1
call TradeAnim_TubeAnimJumptable
call TradeAnim_IncrementJumptableIndex
ret
TradeAnim_TubeToOT3:
call TradeAnim_FlashBGPals
ldh a, [hSCX]
add $2
ldh [hSCX], a
cp $a0
ret nz
ld a, TRADEANIMSTATE_2
call TradeAnim_TubeAnimJumptable
call TradeAnim_IncrementJumptableIndex
ret
TradeAnim_TubeToOT4:
call TradeAnim_FlashBGPals
ldh a, [hSCX]
add $2
ldh [hSCX], a
and a
ret nz
call TradeAnim_IncrementJumptableIndex
ret
TradeAnim_TubeToPlayer3:
call TradeAnim_FlashBGPals
ldh a, [hSCX]
sub $2
ldh [hSCX], a
cp $b0
ret nz
ld a, TRADEANIMSTATE_1
call TradeAnim_TubeAnimJumptable
call TradeAnim_IncrementJumptableIndex
ret
TradeAnim_TubeToPlayer4:
call TradeAnim_FlashBGPals
ldh a, [hSCX]
sub $2
ldh [hSCX], a
cp $60
ret nz
xor a ; TRADEANIMSTATE_0
call TradeAnim_TubeAnimJumptable
call TradeAnim_IncrementJumptableIndex
ret
TradeAnim_TubeToPlayer5:
call TradeAnim_FlashBGPals
ldh a, [hSCX]
sub $2
ldh [hSCX], a
and a
ret nz
call TradeAnim_IncrementJumptableIndex
ret
TradeAnim_TubeToOT6:
TradeAnim_TubeToPlayer6:
ld a, 128
ld [wFrameCounter], a
call TradeAnim_IncrementJumptableIndex
ret
TradeAnim_TubeToOT8:
TradeAnim_TubeToPlayer8:
call ClearBGPalettes
call ClearTilemap
call ClearSprites
call DisableLCD
callfar ClearSpriteAnims
hlbgcoord 0, 0
ld bc, sScratch - vBGMap0
ld a, " "
call ByteFill
xor a
ldh [hSCX], a
ld a, $90
ldh [hWY], a
call EnableLCD
call LoadTradeBallAndCableGFX
call WaitBGMap
call TradeAnim_NormalPals
call TradeAnim_AdvanceScriptPointer
ret
TradeAnim_TubeToOT5:
TradeAnim_TubeToOT7:
TradeAnim_TubeToPlayer2:
TradeAnim_TubeToPlayer7:
call TradeAnim_FlashBGPals
ld hl, wFrameCounter
ld a, [hl]
and a
jr z, .done
dec [hl]
ret
.done
call TradeAnim_IncrementJumptableIndex
ret
TradeAnim_GiveTrademonSFX:
call TradeAnim_AdvanceScriptPointer
ld de, SFX_GIVE_TRADEMON
call PlaySFX
ret
TradeAnim_GetTrademonSFX:
call TradeAnim_AdvanceScriptPointer
ld de, SFX_GET_TRADEMON
call PlaySFX
ret
TradeAnim_TubeAnimJumptable:
maskbits TRADEANIMJUMPTABLE_LENGTH
ld e, a
ld d, 0
ld hl, .Jumptable
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
.Jumptable:
; entries correspond to TRADEANIMSTATE_* constants
dw .Zero
dw .One
dw .Two
dw .Three
.Zero:
.Three:
call TradeAnim_BlankTilemap
hlcoord 9, 3
ld [hl], $5b
inc hl
ld bc, 10
ld a, $60
call ByteFill
hlcoord 3, 2
call TradeAnim_CopyTradeGameBoyTilemap
ret
.One:
call TradeAnim_BlankTilemap
hlcoord 0, 3
ld bc, SCREEN_WIDTH
ld a, $60
call ByteFill
ret
.Two:
call TradeAnim_BlankTilemap
hlcoord 0, 3
ld bc, $11
ld a, $60
call ByteFill
hlcoord 17, 3
ld a, $5d
ld [hl], a
ld a, $61
ld de, SCREEN_WIDTH
ld c, $3
.loop
add hl, de
ld [hl], a
dec c
jr nz, .loop
add hl, de
ld a, $5f
ld [hld], a
ld a, $5b
ld [hl], a
hlcoord 10, 6
call TradeAnim_CopyTradeGameBoyTilemap
ret
TradeAnim_CopyTradeGameBoyTilemap:
ld de, TradeGameBoyTilemap
lb bc, 8, 6
call TradeAnim_CopyBoxFromDEtoHL
ret
TradeAnim_PlaceTrademonStatsOnTubeAnim:
push af
call ClearBGPalettes
call WaitTop
ld a, HIGH(vBGMap1)
ldh [hBGMapAddress + 1], a
call ClearTilemap
hlcoord 0, 0
ld bc, SCREEN_WIDTH
ld a, "─"
call ByteFill
hlcoord 0, 1
ld de, wLinkPlayer1Name
call PlaceString
ld hl, wLinkPlayer2Name
ld de, 0
.find_name_end_loop
ld a, [hli]
cp "@"
jr z, .done
dec de
jr .find_name_end_loop
.done
hlcoord 0, 4
add hl, de
ld de, wLinkPlayer2Name
call PlaceString
hlcoord 7, 2
ld bc, 6
pop af
call ByteFill
call WaitBGMap
call WaitTop
ld a, HIGH(vBGMap0)
ldh [hBGMapAddress + 1], a
call ClearTilemap
ret
TradeAnim_EnterLinkTube1:
call ClearTilemap
call WaitTop
ld a, $a0
ldh [hSCX], a
call DelayFrame
hlcoord 8, 2
ld de, TradeLinkTubeTilemap
lb bc, 3, 12
call TradeAnim_CopyBoxFromDEtoHL
call WaitBGMap
ld b, SCGB_TRADE_TUBE
call GetSGBLayout
ld a, %11100100 ; 3,2,1,0
call DmgToCgbBGPals
lb de, %11100100, %11100100 ; 3,2,1,0, 3,2,1,0
call DmgToCgbObjPals
ld de, SFX_POTION
call PlaySFX
call TradeAnim_IncrementJumptableIndex
ret
TradeAnim_EnterLinkTube2:
ldh a, [hSCX]
and a
jr z, .done
add $4
ldh [hSCX], a
ret
.done
ld c, 80
call DelayFrames
call TradeAnim_AdvanceScriptPointer
ret
TradeAnim_ExitLinkTube:
ldh a, [hSCX]
cp $a0
jr z, .done
sub $4
ldh [hSCX], a
ret
.done
call ClearTilemap
xor a
ldh [hSCX], a
call TradeAnim_AdvanceScriptPointer
ret
TradeAnim_SetupGivemonScroll:
ld a, $8f
ldh [hWX], a
ld a, $88
ldh [hSCX], a
ld a, $50
ldh [hWY], a
call TradeAnim_AdvanceScriptPointer
ret
TradeAnim_DoGivemonScroll:
ldh a, [hWX]
cp $7
jr z, .done
sub $4
ldh [hWX], a
ldh a, [hSCX]
sub $4
ldh [hSCX], a
ret
.done
ld a, $7
ldh [hWX], a
xor a
ldh [hSCX], a
call TradeAnim_AdvanceScriptPointer
ret
TradeAnim_FrontpicScrollStart:
ld a, $7
ldh [hWX], a
ld a, $50
ldh [hWY], a
call TradeAnim_AdvanceScriptPointer
ret
TradeAnim_TextboxScrollStart:
ld a, $7
ldh [hWX], a
ld a, $90
ldh [hWY], a
call TradeAnim_AdvanceScriptPointer
ret
TradeAnim_ScrollOutRight:
call WaitTop
ld a, HIGH(vBGMap1)
ldh [hBGMapAddress + 1], a
call WaitBGMap
ld a, $7
ldh [hWX], a
xor a
ldh [hWY], a
call DelayFrame
call WaitTop
ld a, HIGH(vBGMap0)
ldh [hBGMapAddress + 1], a
call ClearTilemap
call TradeAnim_IncrementJumptableIndex
ret
TradeAnim_ScrollOutRight2:
ldh a, [hWX]
cp $a1
jr nc, .done
inc a
inc a
ldh [hWX], a
ret
.done
ld a, HIGH(vBGMap1)
ldh [hBGMapAddress + 1], a
call WaitBGMap
ld a, $7
ldh [hWX], a
ld a, $90
ldh [hWY], a
ld a, HIGH(vBGMap0)
ldh [hBGMapAddress + 1], a
call TradeAnim_AdvanceScriptPointer
ret
TradeAnim_ShowGivemonData:
call ShowPlayerTrademonStats
ld a, [wPlayerTrademonSpecies]
ld [wCurPartySpecies], a
ld a, [wPlayerTrademonDVs]
ld [wTempMonDVs], a
ld a, [wPlayerTrademonDVs + 1]
ld [wTempMonDVs + 1], a
ld b, SCGB_PLAYER_OR_MON_FRONTPIC_PALS
call GetSGBLayout
ld a, %11100100 ; 3,2,1,0
call DmgToCgbBGPals
call TradeAnim_ShowGivemonFrontpic
ld a, [wPlayerTrademonSpecies]
call GetCryIndex
jr c, .skip_cry
ld e, c
ld d, b
call PlayCry
.skip_cry
call TradeAnim_AdvanceScriptPointer
ret
TradeAnim_ShowGetmonData:
call ShowOTTrademonStats
ld a, [wOTTrademonSpecies]
ld [wCurPartySpecies], a
ld a, [wOTTrademonDVs]
ld [wTempMonDVs], a
ld a, [wOTTrademonDVs + 1]
ld [wTempMonDVs + 1], a
ld b, SCGB_PLAYER_OR_MON_FRONTPIC_PALS
call GetSGBLayout
ld a, %11100100 ; 3,2,1,0
call DmgToCgbBGPals
call TradeAnim_ShowGetmonFrontpic
ld a, [wOTTrademonSpecies]
call GetCryIndex
jr c, .skip_cry
ld e, c
ld d, b
call PlayCry
.skip_cry
call TradeAnim_AdvanceScriptPointer
ret
TradeAnim_GetFrontpic:
push de
push af
predef GetUnownLetter
pop af
ld [wCurPartySpecies], a
ld [wCurSpecies], a
call GetBaseData
pop de
predef GetMonFrontpic
ret
TradeAnim_GetNickname:
push de
ld [wNamedObjectIndexBuffer], a
call GetPokemonName
ld hl, wStringBuffer1
pop de
ld bc, NAME_LENGTH
call CopyBytes
ret
TradeAnim_ShowGivemonFrontpic:
ld de, vTiles0
jr TradeAnim_ShowFrontpic
TradeAnim_ShowGetmonFrontpic:
ld de, vTiles0 tile $31
TradeAnim_ShowFrontpic:
call DelayFrame
ld hl, vTiles2
lb bc, 10, $31
call Request2bpp
call WaitTop
call TradeAnim_BlankTilemap
hlcoord 7, 2
xor a
ldh [hGraphicStartTile], a
lb bc, 7, 7
predef PlaceGraphic
call WaitBGMap
ret
TradeAnim_Wait80:
ld c, 80
call DelayFrames
call TradeAnim_AdvanceScriptPointer
ret
ShowPlayerTrademonStats:
ld de, wPlayerTrademonSpecies
ld a, [de]
cp EGG
jr z, TrademonStats_Egg
call TrademonStats_MonTemplate
ld de, wPlayerTrademonSpecies
call TrademonStats_PrintSpeciesNumber
ld de, wPlayerTrademonSpeciesName
call TrademonStats_PrintSpeciesName
ld de, wPlayerTrademonOTName
call TrademonStats_PrintOTName
ld de, wPlayerTrademonID
call TrademonStats_PrintTrademonID
call TrademonStats_WaitBGMap
ret
ShowOTTrademonStats:
ld de, wOTTrademonSpecies
ld a, [de]
cp EGG
jr z, TrademonStats_Egg
call TrademonStats_MonTemplate
ld de, wOTTrademonSpecies
call TrademonStats_PrintSpeciesNumber
ld de, wOTTrademonSpeciesName
call TrademonStats_PrintSpeciesName
ld de, wOTTrademonOTName
call TrademonStats_PrintOTName
ld de, wOTTrademonID
call TrademonStats_PrintTrademonID
call TrademonStats_WaitBGMap
ret
TrademonStats_MonTemplate:
call WaitTop
call TradeAnim_BlankTilemap
ld a, HIGH(vBGMap1)
ldh [hBGMapAddress + 1], a
hlcoord 3, 0
ld b, $6
ld c, $d
call Textbox
hlcoord 4, 0
ld de, .OTMonData
call PlaceString
ret
.OTMonData:
db "─── №."
next ""
next "OT/"
next "<ID>№.@"
TrademonStats_Egg:
call WaitTop
call TradeAnim_BlankTilemap
ld a, HIGH(vBGMap1)
ldh [hBGMapAddress + 1], a
hlcoord 3, 0
ld b, 6
ld c, 13
call Textbox
hlcoord 4, 2
ld de, .EggData
call PlaceString
call TrademonStats_WaitBGMap
ret
.EggData:
db "EGG"
next "OT/?????"
next "<ID>№.?????@"
TrademonStats_WaitBGMap:
call WaitBGMap
call WaitTop
ld a, HIGH(vBGMap0)
ldh [hBGMapAddress + 1], a
ret
TrademonStats_PrintSpeciesNumber:
hlcoord 10, 0
lb bc, PRINTNUM_LEADINGZEROS | 1, 3
call PrintNum
ret
TrademonStats_PrintSpeciesName:
hlcoord 4, 2
call PlaceString
ret
TrademonStats_PrintOTName:
hlcoord 7, 4
call PlaceString
ret
TrademonStats_PrintTrademonID:
hlcoord 7, 6
lb bc, PRINTNUM_LEADINGZEROS | 2, 5
call PrintNum
ret
TradeAnim_RockingBall:
depixel 10, 11, 4, 0
ld a, SPRITE_ANIM_INDEX_TRADE_POKE_BALL
call InitSpriteAnimStruct
call TradeAnim_AdvanceScriptPointer
ld a, 64
ld [wFrameCounter], a
ret
TradeAnim_DropBall:
depixel 10, 11, 4, 0
ld a, SPRITE_ANIM_INDEX_TRADE_POKE_BALL
call InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
add hl, bc
ld [hl], $1
ld hl, SPRITEANIMSTRUCT_YOFFSET
add hl, bc
ld [hl], $dc
call TradeAnim_AdvanceScriptPointer
ld a, 56
ld [wFrameCounter], a
ret
TradeAnim_Poof:
depixel 10, 11, 4, 0
ld a, SPRITE_ANIM_INDEX_TRADE_POOF
call InitSpriteAnimStruct
call TradeAnim_AdvanceScriptPointer
ld a, 16
ld [wFrameCounter], a
ld de, SFX_BALL_POOF
call PlaySFX
ret
TradeAnim_BulgeThroughTube:
ld a, %11100100 ; 3,2,1,0
call DmgToCgbObjPal0
depixel 5, 11
ld a, SPRITE_ANIM_INDEX_TRADE_TUBE_BULGE
call InitSpriteAnimStruct
call TradeAnim_AdvanceScriptPointer
ld a, 128
ld [wFrameCounter], a
ret
TradeAnim_AnimateTrademonInTube:
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
add hl, bc
ld e, [hl]
ld d, 0
ld hl, .Jumptable
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
.Jumptable:
dw .InitTimer
dw .WaitTimer1
dw .MoveRight
dw .MoveDown
dw .MoveUp
dw .MoveLeft
dw .WaitTimer2
.JumptableNext:
ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX
add hl, bc
inc [hl]
ret
.InitTimer:
call .JumptableNext
ld hl, SPRITEANIMSTRUCT_0C
add hl, bc
ld [hl], $80
ret
.WaitTimer1:
ld hl, SPRITEANIMSTRUCT_0C
add hl, bc
ld a, [hl]
dec [hl]
and a
ret nz
call .JumptableNext
.MoveRight:
ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc
ld a, [hl]
cp $94
jr nc, .done_move_right
inc [hl]
ret
.done_move_right
call .JumptableNext
.MoveDown:
ld hl, SPRITEANIMSTRUCT_YCOORD
add hl, bc
ld a, [hl]
cp $4c
jr nc, .done_move_down
inc [hl]
ret
.done_move_down
ld hl, SPRITEANIMSTRUCT_INDEX
add hl, bc
ld [hl], $0
ret
.MoveUp:
ld hl, SPRITEANIMSTRUCT_YCOORD
add hl, bc
ld a, [hl]
cp $2c
jr z, .done_move_up
dec [hl]
ret
.done_move_up
call .JumptableNext
.MoveLeft:
ld hl, SPRITEANIMSTRUCT_XCOORD
add hl, bc
ld a, [hl]
cp $58
jr z, .done_move_left
dec [hl]
ret
.done_move_left
call .JumptableNext
ld hl, SPRITEANIMSTRUCT_0C
add hl, bc
ld [hl], $80
ret
.WaitTimer2:
ld hl, SPRITEANIMSTRUCT_0C
add hl, bc
ld a, [hl]
dec [hl]
and a
ret nz
ld hl, SPRITEANIMSTRUCT_INDEX
add hl, bc
ld [hl], $0
ret
TradeAnim_SentToOTText:
ld a, [wLinkMode]
cp LINK_TIMECAPSULE
jr z, .time_capsule
ld hl, .MonNameSentToText
call PrintText
ld c, 189
call DelayFrames
ld hl, .MonWasSentToText
call PrintText
call TradeAnim_Wait80Frames
ld c, 128
call DelayFrames
call TradeAnim_AdvanceScriptPointer
ret
.time_capsule
ld hl, .MonWasSentToText
call PrintText
call TradeAnim_Wait80Frames
call TradeAnim_AdvanceScriptPointer
ret
.MonWasSentToText:
text_far _MonWasSentToText
text_end
.MonNameSentToText:
text_far _MonNameSentToText
text_end
TradeAnim_OTBidsFarewell:
ld hl, .BidsFarewellToMonText
call PrintText
call TradeAnim_Wait80Frames
ld hl, .MonNameBidsFarewellText
call PrintText
call TradeAnim_Wait80Frames
call TradeAnim_AdvanceScriptPointer
ret
.BidsFarewellToMonText:
text_far _BidsFarewellToMonText
text_end
.MonNameBidsFarewellText:
text_far _MonNameBidsFarewellText
text_end
TradeAnim_TakeCareOfText:
call WaitTop
hlcoord 0, 10
ld bc, 8 * SCREEN_WIDTH
ld a, " "
call ByteFill
call WaitBGMap
ld hl, .TakeGoodCareOfMonText
call PrintText
call TradeAnim_Wait80Frames
call TradeAnim_AdvanceScriptPointer
ret
.TakeGoodCareOfMonText:
text_far _TakeGoodCareOfMonText
text_end
TradeAnim_OTSendsText1:
ld hl, .ForYourMonSendsText
call PrintText
call TradeAnim_Wait80Frames
ld hl, .OTSendsText
call PrintText
call TradeAnim_Wait80Frames
ld c, 14
call DelayFrames
call TradeAnim_AdvanceScriptPointer
ret
.ForYourMonSendsText:
text_far _ForYourMonSendsText
text_end
.OTSendsText:
text_far _OTSendsText
text_end
TradeAnim_OTSendsText2:
ld hl, .WillTradeText
call PrintText
call TradeAnim_Wait80Frames
ld hl, .ForYourMonWillTradeText
call PrintText
call TradeAnim_Wait80Frames
ld c, 14
call DelayFrames
call TradeAnim_AdvanceScriptPointer
ret
.WillTradeText:
text_far _WillTradeText
text_end
.ForYourMonWillTradeText:
text_far _ForYourMonWillTradeText
text_end
TradeAnim_Wait80Frames:
ld c, 80
call DelayFrames
ret
TradeAnim_BlankTilemap:
hlcoord 0, 0
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
ld a, " "
call ByteFill
ret
TradeAnim_CopyBoxFromDEtoHL:
.row
push bc
push hl
.col
ld a, [de]
inc de
ld [hli], a
dec c
jr nz, .col
pop hl
ld bc, SCREEN_WIDTH
add hl, bc
pop bc
dec b
jr nz, .row
ret
TradeAnim_NormalPals:
ldh a, [hSGB]
and a
ld a, %11100100 ; 3,2,1,0
jr z, .not_sgb
ld a, $f0
.not_sgb
call DmgToCgbObjPal0
ld a, %11100100 ; 3,2,1,0
call DmgToCgbBGPals
ret
LinkTradeAnim_LoadTradePlayerNames:
push de
ld de, wLinkPlayer1Name
ld bc, NAME_LENGTH
call CopyBytes
pop hl
ld de, wLinkPlayer2Name
ld bc, NAME_LENGTH
call CopyBytes
ret
LinkTradeAnim_LoadTradeMonSpecies:
ld a, [hl]
ld [wLinkTradeSendmonSpecies], a
ld a, [de]
ld [wLinkTradeGetmonSpecies], a
ret
TradeAnim_FlashBGPals:
ld a, [wce65]
and $7
ret nz
ldh a, [rBGP]
xor %00111100
call DmgToCgbBGPals
ret
LoadTradeBallAndCableGFX:
call DelayFrame
ld de, TradeBallGFX
ld hl, vTiles0 tile $62
lb bc, BANK(TradeBallGFX), 6
call Request2bpp
ld de, TradePoofGFX
ld hl, vTiles0 tile $68
lb bc, BANK(TradePoofGFX), 12
call Request2bpp
ld de, TradeCableGFX
ld hl, vTiles0 tile $74
lb bc, BANK(TradeCableGFX), 4
call Request2bpp
xor a
ld hl, wSpriteAnimDict
ld [hli], a
ld [hl], $62
ret
LoadTradeBubbleGFX:
call DelayFrame
ld e, MONICON_TRADE
callfar LoadMenuMonIcon
ld de, TradeBubbleGFX
ld hl, vTiles0 tile $72
lb bc, BANK(TradeBubbleGFX), 4
call Request2bpp
xor a
ld hl, wSpriteAnimDict
ld [hli], a
ld [hl], $62
ret
TradeAnim_WaitAnim:
ld hl, wFrameCounter
ld a, [hl]
and a
jr z, .done
dec [hl]
ret
.done
call TradeAnim_AdvanceScriptPointer
ret
DebugTrade: ; unreferenced
; This function was meant for use in Japanese versions, so the
; constant used for copy length was changed by accident.
ld hl, .DebugTradeData
ld a, [hli]
ld [wPlayerTrademonSpecies], a
ld de, wPlayerTrademonSenderName
ld c, NAME_LENGTH + 2 ; JP: NAME_LENGTH_JAPANESE + 2
.loop1
ld a, [hli]
ld [de], a
inc de
dec c
jr nz, .loop1
ld a, [hli]
ld [wOTTrademonSpecies], a
ld de, wOTTrademonSenderName
ld c, NAME_LENGTH + 2 ; JP: NAME_LENGTH_JAPANESE + 2
.loop2
ld a, [hli]
ld [de], a
inc de
dec c
jr nz, .loop2
ret
debugtrade: MACRO
; species, ot name, ot id
db \1, \2
dw \3
ENDM
.DebugTradeData:
debugtrade VENUSAUR, "ゲーフり@@", $0123 ; GAME FREAK
debugtrade CHARIZARD, "クりーチャ@", $0456 ; Creatures Inc.
TradeGameBoyTilemap: INCBIN "gfx/trade/game_boy.tilemap" ; 6x8
TradeLinkTubeTilemap: INCBIN "gfx/trade/link_cable.tilemap" ; 12x3
TradeArrowRightGFX: INCBIN "gfx/trade/arrow_right.2bpp"
TradeArrowLeftGFX: INCBIN "gfx/trade/arrow_left.2bpp"
TradeCableGFX: INCBIN "gfx/trade/cable.2bpp"
TradeBubbleGFX: INCBIN "gfx/trade/bubble.2bpp"
TradeGameBoyLZ: INCBIN "gfx/trade/game_boy_cable.2bpp.lz"
TradeBallGFX: INCBIN "gfx/trade/ball.2bpp"
TradePoofGFX: INCBIN "gfx/trade/poof.2bpp"
\ No newline at end of file +TRADEANIM_RIGHT_ARROW EQU "▶" ; $ed +TRADEANIM_LEFT_ARROW EQU "▼" ; $ee + +; TradeAnim_TubeAnimJumptable.Jumptable indexes + const_def + const TRADEANIMSTATE_0 ; 0 + const TRADEANIMSTATE_1 ; 1 + const TRADEANIMSTATE_2 ; 2 + const TRADEANIMSTATE_3 ; 3 +TRADEANIMJUMPTABLE_LENGTH EQU const_value + +add_tradeanim: MACRO +\1_TradeCmd: + dw \1 +ENDM + +tradeanim: MACRO + db (\1_TradeCmd - DoTradeAnimation.JumpTable) / 2 +ENDM + +TradeAnimation: + ld hl, wPlayerTrademonSenderName + ld de, wOTTrademonSenderName + call LinkTradeAnim_LoadTradePlayerNames + ld hl, wPlayerTrademonSpecies + ld de, wOTTrademonSpecies + call LinkTradeAnim_LoadTradeMonSpecies + ld de, .script + jr RunTradeAnimScript + +.script + tradeanim TradeAnim_SetupGivemonScroll + tradeanim TradeAnim_ShowGivemonData + tradeanim TradeAnim_DoGivemonScroll + tradeanim TradeAnim_Wait80 + tradeanim TradeAnim_Poof + tradeanim TradeAnim_RockingBall + tradeanim TradeAnim_EnterLinkTube1 + tradeanim TradeAnim_WaitAnim + tradeanim TradeAnim_BulgeThroughTube + tradeanim TradeAnim_WaitAnim + tradeanim TradeAnim_TextboxScrollStart + tradeanim TradeAnim_GiveTrademonSFX + tradeanim TradeAnim_TubeToOT1 + tradeanim TradeAnim_SentToOTText + tradeanim TradeAnim_ScrollOutRight + + tradeanim TradeAnim_OTSendsText1 + tradeanim TradeAnim_OTBidsFarewell + tradeanim TradeAnim_ScrollOutRight + tradeanim TradeAnim_GetTrademonSFX + tradeanim TradeAnim_TubeToPlayer1 + tradeanim TradeAnim_EnterLinkTube1 + tradeanim TradeAnim_DropBall + tradeanim TradeAnim_ExitLinkTube + tradeanim TradeAnim_WaitAnim + tradeanim TradeAnim_ShowGetmonData + tradeanim TradeAnim_Poof + tradeanim TradeAnim_WaitAnim + tradeanim TradeAnim_FrontpicScrollStart + tradeanim TradeAnim_Wait80 + tradeanim TradeAnim_TextboxScrollStart + tradeanim TradeAnim_TakeCareOfText + tradeanim TradeAnim_ScrollOutRight + tradeanim TradeAnim_End + +TradeAnimationPlayer2: + ld hl, wOTTrademonSenderName + ld de, wPlayerTrademonSenderName + call LinkTradeAnim_LoadTradePlayerNames + ld hl, wOTTrademonSpecies + ld de, wPlayerTrademonSpecies + call LinkTradeAnim_LoadTradeMonSpecies + ld de, .script + jr RunTradeAnimScript + +.script + tradeanim TradeAnim_OTSendsText2 + tradeanim TradeAnim_OTBidsFarewell + tradeanim TradeAnim_ScrollOutRight + tradeanim TradeAnim_GetTrademonSFX + tradeanim TradeAnim_TubeToOT1 + tradeanim TradeAnim_EnterLinkTube1 + tradeanim TradeAnim_DropBall + tradeanim TradeAnim_ExitLinkTube + tradeanim TradeAnim_WaitAnim + tradeanim TradeAnim_ShowGetmonData + tradeanim TradeAnim_Poof + tradeanim TradeAnim_WaitAnim + tradeanim TradeAnim_FrontpicScrollStart + tradeanim TradeAnim_Wait80 + tradeanim TradeAnim_TextboxScrollStart + tradeanim TradeAnim_TakeCareOfText + tradeanim TradeAnim_ScrollOutRight + + tradeanim TradeAnim_SetupGivemonScroll + tradeanim TradeAnim_ShowGivemonData + tradeanim TradeAnim_DoGivemonScroll + tradeanim TradeAnim_Wait80 + tradeanim TradeAnim_Poof + tradeanim TradeAnim_RockingBall + tradeanim TradeAnim_EnterLinkTube1 + tradeanim TradeAnim_WaitAnim + tradeanim TradeAnim_BulgeThroughTube + tradeanim TradeAnim_WaitAnim + tradeanim TradeAnim_TextboxScrollStart + tradeanim TradeAnim_GiveTrademonSFX + tradeanim TradeAnim_TubeToPlayer1 + tradeanim TradeAnim_SentToOTText + tradeanim TradeAnim_ScrollOutRight + tradeanim TradeAnim_End + +RunTradeAnimScript: + ld hl, wTradeAnimAddress + ld [hl], e + inc hl + ld [hl], d + ldh a, [hMapAnims] + push af + xor a + ldh [hMapAnims], a + ld hl, wVramState + ld a, [hl] + push af + res 0, [hl] + ld hl, wOptions + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call .TradeAnimLayout + ld de, MUSIC_EVOLUTION + call PlayMusic2 +.anim_loop + call DoTradeAnimation + jr nc, .anim_loop + pop af + ld [wOptions], a + pop af + ld [wVramState], a + pop af + ldh [hMapAnims], a + ret + +.TradeAnimLayout: + xor a + ld [wJumptableIndex], a + call ClearBGPalettes + call ClearSprites + call ClearTilemap + call DisableLCD + call LoadFontsBattleExtra + callfar ClearSpriteAnims + ldh a, [hCGB] + and a + jr z, .NotCGB + ld a, $1 + ldh [rVBK], a + ld hl, vTiles0 + ld bc, sScratch - vTiles0 + xor a + call ByteFill + ld a, $0 + ldh [rVBK], a + +.NotCGB: + hlbgcoord 0, 0 + ld bc, sScratch - vBGMap0 + ld a, " " + call ByteFill + ld hl, TradeGameBoyLZ + ld de, vTiles2 tile $31 + call Decompress + ld hl, TradeArrowRightGFX + ld de, vTiles0 tile TRADEANIM_RIGHT_ARROW + ld bc, 1 tiles + ld a, BANK(TradeArrowRightGFX) + call FarCopyBytes + ld hl, TradeArrowLeftGFX + ld de, vTiles0 tile TRADEANIM_LEFT_ARROW + ld bc, 1 tiles + ld a, BANK(TradeArrowLeftGFX) + call FarCopyBytes + xor a + ldh [hSCX], a + ldh [hSCY], a + ld a, $7 + ldh [hWX], a + ld a, $90 + ldh [hWY], a + call EnableLCD + call LoadTradeBallAndCableGFX + ld a, [wPlayerTrademonSpecies] + ld hl, wPlayerTrademonDVs + ld de, vTiles0 + call TradeAnim_GetFrontpic + ld a, [wOTTrademonSpecies] + ld hl, wOTTrademonDVs + ld de, vTiles0 tile $31 + call TradeAnim_GetFrontpic + ld a, [wPlayerTrademonSpecies] + ld de, wPlayerTrademonSpeciesName + call TradeAnim_GetNickname + ld a, [wOTTrademonSpecies] + ld de, wOTTrademonSpeciesName + call TradeAnim_GetNickname + call TradeAnim_NormalPals + ret + +DoTradeAnimation: + ld a, [wJumptableIndex] + bit 7, a + jr nz, .finished + call .DoTradeAnimCommand + callfar PlaySpriteAnimations + ld hl, wce65 + inc [hl] + call DelayFrame + and a + ret + +.finished + call LoadStandardFont + scf + ret + +.DoTradeAnimCommand: + jumptable .JumpTable, wJumptableIndex + +.JumpTable: +; entries correspond to tradeanim_* constants (see macros/scripts/trade_anims.asm) + add_tradeanim TradeAnim_AdvanceScriptPointer ; 00 + add_tradeanim TradeAnim_ShowGivemonData ; 01 + add_tradeanim TradeAnim_ShowGetmonData ; 02 + add_tradeanim TradeAnim_EnterLinkTube1 ; 03 + add_tradeanim TradeAnim_EnterLinkTube2 ; 04 + add_tradeanim TradeAnim_ExitLinkTube ; 05 + add_tradeanim TradeAnim_TubeToOT1 ; 06 + add_tradeanim TradeAnim_TubeToOT2 ; 07 + add_tradeanim TradeAnim_TubeToOT3 ; 08 + add_tradeanim TradeAnim_TubeToOT4 ; 09 + add_tradeanim TradeAnim_TubeToOT5 ; 0a + add_tradeanim TradeAnim_TubeToOT6 ; 0b + add_tradeanim TradeAnim_TubeToOT7 ; 0c + add_tradeanim TradeAnim_TubeToOT8 ; 0d + add_tradeanim TradeAnim_TubeToPlayer1 ; 0e + add_tradeanim TradeAnim_TubeToPlayer2 ; 0f + add_tradeanim TradeAnim_TubeToPlayer3 ; 10 + add_tradeanim TradeAnim_TubeToPlayer4 ; 11 + add_tradeanim TradeAnim_TubeToPlayer5 ; 12 + add_tradeanim TradeAnim_TubeToPlayer6 ; 13 + add_tradeanim TradeAnim_TubeToPlayer7 ; 14 + add_tradeanim TradeAnim_TubeToPlayer8 ; 15 + add_tradeanim TradeAnim_SentToOTText ; 16 + add_tradeanim TradeAnim_OTBidsFarewell ; 17 + add_tradeanim TradeAnim_TakeCareOfText ; 18 + add_tradeanim TradeAnim_OTSendsText1 ; 19 + add_tradeanim TradeAnim_OTSendsText2 ; 1a + add_tradeanim TradeAnim_SetupGivemonScroll ; 1b + add_tradeanim TradeAnim_DoGivemonScroll ; 1c + add_tradeanim TradeAnim_FrontpicScrollStart ; 1d + add_tradeanim TradeAnim_TextboxScrollStart ; 1e + add_tradeanim TradeAnim_ScrollOutRight ; 1f + add_tradeanim TradeAnim_ScrollOutRight2 ; 20 + add_tradeanim TradeAnim_Wait80 ; 21 + add_tradeanim TradeAnim_RockingBall ; 22 + add_tradeanim TradeAnim_DropBall ; 23 + add_tradeanim TradeAnim_WaitAnim ; 24 + add_tradeanim TradeAnim_Poof ; 25 + add_tradeanim TradeAnim_BulgeThroughTube ; 26 + add_tradeanim TradeAnim_GiveTrademonSFX ; 27 + add_tradeanim TradeAnim_GetTrademonSFX ; 28 + add_tradeanim TradeAnim_End ; 29 + +TradeAnim_IncrementJumptableIndex: + ld hl, wJumptableIndex + inc [hl] + ret + +TradeAnim_AdvanceScriptPointer: + ld hl, wTradeAnimAddress + ld e, [hl] + inc hl + ld d, [hl] + ld a, [de] + ld [wJumptableIndex], a + inc de + ld [hl], d + dec hl + ld [hl], e + ret + +TradeAnim_End: + ld hl, wJumptableIndex + set 7, [hl] + ret + +TradeAnim_TubeToOT1: + ld a, TRADEANIM_RIGHT_ARROW + call TradeAnim_PlaceTrademonStatsOnTubeAnim + ld a, [wLinkTradeSendmonSpecies] + ld [wTempIconSpecies], a + xor a + depixel 5, 11, 4, 0 + ld b, $0 + jr TradeAnim_InitTubeAnim + +TradeAnim_TubeToPlayer1: + ld a, TRADEANIM_LEFT_ARROW + call TradeAnim_PlaceTrademonStatsOnTubeAnim + ld a, [wLinkTradeGetmonSpecies] + ld [wTempIconSpecies], a + ld a, TRADEANIMSTATE_2 + depixel 9, 18, 4, 4 + ld b, $4 +TradeAnim_InitTubeAnim: + push bc + push de + push bc + push de + + push af + call DisableLCD + callfar ClearSpriteAnims + hlbgcoord 20, 3 + ld bc, 12 + ld a, $60 + call ByteFill + pop af + + call TradeAnim_TubeAnimJumptable + + xor a + ldh [hSCX], a + ld a, $7 + ldh [hWX], a + ld a, $70 + ldh [hWY], a + call EnableLCD + call LoadTradeBubbleGFX + + pop de + ld a, SPRITE_ANIM_INDEX_TRADEMON_ICON + call InitSpriteAnimStruct + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + pop bc + ld [hl], b + + pop de + ld a, SPRITE_ANIM_INDEX_TRADEMON_BUBBLE + call InitSpriteAnimStruct + + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + pop bc + ld [hl], b + + call WaitBGMap + ld b, SCGB_TRADE_TUBE + call GetSGBLayout + ld a, %11100100 ; 3,2,1,0 + call DmgToCgbBGPals + ld a, %11010000 + call DmgToCgbObjPal0 + + call TradeAnim_IncrementJumptableIndex + ld a, 92 + ld [wFrameCounter], a + ret + +TradeAnim_TubeToOT2: + call TradeAnim_FlashBGPals + ldh a, [hSCX] + add $2 + ldh [hSCX], a + cp $50 + ret nz + ld a, TRADEANIMSTATE_1 + call TradeAnim_TubeAnimJumptable + call TradeAnim_IncrementJumptableIndex + ret + +TradeAnim_TubeToOT3: + call TradeAnim_FlashBGPals + ldh a, [hSCX] + add $2 + ldh [hSCX], a + cp $a0 + ret nz + ld a, TRADEANIMSTATE_2 + call TradeAnim_TubeAnimJumptable + call TradeAnim_IncrementJumptableIndex + ret + +TradeAnim_TubeToOT4: + call TradeAnim_FlashBGPals + ldh a, [hSCX] + add $2 + ldh [hSCX], a + and a + ret nz + call TradeAnim_IncrementJumptableIndex + ret + +TradeAnim_TubeToPlayer3: + call TradeAnim_FlashBGPals + ldh a, [hSCX] + sub $2 + ldh [hSCX], a + cp $b0 + ret nz + ld a, TRADEANIMSTATE_1 + call TradeAnim_TubeAnimJumptable + call TradeAnim_IncrementJumptableIndex + ret + +TradeAnim_TubeToPlayer4: + call TradeAnim_FlashBGPals + ldh a, [hSCX] + sub $2 + ldh [hSCX], a + cp $60 + ret nz + xor a ; TRADEANIMSTATE_0 + call TradeAnim_TubeAnimJumptable + call TradeAnim_IncrementJumptableIndex + ret + +TradeAnim_TubeToPlayer5: + call TradeAnim_FlashBGPals + ldh a, [hSCX] + sub $2 + ldh [hSCX], a + and a + ret nz + call TradeAnim_IncrementJumptableIndex + ret + +TradeAnim_TubeToOT6: +TradeAnim_TubeToPlayer6: + ld a, 128 + ld [wFrameCounter], a + call TradeAnim_IncrementJumptableIndex + ret + +TradeAnim_TubeToOT8: +TradeAnim_TubeToPlayer8: + call ClearBGPalettes + call ClearTilemap + call ClearSprites + call DisableLCD + callfar ClearSpriteAnims + hlbgcoord 0, 0 + ld bc, sScratch - vBGMap0 + ld a, " " + call ByteFill + xor a + ldh [hSCX], a + ld a, $90 + ldh [hWY], a + call EnableLCD + call LoadTradeBallAndCableGFX + call WaitBGMap + call TradeAnim_NormalPals + call TradeAnim_AdvanceScriptPointer + ret + +TradeAnim_TubeToOT5: +TradeAnim_TubeToOT7: +TradeAnim_TubeToPlayer2: +TradeAnim_TubeToPlayer7: + call TradeAnim_FlashBGPals + ld hl, wFrameCounter + ld a, [hl] + and a + jr z, .done + dec [hl] + ret + +.done + call TradeAnim_IncrementJumptableIndex + ret + +TradeAnim_GiveTrademonSFX: + call TradeAnim_AdvanceScriptPointer + ld de, SFX_GIVE_TRADEMON + call PlaySFX + ret + +TradeAnim_GetTrademonSFX: + call TradeAnim_AdvanceScriptPointer + ld de, SFX_GET_TRADEMON + call PlaySFX + ret + +TradeAnim_TubeAnimJumptable: + maskbits TRADEANIMJUMPTABLE_LENGTH + ld e, a + ld d, 0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.Jumptable: +; entries correspond to TRADEANIMSTATE_* constants + dw .Zero + dw .One + dw .Two + dw .Three + +.Zero: +.Three: + call TradeAnim_BlankTilemap + hlcoord 9, 3 + ld [hl], $5b + inc hl + ld bc, 10 + ld a, $60 + call ByteFill + hlcoord 3, 2 + call TradeAnim_CopyTradeGameBoyTilemap + ret + +.One: + call TradeAnim_BlankTilemap + hlcoord 0, 3 + ld bc, SCREEN_WIDTH + ld a, $60 + call ByteFill + ret + +.Two: + call TradeAnim_BlankTilemap + hlcoord 0, 3 + ld bc, $11 + ld a, $60 + call ByteFill + hlcoord 17, 3 + ld a, $5d + ld [hl], a + + ld a, $61 + ld de, SCREEN_WIDTH + ld c, $3 +.loop + add hl, de + ld [hl], a + dec c + jr nz, .loop + + add hl, de + ld a, $5f + ld [hld], a + ld a, $5b + ld [hl], a + hlcoord 10, 6 + call TradeAnim_CopyTradeGameBoyTilemap + ret + +TradeAnim_CopyTradeGameBoyTilemap: + ld de, TradeGameBoyTilemap + lb bc, 8, 6 + call TradeAnim_CopyBoxFromDEtoHL + ret + +TradeAnim_PlaceTrademonStatsOnTubeAnim: + push af + call ClearBGPalettes + call WaitTop + ld a, HIGH(vBGMap1) + ldh [hBGMapAddress + 1], a + call ClearTilemap + hlcoord 0, 0 + ld bc, SCREEN_WIDTH + ld a, "─" + call ByteFill + hlcoord 0, 1 + ld de, wLinkPlayer1Name + call PlaceString + ld hl, wLinkPlayer2Name + ld de, 0 +.find_name_end_loop + ld a, [hli] + cp "@" + jr z, .done + dec de + jr .find_name_end_loop + +.done + hlcoord 0, 4 + add hl, de + ld de, wLinkPlayer2Name + call PlaceString + hlcoord 7, 2 + ld bc, 6 + pop af + call ByteFill + call WaitBGMap + call WaitTop + ld a, HIGH(vBGMap0) + ldh [hBGMapAddress + 1], a + call ClearTilemap + ret + +TradeAnim_EnterLinkTube1: + call ClearTilemap + call WaitTop + ld a, $a0 + ldh [hSCX], a + call DelayFrame + hlcoord 8, 2 + ld de, TradeLinkTubeTilemap + lb bc, 3, 12 + call TradeAnim_CopyBoxFromDEtoHL + call WaitBGMap + ld b, SCGB_TRADE_TUBE + call GetSGBLayout + ld a, %11100100 ; 3,2,1,0 + call DmgToCgbBGPals + lb de, %11100100, %11100100 ; 3,2,1,0, 3,2,1,0 + call DmgToCgbObjPals + ld de, SFX_POTION + call PlaySFX + call TradeAnim_IncrementJumptableIndex + ret + +TradeAnim_EnterLinkTube2: + ldh a, [hSCX] + and a + jr z, .done + add $4 + ldh [hSCX], a + ret + +.done + ld c, 80 + call DelayFrames + call TradeAnim_AdvanceScriptPointer + ret + +TradeAnim_ExitLinkTube: + ldh a, [hSCX] + cp $a0 + jr z, .done + sub $4 + ldh [hSCX], a + ret + +.done + call ClearTilemap + xor a + ldh [hSCX], a + call TradeAnim_AdvanceScriptPointer + ret + +TradeAnim_SetupGivemonScroll: + ld a, $8f + ldh [hWX], a + ld a, $88 + ldh [hSCX], a + ld a, $50 + ldh [hWY], a + call TradeAnim_AdvanceScriptPointer + ret + +TradeAnim_DoGivemonScroll: + ldh a, [hWX] + cp $7 + jr z, .done + sub $4 + ldh [hWX], a + ldh a, [hSCX] + sub $4 + ldh [hSCX], a + ret + +.done + ld a, $7 + ldh [hWX], a + xor a + ldh [hSCX], a + call TradeAnim_AdvanceScriptPointer + ret + +TradeAnim_FrontpicScrollStart: + ld a, $7 + ldh [hWX], a + ld a, $50 + ldh [hWY], a + call TradeAnim_AdvanceScriptPointer + ret + +TradeAnim_TextboxScrollStart: + ld a, $7 + ldh [hWX], a + ld a, $90 + ldh [hWY], a + call TradeAnim_AdvanceScriptPointer + ret + +TradeAnim_ScrollOutRight: + call WaitTop + ld a, HIGH(vBGMap1) + ldh [hBGMapAddress + 1], a + call WaitBGMap + ld a, $7 + ldh [hWX], a + xor a + ldh [hWY], a + call DelayFrame + call WaitTop + ld a, HIGH(vBGMap0) + ldh [hBGMapAddress + 1], a + call ClearTilemap + call TradeAnim_IncrementJumptableIndex + ret + +TradeAnim_ScrollOutRight2: + ldh a, [hWX] + cp $a1 + jr nc, .done + inc a + inc a + ldh [hWX], a + ret + +.done + ld a, HIGH(vBGMap1) + ldh [hBGMapAddress + 1], a + call WaitBGMap + ld a, $7 + ldh [hWX], a + ld a, $90 + ldh [hWY], a + ld a, HIGH(vBGMap0) + ldh [hBGMapAddress + 1], a + call TradeAnim_AdvanceScriptPointer + ret + +TradeAnim_ShowGivemonData: + call ShowPlayerTrademonStats + ld a, [wPlayerTrademonSpecies] + ld [wCurPartySpecies], a + ld a, [wPlayerTrademonDVs] + ld [wTempMonDVs], a + ld a, [wPlayerTrademonDVs + 1] + ld [wTempMonDVs + 1], a + ld b, SCGB_PLAYER_OR_MON_FRONTPIC_PALS + call GetSGBLayout + ld a, %11100100 ; 3,2,1,0 + call DmgToCgbBGPals + call TradeAnim_ShowGivemonFrontpic + + ld a, [wPlayerTrademonSpecies] + call GetCryIndex + jr c, .skip_cry + ld e, c + ld d, b + call PlayCry +.skip_cry + + call TradeAnim_AdvanceScriptPointer + ret + +TradeAnim_ShowGetmonData: + call ShowOTTrademonStats + ld a, [wOTTrademonSpecies] + ld [wCurPartySpecies], a + ld a, [wOTTrademonDVs] + ld [wTempMonDVs], a + ld a, [wOTTrademonDVs + 1] + ld [wTempMonDVs + 1], a + ld b, SCGB_PLAYER_OR_MON_FRONTPIC_PALS + call GetSGBLayout + ld a, %11100100 ; 3,2,1,0 + call DmgToCgbBGPals + call TradeAnim_ShowGetmonFrontpic + + ld a, [wOTTrademonSpecies] + call GetCryIndex + jr c, .skip_cry + ld e, c + ld d, b + call PlayCry +.skip_cry + + call TradeAnim_AdvanceScriptPointer + ret + +TradeAnim_GetFrontpic: + push de + push af + predef GetUnownLetter + pop af + ld [wCurPartySpecies], a + ld [wCurSpecies], a + call GetBaseData + pop de + predef GetMonFrontpic + ret + +TradeAnim_GetNickname: + push de + ld [wNamedObjectIndexBuffer], a + call GetPokemonName + ld hl, wStringBuffer1 + pop de + ld bc, NAME_LENGTH + call CopyBytes + ret + +TradeAnim_ShowGivemonFrontpic: + ld de, vTiles0 + jr TradeAnim_ShowFrontpic + +TradeAnim_ShowGetmonFrontpic: + ld de, vTiles0 tile $31 +TradeAnim_ShowFrontpic: + call DelayFrame + ld hl, vTiles2 + lb bc, 10, $31 + call Request2bpp + call WaitTop + call TradeAnim_BlankTilemap + hlcoord 7, 2 + xor a + ldh [hGraphicStartTile], a + lb bc, 7, 7 + predef PlaceGraphic + call WaitBGMap + ret + +TradeAnim_Wait80: + ld c, 80 + call DelayFrames + call TradeAnim_AdvanceScriptPointer + ret + +ShowPlayerTrademonStats: + ld de, wPlayerTrademonSpecies + ld a, [de] + cp EGG + jr z, TrademonStats_Egg + call TrademonStats_MonTemplate + ld de, wPlayerTrademonSpecies + call TrademonStats_PrintSpeciesNumber + ld de, wPlayerTrademonSpeciesName + call TrademonStats_PrintSpeciesName + ld de, wPlayerTrademonOTName + call TrademonStats_PrintOTName + ld de, wPlayerTrademonID + call TrademonStats_PrintTrademonID + call TrademonStats_WaitBGMap + ret + +ShowOTTrademonStats: + ld de, wOTTrademonSpecies + ld a, [de] + cp EGG + jr z, TrademonStats_Egg + call TrademonStats_MonTemplate + ld de, wOTTrademonSpecies + call TrademonStats_PrintSpeciesNumber + ld de, wOTTrademonSpeciesName + call TrademonStats_PrintSpeciesName + ld de, wOTTrademonOTName + call TrademonStats_PrintOTName + ld de, wOTTrademonID + call TrademonStats_PrintTrademonID + call TrademonStats_WaitBGMap + ret + +TrademonStats_MonTemplate: + call WaitTop + call TradeAnim_BlankTilemap + ld a, HIGH(vBGMap1) + ldh [hBGMapAddress + 1], a + hlcoord 3, 0 + ld b, $6 + ld c, $d + call Textbox + hlcoord 4, 0 + ld de, .OTMonData + call PlaceString + ret + +.OTMonData: + db "─── №." + next "" + next "OT/" + next "<ID>№.@" + +TrademonStats_Egg: + call WaitTop + call TradeAnim_BlankTilemap + ld a, HIGH(vBGMap1) + ldh [hBGMapAddress + 1], a + hlcoord 3, 0 + ld b, 6 + ld c, 13 + call Textbox + hlcoord 4, 2 + ld de, .EggData + call PlaceString + call TrademonStats_WaitBGMap + ret + +.EggData: + db "EGG" + next "OT/?????" + next "<ID>№.?????@" + +TrademonStats_WaitBGMap: + call WaitBGMap + call WaitTop + ld a, HIGH(vBGMap0) + ldh [hBGMapAddress + 1], a + ret + +TrademonStats_PrintSpeciesNumber: + hlcoord 10, 0 + lb bc, PRINTNUM_LEADINGZEROS | 1, 3 + call PrintNum + ret + +TrademonStats_PrintSpeciesName: + hlcoord 4, 2 + call PlaceString + ret + +TrademonStats_PrintOTName: + hlcoord 7, 4 + call PlaceString + ret + +TrademonStats_PrintTrademonID: + hlcoord 7, 6 + lb bc, PRINTNUM_LEADINGZEROS | 2, 5 + call PrintNum + ret + +TradeAnim_RockingBall: + depixel 10, 11, 4, 0 + ld a, SPRITE_ANIM_INDEX_TRADE_POKE_BALL + call InitSpriteAnimStruct + call TradeAnim_AdvanceScriptPointer + ld a, 64 + ld [wFrameCounter], a + ret + +TradeAnim_DropBall: + depixel 10, 11, 4, 0 + ld a, SPRITE_ANIM_INDEX_TRADE_POKE_BALL + call InitSpriteAnimStruct + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld [hl], $1 + ld hl, SPRITEANIMSTRUCT_YOFFSET + add hl, bc + ld [hl], $dc + call TradeAnim_AdvanceScriptPointer + ld a, 56 + ld [wFrameCounter], a + ret + +TradeAnim_Poof: + depixel 10, 11, 4, 0 + ld a, SPRITE_ANIM_INDEX_TRADE_POOF + call InitSpriteAnimStruct + call TradeAnim_AdvanceScriptPointer + ld a, 16 + ld [wFrameCounter], a + ld de, SFX_BALL_POOF + call PlaySFX + ret + +TradeAnim_BulgeThroughTube: + ld a, %11100100 ; 3,2,1,0 + call DmgToCgbObjPal0 + depixel 5, 11 + ld a, SPRITE_ANIM_INDEX_TRADE_TUBE_BULGE + call InitSpriteAnimStruct + call TradeAnim_AdvanceScriptPointer + ld a, 128 + ld [wFrameCounter], a + ret + +TradeAnim_AnimateTrademonInTube: + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.Jumptable: + dw .InitTimer + dw .WaitTimer1 + dw .MoveRight + dw .MoveDown + dw .MoveUp + dw .MoveLeft + dw .WaitTimer2 + +.JumptableNext: + ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX + add hl, bc + inc [hl] + ret + +.InitTimer: + call .JumptableNext + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], $80 + ret + +.WaitTimer1: + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + dec [hl] + and a + ret nz + call .JumptableNext + +.MoveRight: + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $94 + jr nc, .done_move_right + inc [hl] + ret + +.done_move_right + call .JumptableNext + +.MoveDown: + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + ld a, [hl] + cp $4c + jr nc, .done_move_down + inc [hl] + ret + +.done_move_down + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + ld [hl], $0 + ret + +.MoveUp: + ld hl, SPRITEANIMSTRUCT_YCOORD + add hl, bc + ld a, [hl] + cp $2c + jr z, .done_move_up + dec [hl] + ret + +.done_move_up + call .JumptableNext + +.MoveLeft: + ld hl, SPRITEANIMSTRUCT_XCOORD + add hl, bc + ld a, [hl] + cp $58 + jr z, .done_move_left + dec [hl] + ret + +.done_move_left + call .JumptableNext + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld [hl], $80 + ret + +.WaitTimer2: + ld hl, SPRITEANIMSTRUCT_0C + add hl, bc + ld a, [hl] + dec [hl] + and a + ret nz + ld hl, SPRITEANIMSTRUCT_INDEX + add hl, bc + ld [hl], $0 + ret + +TradeAnim_SentToOTText: + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jr z, .time_capsule + ld hl, .MonNameSentToText + call PrintText + ld c, 189 + call DelayFrames + ld hl, .MonWasSentToText + call PrintText + call TradeAnim_Wait80Frames + ld c, 128 + call DelayFrames + call TradeAnim_AdvanceScriptPointer + ret + +.time_capsule + ld hl, .MonWasSentToText + call PrintText + call TradeAnim_Wait80Frames + call TradeAnim_AdvanceScriptPointer + ret + +.MonWasSentToText: + text_far _MonWasSentToText + text_end + +.MonNameSentToText: + text_far _MonNameSentToText + text_end + +TradeAnim_OTBidsFarewell: + ld hl, .BidsFarewellToMonText + call PrintText + call TradeAnim_Wait80Frames + ld hl, .MonNameBidsFarewellText + call PrintText + call TradeAnim_Wait80Frames + call TradeAnim_AdvanceScriptPointer + ret + +.BidsFarewellToMonText: + text_far _BidsFarewellToMonText + text_end + +.MonNameBidsFarewellText: + text_far _MonNameBidsFarewellText + text_end + +TradeAnim_TakeCareOfText: + call WaitTop + hlcoord 0, 10 + ld bc, 8 * SCREEN_WIDTH + ld a, " " + call ByteFill + call WaitBGMap + ld hl, .TakeGoodCareOfMonText + call PrintText + call TradeAnim_Wait80Frames + call TradeAnim_AdvanceScriptPointer + ret + +.TakeGoodCareOfMonText: + text_far _TakeGoodCareOfMonText + text_end + +TradeAnim_OTSendsText1: + ld hl, .ForYourMonSendsText + call PrintText + call TradeAnim_Wait80Frames + ld hl, .OTSendsText + call PrintText + call TradeAnim_Wait80Frames + ld c, 14 + call DelayFrames + call TradeAnim_AdvanceScriptPointer + ret + +.ForYourMonSendsText: + text_far _ForYourMonSendsText + text_end + +.OTSendsText: + text_far _OTSendsText + text_end + +TradeAnim_OTSendsText2: + ld hl, .WillTradeText + call PrintText + call TradeAnim_Wait80Frames + ld hl, .ForYourMonWillTradeText + call PrintText + call TradeAnim_Wait80Frames + ld c, 14 + call DelayFrames + call TradeAnim_AdvanceScriptPointer + ret + +.WillTradeText: + text_far _WillTradeText + text_end + +.ForYourMonWillTradeText: + text_far _ForYourMonWillTradeText + text_end + +TradeAnim_Wait80Frames: + ld c, 80 + call DelayFrames + ret + +TradeAnim_BlankTilemap: + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, " " + call ByteFill + ret + +TradeAnim_CopyBoxFromDEtoHL: +.row + push bc + push hl +.col + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .col + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .row + ret + +TradeAnim_NormalPals: + ldh a, [hSGB] + and a + ld a, %11100100 ; 3,2,1,0 + jr z, .not_sgb + ld a, $f0 + +.not_sgb + call DmgToCgbObjPal0 + ld a, %11100100 ; 3,2,1,0 + call DmgToCgbBGPals + ret + +LinkTradeAnim_LoadTradePlayerNames: + push de + ld de, wLinkPlayer1Name + ld bc, NAME_LENGTH + call CopyBytes + pop hl + ld de, wLinkPlayer2Name + ld bc, NAME_LENGTH + call CopyBytes + ret + +LinkTradeAnim_LoadTradeMonSpecies: + ld a, [hl] + ld [wLinkTradeSendmonSpecies], a + ld a, [de] + ld [wLinkTradeGetmonSpecies], a + ret + +TradeAnim_FlashBGPals: + ld a, [wce65] + and $7 + ret nz + ldh a, [rBGP] + xor %00111100 + call DmgToCgbBGPals + ret + +LoadTradeBallAndCableGFX: + call DelayFrame + ld de, TradeBallGFX + ld hl, vTiles0 tile $62 + lb bc, BANK(TradeBallGFX), 6 + call Request2bpp + ld de, TradePoofGFX + ld hl, vTiles0 tile $68 + lb bc, BANK(TradePoofGFX), 12 + call Request2bpp + ld de, TradeCableGFX + ld hl, vTiles0 tile $74 + lb bc, BANK(TradeCableGFX), 4 + call Request2bpp + xor a + ld hl, wSpriteAnimDict + ld [hli], a + ld [hl], $62 + ret + +LoadTradeBubbleGFX: + call DelayFrame + ld e, MONICON_TRADE + callfar LoadMenuMonIcon + ld de, TradeBubbleGFX + ld hl, vTiles0 tile $72 + lb bc, BANK(TradeBubbleGFX), 4 + call Request2bpp + xor a + ld hl, wSpriteAnimDict + ld [hli], a + ld [hl], $62 + ret + +TradeAnim_WaitAnim: + ld hl, wFrameCounter + ld a, [hl] + and a + jr z, .done + dec [hl] + ret + +.done + call TradeAnim_AdvanceScriptPointer + ret + +DebugTrade: ; unreferenced +; This function was meant for use in Japanese versions, so the +; constant used for copy length was changed by accident. + + ld hl, .DebugTradeData + + ld a, [hli] + ld [wPlayerTrademonSpecies], a + ld de, wPlayerTrademonSenderName + ld c, NAME_LENGTH + 2 ; JP: NAME_LENGTH_JAPANESE + 2 +.loop1 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .loop1 + + ld a, [hli] + ld [wOTTrademonSpecies], a + ld de, wOTTrademonSenderName + ld c, NAME_LENGTH + 2 ; JP: NAME_LENGTH_JAPANESE + 2 +.loop2 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .loop2 + ret + +debugtrade: MACRO +; species, ot name, ot id + db \1, \2 + dw \3 +ENDM + +.DebugTradeData: + debugtrade VENUSAUR, "ゲーフり@@", $0123 ; GAME FREAK + debugtrade CHARIZARD, "クりーチャ@", $0456 ; Creatures Inc. + +TradeGameBoyTilemap: INCBIN "gfx/trade/game_boy.tilemap" ; 6x8 +TradeLinkTubeTilemap: INCBIN "gfx/trade/link_cable.tilemap" ; 12x3 + +TradeArrowRightGFX: INCBIN "gfx/trade/arrow_right.2bpp" +TradeArrowLeftGFX: INCBIN "gfx/trade/arrow_left.2bpp" +TradeCableGFX: INCBIN "gfx/trade/cable.2bpp" +TradeBubbleGFX: INCBIN "gfx/trade/bubble.2bpp" +TradeGameBoyLZ: INCBIN "gfx/trade/game_boy_cable.2bpp.lz" +TradeBallGFX: INCBIN "gfx/trade/ball.2bpp" +TradePoofGFX: INCBIN "gfx/trade/poof.2bpp" |