commented trade amim functions

This commit is contained in:
YamaArashi 2015-03-14 15:25:21 -07:00
parent ec76703936
commit 0996a964bd
7 changed files with 269 additions and 164 deletions

View file

@ -840,10 +840,10 @@ TradeCenter_Trade:
ld a, [hSerialConnectionStatus] ld a, [hSerialConnectionStatus]
cp USING_EXTERNAL_CLOCK cp USING_EXTERNAL_CLOCK
jr z, .usingExternalClock jr z, .usingExternalClock
predef Func_410e2 predef InternalClockTradeAnim
jr .tradeCompleted jr .tradeCompleted
.usingExternalClock .usingExternalClock
predef Func_410f3 predef ExternalClockTradeAnim
.tradeCompleted .tradeCompleted
callab TryEvolvingMon callab TryEvolvingMon
call ClearScreen call ClearScreen

View file

@ -122,7 +122,7 @@ InGameTrade_DoTrade: ; 71c07 (1c:5c07)
push af push af
call LoadHpBarAndStatusTilePatterns call LoadHpBarAndStatusTilePatterns
call InGameTrade_PrepareTradeData call InGameTrade_PrepareTradeData
predef Func_410e2 predef InternalClockTradeAnim
pop af pop af
ld [W_CURENEMYLVL],a ld [W_CURENEMYLVL],a
pop af pop af

View file

@ -470,9 +470,9 @@ PrintNamingText: ; 68f8 (1:68f8)
dec a dec a
jr z, .notNickname jr z, .notNickname
ld a, [wcf91] ld a, [wcf91]
ld [wcd5d], a ld [wMonPartySpriteSpecies], a
push af push af
callba WriteMonPartySpriteOAMByMonID callba WriteMonPartySpriteOAMBySpecies
pop af pop af
ld [wd11e], a ld [wd11e], a
call GetMonName call GetMonName

View file

@ -322,11 +322,12 @@ WriteMonPartySpriteOAMByPartyIndex: ; 71868 (1c:5868)
pop hl pop hl
ret ret
WriteMonPartySpriteOAMByMonID: ; 71882 (1c:5882) WriteMonPartySpriteOAMBySpecies: ; 71882 (1c:5882)
; Write OAM blocks for mon ID in [wcd5d]. ; Write OAM blocks for the party sprite of the species in
; [wMonPartySpriteSpecies].
xor a xor a
ld [hPartyMonIndex], a ld [hPartyMonIndex], a
ld a, [wcd5d] ld a, [wMonPartySpriteSpecies]
call GetPartyMonSpriteID call GetPartyMonSpriteID
ld [wcd5b], a ld [wcd5b], a
jr WriteMonPartySpriteOAM jr WriteMonPartySpriteOAM
@ -334,7 +335,7 @@ WriteMonPartySpriteOAMByMonID: ; 71882 (1c:5882)
UnusedPartyMonSpriteFunction: ; 71890 (1c:5890) UnusedPartyMonSpriteFunction: ; 71890 (1c:5890)
; This function is unused and doesn't appear to do anything useful. It looks ; This function is unused and doesn't appear to do anything useful. It looks
; like it may have been intended to load the tile patterns and OAM data for ; like it may have been intended to load the tile patterns and OAM data for
; the mon party sprite associated with the mon ID in a. ; the mon party sprite associated with the species in [wcf91].
; However, its calculations are off and it loads garbage data. ; However, its calculations are off and it loads garbage data.
ld a, [wcf91] ld a, [wcf91]
call GetPartyMonSpriteID call GetPartyMonSpriteID
@ -346,8 +347,8 @@ UnusedPartyMonSpriteFunction: ; 71890 (1c:5890)
ld hl, vSprites + $40 ld hl, vSprites + $40
call .LoadTilePatterns call .LoadTilePatterns
xor a xor a
ld [wcd5d], a ld [wMonPartySpriteSpecies], a
jr WriteMonPartySpriteOAMByMonID jr WriteMonPartySpriteOAMBySpecies
.LoadTilePatterns ; 718ac (1c:58ac) .LoadTilePatterns ; 718ac (1c:58ac)
push hl push hl

View file

@ -99,7 +99,7 @@ PredefPointers:: ; 4fe79 (13:7e79)
add_predef InitOpponent add_predef InitOpponent
add_predef CableClub_Run add_predef CableClub_Run
add_predef DrawBadges add_predef DrawBadges
add_predef Func_410f3 add_predef ExternalClockTradeAnim
add_predef BattleTransition add_predef BattleTransition
add_predef CopyTileIDsFromList add_predef CopyTileIDsFromList
add_predef PlayIntro add_predef PlayIntro
@ -108,7 +108,7 @@ PredefPointers:: ; 4fe79 (13:7e79)
add_predef GetTileAndCoordsInFrontOfPlayer add_predef GetTileAndCoordsInFrontOfPlayer
add_predef StatusScreen add_predef StatusScreen
add_predef StatusScreen2 add_predef StatusScreen2
add_predef Func_410e2 add_predef InternalClockTradeAnim
add_predef TrainerEngage add_predef TrainerEngage
add_predef IndexToPokedex add_predef IndexToPokedex
add_predef Predef3B; 3B display pic? add_predef Predef3B; 3B display pic?

View file

@ -1,19 +1,23 @@
Func_410e2: ; 410e2 (10:50e2) InternalClockTradeAnim: ; 410e2 (10:50e2)
; Do the trading animation with the player's gameboy on the left.
; In-game trades and internally clocked link cable trades use this.
ld a, [wTradedPlayerMonSpecies] ld a, [wTradedPlayerMonSpecies]
ld [wcd5e], a ld [wLeftGBMonSpecies], a
ld a, [wTradedEnemyMonSpecies] ld a, [wTradedEnemyMonSpecies]
ld [wcd5f], a ld [wRightGBMonSpecies], a
ld de, PointerIDs_41138 ld de, InternalClockTradeFuncSequence
jr Func_41102 jr TradeAnimCommon
Func_410f3: ; 410f3 (10:50f3) ExternalClockTradeAnim: ; 410f3 (10:50f3)
; Do the trading animation with the player's gameboy on the right.
; Externally clocked link cable trades use this.
ld a, [wTradedEnemyMonSpecies] ld a, [wTradedEnemyMonSpecies]
ld [wcd5e], a ld [wLeftGBMonSpecies], a
ld a, [wTrainerSpriteOffset] ld a, [wTrainerSpriteOffset]
ld [wcd5f], a ld [wRightGBMonSpecies], a
ld de, PointerIDs_41149 ld de, ExternalClockTradeFuncSequence
Func_41102: ; 41102 (10:5102) TradeAnimCommon: ; 41102 (10:5102)
ld a, [W_OPTIONS] ld a, [W_OPTIONS]
push af push af
ld a, [hSCY] ld a, [hSCY]
@ -25,14 +29,14 @@ Func_41102: ; 41102 (10:5102)
ld [hSCY], a ld [hSCY], a
ld [hSCX], a ld [hSCX], a
push de push de
.asm_41115 .loop
pop de pop de
ld a, [de] ld a, [de]
cp $ff cp $ff
jr z, .asm_4112d jr z, .done
inc de inc de
push de push de
ld hl, PointerTable_4115f ld hl, TradeFuncPointerTable
add a add a
ld c, a ld c, a
ld b, $0 ld b, $0
@ -40,10 +44,10 @@ Func_41102: ; 41102 (10:5102)
ld a, [hli] ld a, [hli]
ld h, [hl] ld h, [hl]
ld l, a ld l, a
ld de, .asm_41115 ld de, .loop
push de push de
jp [hl] jp [hl] ; call trade func, which will return to the top of the loop
.asm_4112d .done
pop af pop af
ld [hSCX], a ld [hSCX], a
pop af pop af
@ -52,31 +56,80 @@ Func_41102: ; 41102 (10:5102)
ld [W_OPTIONS], a ld [W_OPTIONS], a
ret ret
; these bytes refer to the $00th through $10th pointer of PointerTable_4115f addtradefunc: MACRO
PointerIDs_41138: ; 41138 (10:5138) \1TradeFunc::
db $00,$01,$02,$03,$05,$07,$08,$09,$0A,$0B,$06,$08,$02,$04,$07,$0E,$FF dw \1
ENDM
PointerIDs_41149: ; 41149 (10:5149) tradefunc: MACRO
db $00,$08,$0D,$0B,$10,$05,$10,$08,$02,$04,$0F,$01,$02,$03,$10,$06,$10,$07,$08,$09,$0E,$FF db (\1TradeFunc - TradeFuncPointerTable) / 2
ENDM
PointerTable_4115f: ; 4115f (10:515f) ; The functions in the sequences below are executed in order by TradeFuncCommon.
dw LoadTradingGFXAndMonNames ; They are from opposite perspectives. The external clock one makes use of
dw Trade_ShowPlayerMon ; Trade_SwapNames to swap the player and enemy names for some functions.
dw Trade_DrawOpenEndOfLinkCable
dw Trade_AnimateBallEnteringLinkCable InternalClockTradeFuncSequence: ; 41138 (10:5138)
dw Trade_ShowEnemyMon tradefunc LoadTradingGFXAndMonNames
dw Func_41376 tradefunc Trade_ShowPlayerMon
dw Func_413c6 tradefunc Trade_DrawOpenEndOfLinkCable
dw Trade_Delay100 tradefunc Trade_AnimateBallEnteringLinkCable
dw Func_415c8 tradefunc Trade_AnimLeftToRight
dw PrintTradeWentToText tradefunc Trade_Delay100
dw PrintTradeForSendsText tradefunc Trade_ShowClearedWindow
dw PrintTradeFarewellText tradefunc PrintTradeWentToText
dw PrintTradeTakeCareText tradefunc PrintTradeForSendsText
dw PrintTradeWillTradeText tradefunc PrintTradeFarewellText
dw Func_4123b tradefunc Trade_AnimRightToLeft
dw Func_415df tradefunc Trade_ShowClearedWindow
dw Trade_SwapNames tradefunc Trade_DrawOpenEndOfLinkCable
tradefunc Trade_ShowEnemyMon
tradefunc Trade_Delay100
tradefunc Trade_Cleanup
db $FF
ExternalClockTradeFuncSequence: ; 41149 (10:5149)
tradefunc LoadTradingGFXAndMonNames
tradefunc Trade_ShowClearedWindow
tradefunc PrintTradeWillTradeText
tradefunc PrintTradeFarewellText
tradefunc Trade_SwapNames
tradefunc Trade_AnimLeftToRight
tradefunc Trade_SwapNames
tradefunc Trade_ShowClearedWindow
tradefunc Trade_DrawOpenEndOfLinkCable
tradefunc Trade_ShowEnemyMon
tradefunc Trade_SlideTextBoxOffScreen
tradefunc Trade_ShowPlayerMon
tradefunc Trade_DrawOpenEndOfLinkCable
tradefunc Trade_AnimateBallEnteringLinkCable
tradefunc Trade_SwapNames
tradefunc Trade_AnimRightToLeft
tradefunc Trade_SwapNames
tradefunc Trade_Delay100
tradefunc Trade_ShowClearedWindow
tradefunc PrintTradeWentToText
tradefunc Trade_Cleanup
db $FF
TradeFuncPointerTable: ; 4115f (10:515f)
addtradefunc LoadTradingGFXAndMonNames
addtradefunc Trade_ShowPlayerMon
addtradefunc Trade_DrawOpenEndOfLinkCable
addtradefunc Trade_AnimateBallEnteringLinkCable
addtradefunc Trade_ShowEnemyMon
addtradefunc Trade_AnimLeftToRight
addtradefunc Trade_AnimRightToLeft
addtradefunc Trade_Delay100
addtradefunc Trade_ShowClearedWindow
addtradefunc PrintTradeWentToText
addtradefunc PrintTradeForSendsText
addtradefunc PrintTradeFarewellText
addtradefunc PrintTradeTakeCareText
addtradefunc PrintTradeWillTradeText
addtradefunc Trade_Cleanup
addtradefunc Trade_SlideTextBoxOffScreen
addtradefunc Trade_SwapNames
Trade_Delay100: ; 41181 (10:5181) Trade_Delay100: ; 41181 (10:5181)
ld c, 100 ld c, 100
@ -121,13 +174,13 @@ LoadTradingGFXAndMonNames: ; 411a1 (10:51a1)
ld a, $ff ld a, $ff
ld [wUpdateSpritesEnabled], a ld [wUpdateSpritesEnabled], a
ld hl, wd730 ld hl, wd730
set 6, [hl] set 6, [hl] ; turn on instant text printing
ld a, [wOnSGB] ld a, [wOnSGB]
and a and a
ld a, $e4 ld a, $e4 ; non-SGB OBP0
jr z, .asm_411e5 jr z, .next
ld a, $f0 ld a, $f0 ; SGB OBP0
.asm_411e5 .next
ld [rOBP0], a ld [rOBP0], a
call EnableLCD call EnableLCD
xor a xor a
@ -143,7 +196,7 @@ LoadTradingGFXAndMonNames: ; 411a1 (10:51a1)
ld [wd11e], a ld [wd11e], a
jp GetMonName jp GetMonName
Func_4120b: ; 4120b (10:520b) Trade_LoadMonPartySpriteGfx: ; 4120b (10:520b)
ld a, %11010000 ld a, %11010000
ld [rOBP1], a ld [rOBP1], a
ld b, BANK(LoadMonPartySpriteGfx) ld b, BANK(LoadMonPartySpriteGfx)
@ -164,11 +217,11 @@ Trade_SwapNames: ; 41217 (10:5217)
ld bc, 11 ld bc, 11
jp CopyData jp CopyData
Func_4123b: ; 4123b (10:523b) Trade_Cleanup: ; 4123b (10:523b)
xor a xor a
call LoadGBPal call LoadGBPal
ld hl, wd730 ld hl, wd730
res 6, [hl] res 6, [hl] ; turn off instant text printing
ret ret
Trade_ShowPlayerMon: ; 41245 (10:5245) Trade_ShowPlayerMon: ; 41245 (10:5245)
@ -186,7 +239,7 @@ Trade_ShowPlayerMon: ; 41245 (10:5245)
ld c, 10 ld c, 10
call TextBoxBorder call TextBoxBorder
call Trade_PrintPlayerMonInfoText call Trade_PrintPlayerMonInfoText
ld b, $98 ld b, vBGMap0 / $100
call CopyScreenTileBufferToVRAM call CopyScreenTileBufferToVRAM
call ClearScreen call ClearScreen
ld a, [wTradedPlayerMonSpecies] ld a, [wTradedPlayerMonSpecies]
@ -215,12 +268,12 @@ Trade_ShowPlayerMon: ; 41245 (10:5245)
Trade_DrawOpenEndOfLinkCable: ; 41298 (10:5298) Trade_DrawOpenEndOfLinkCable: ; 41298 (10:5298)
call Trade_ClearTileMap call Trade_ClearTileMap
ld b, $98 ld b, vBGMap0 / $100
call CopyScreenTileBufferToVRAM call CopyScreenTileBufferToVRAM
ld b, $8 ld b, $8
call GoPAL_SET call GoPAL_SET
ld hl, vBGMap1 + $8c ld hl, vBGMap1 + $8c
call Trade_RedrawRows4And5 call Trade_CopyCableTilesOffScreen
ld a, $a0 ld a, $a0
ld [hSCX], a ld [hSCX], a
call DelayFrame call DelayFrame
@ -297,7 +350,7 @@ Trade_BallInsideLinkCableOAM: ; 4132e (10:532e)
Trade_ShowEnemyMon: ; 41336 (10:5336) Trade_ShowEnemyMon: ; 41336 (10:5336)
ld a, TRADE_BALL_TILT_ANIM ld a, TRADE_BALL_TILT_ANIM
call Trade_ShowAnimation call Trade_ShowAnimation
call Func_415c8 call Trade_ShowClearedWindow
hlCoord 4, 10 hlCoord 4, 10
ld b, 6 ld b, 6
ld c, 10 ld c, 10
@ -320,77 +373,80 @@ Trade_ShowEnemyMon: ; 41336 (10:5336)
call ClearScreenArea call ClearScreenArea
jp PrintTradeTakeCareText jp PrintTradeTakeCareText
Func_41376: ; 41376 (10:5376) Trade_AnimLeftToRight: ; 41376 (10:5376)
call Func_41411 ; Animates the mon moving from the left GB to the right one.
call Trade_InitGameboyTransferGfx
ld a, $1 ld a, $1
ld [wd08a], a ld [wTradedMonMovingRight], a
ld a, $e4 ld a, $e4
ld [rOBP0], a ld [rOBP0], a
ld a, $54 ld a, $54
ld [W_BASECOORDX], a ld [W_BASECOORDX], a
ld a, $1c ld a, $1c
ld [W_BASECOORDY], a ld [W_BASECOORDY], a
ld a, [wcd5e] ld a, [wLeftGBMonSpecies]
ld [wcd5d], a ld [wMonPartySpriteSpecies], a
call Func_41505 call Trade_WriteCircledMonOAM
call Func_4142d call Trade_DrawLeftGameboy
call Trade_CopyTileMapToVRAM call Trade_CopyTileMapToVRAM
call Func_4149f call Trade_DrawCableAcrossScreen
ld hl, vBGMap1 + $8c ld hl, vBGMap1 + $8c
call Trade_RedrawRows4And5 call Trade_CopyCableTilesOffScreen
ld b, $6 ld b, $6
call Func_414c5 call Trade_AnimMonMoveHorizontal
ld a, $1 ld a, $1
ld [H_AUTOBGTRANSFERENABLED], a ld [H_AUTOBGTRANSFERENABLED], a
call Func_4149f call Trade_DrawCableAcrossScreen
ld b, $4 ld b, $4
call Func_414c5 call Trade_AnimMonMoveHorizontal
call Func_4145c call Trade_DrawRightGameboy
ld b, $6 ld b, $6
call Func_414c5 call Trade_AnimMonMoveHorizontal
xor a xor a
ld [H_AUTOBGTRANSFERENABLED], a ld [H_AUTOBGTRANSFERENABLED], a
call Func_41525 call Trade_AnimMonMoveVertical
jp ClearSprites jp ClearSprites
Func_413c6: ; 413c6 (10:53c6) Trade_AnimRightToLeft: ; 413c6 (10:53c6)
call Func_41411 ; Animates the mon moving from the right GB to the left one.
call Trade_InitGameboyTransferGfx
xor a xor a
ld [wd08a], a ld [wTradedMonMovingRight], a
ld a, $64 ld a, $64
ld [W_BASECOORDX], a ld [W_BASECOORDX], a
ld a, $44 ld a, $44
ld [W_BASECOORDY], a ld [W_BASECOORDY], a
ld a, [wcd5f] ld a, [wRightGBMonSpecies]
ld [wcd5d], a ld [wMonPartySpriteSpecies], a
call Func_41505 call Trade_WriteCircledMonOAM
call Func_4145c call Trade_DrawRightGameboy
call Trade_CopyTileMapToVRAM call Trade_CopyTileMapToVRAM
call Func_4149f call Trade_DrawCableAcrossScreen
ld hl, vBGMap1 + $94 ld hl, vBGMap1 + $94
call Trade_RedrawRows4And5 call Trade_CopyCableTilesOffScreen
call Func_41525 call Trade_AnimMonMoveVertical
ld b, $6 ld b, $6
call Func_414c5 call Trade_AnimMonMoveHorizontal
ld a, $1 ld a, $1
ld [H_AUTOBGTRANSFERENABLED], a ld [H_AUTOBGTRANSFERENABLED], a
call Func_4149f call Trade_DrawCableAcrossScreen
ld b, $4 ld b, $4
call Func_414c5 call Trade_AnimMonMoveHorizontal
call Func_4142d call Trade_DrawLeftGameboy
ld b, $6 ld b, $6
call Func_414c5 call Trade_AnimMonMoveHorizontal
xor a xor a
ld [H_AUTOBGTRANSFERENABLED], a ld [H_AUTOBGTRANSFERENABLED], a
jp ClearSprites jp ClearSprites
Func_41411: ; 41411 (10:5411) Trade_InitGameboyTransferGfx: ; 41411 (10:5411)
; Initialises the graphics for showing a mon moving between gameboys.
ld a, $1 ld a, $1
ld [H_AUTOBGTRANSFERENABLED], a ld [H_AUTOBGTRANSFERENABLED], a
call ClearScreen call ClearScreen
xor a xor a
ld [H_AUTOBGTRANSFERENABLED], a ld [H_AUTOBGTRANSFERENABLED], a
call Func_4120b call Trade_LoadMonPartySpriteGfx
call DelayFrame call DelayFrame
ld a, %10101011 ld a, %10101011
ld [rLCDC], a ld [rLCDC], a
@ -400,20 +456,26 @@ Func_41411: ; 41411 (10:5411)
ld [hWY], a ld [hWY], a
ret ret
Func_4142d: ; 4142d (10:542d) Trade_DrawLeftGameboy: ; 4142d (10:542d)
call Trade_ClearTileMap call Trade_ClearTileMap
; draw link cable
hlCoord 11, 4 hlCoord 11, 4
ld a, $5d ld a, $5d
ld [hli], a ld [hli], a
ld a, $5e ld a, $5e
ld c, $8 ld c, $8
.asm_4143a .loop
ld [hli], a ld [hli], a
dec c dec c
jr nz, .asm_4143a jr nz, .loop
; draw gameboy pic
hlCoord 5, 3 hlCoord 5, 3
ld b, $6 ld b, $6
call CopyTileIDsFromList_ZeroBaseTileID call CopyTileIDsFromList_ZeroBaseTileID
; draw text box with player name below gameboy pic
hlCoord 4, 12 hlCoord 4, 12
ld b, 2 ld b, 2
ld c, 7 ld c, 7
@ -421,20 +483,25 @@ Func_4142d: ; 4142d (10:542d)
hlCoord 5, 14 hlCoord 5, 14
ld de, wPlayerName ld de, wPlayerName
call PlaceString call PlaceString
jp DelayFrame jp DelayFrame
Func_4145c: ; 4145c (10:545c) Trade_DrawRightGameboy: ; 4145c (10:545c)
call Trade_ClearTileMap call Trade_ClearTileMap
; draw horizontal segment of link cable
hlCoord 0, 4 hlCoord 0, 4
ld a, $5e ld a, $5e
ld c, $e ld c, $e
.asm_41466 .loop
ld [hli], a ld [hli], a
dec c dec c
jr nz, .asm_41466 jr nz, .loop
; draw vertical segment of link cable
ld a, $5f ld a, $5f
ld [hl], a ld [hl], a
ld de, $14 ld de, SCREEN_WIDTH
add hl, de add hl, de
ld a, $61 ld a, $61
ld [hl], a ld [hl], a
@ -449,9 +516,13 @@ Func_4145c: ; 4145c (10:545c)
ld [hld], a ld [hld], a
ld a, $5d ld a, $5d
ld [hl], a ld [hl], a
; draw gameboy pic
hlCoord 7, 8 hlCoord 7, 8
ld b, $6 ld b, $6
call CopyTileIDsFromList_ZeroBaseTileID call CopyTileIDsFromList_ZeroBaseTileID
; draw text box with enemy name above link cable
hlCoord 6, 0 hlCoord 6, 0
ld b, $2 ld b, $2
ld c, $7 ld c, $7
@ -459,20 +530,24 @@ Func_4145c: ; 4145c (10:545c)
hlCoord 7, 2 hlCoord 7, 2
ld de, wLinkEnemyTrainerName ld de, wLinkEnemyTrainerName
call PlaceString call PlaceString
jp DelayFrame jp DelayFrame
Func_4149f: ; 4149f (10:549f) Trade_DrawCableAcrossScreen: ; 4149f (10:549f)
; Draws the link cable across the screen.
call Trade_ClearTileMap call Trade_ClearTileMap
hlCoord 0, 4 hlCoord 0, 4
ld a, $5e ld a, $5e
ld c, $14 ld c, SCREEN_WIDTH
.asm_414a9 .loop
ld [hli], a ld [hli], a
dec c dec c
jr nz, .asm_414a9 jr nz, .loop
ret ret
Trade_RedrawRows4And5: ; 414ae (10:54ae) Trade_CopyCableTilesOffScreen: ; 414ae (10:54ae)
; This is used to copy the link cable tiles off screen so that the cable
; continues when the screen is scrolled.
push hl push hl
hlCoord 0, 4 hlCoord 0, 4
call CopyToScreenEdgeTiles call CopyToScreenEdgeTiles
@ -486,60 +561,65 @@ Trade_RedrawRows4And5: ; 414ae (10:54ae)
ld c, 10 ld c, 10
jp DelayFrames jp DelayFrames
Func_414c5: ; 414c5 (10:54c5) Trade_AnimMonMoveHorizontal: ; 414c5 (10:54c5)
ld a, [wd08a] ; Animates the mon going through the link cable horizontally over a distance of
; b 16-pixel units.
ld a, [wTradedMonMovingRight]
ld e, a ld e, a
ld d, $8 ld d, $8
.asm_414cb .scrollLoop
ld a, e ld a, e
dec a dec a
jr z, .asm_414d5 jr z, .movingRight
; moving left
ld a, [hSCX] ld a, [hSCX]
sub $2 sub $2
jr .asm_414d9 jr .next
.asm_414d5 .movingRight
ld a, [hSCX] ld a, [hSCX]
add $2 add $2
.asm_414d9 .next
ld [hSCX], a ld [hSCX], a
call DelayFrame call DelayFrame
dec d dec d
jr nz, .asm_414cb jr nz, .scrollLoop
call Func_414e8 call Trade_AnimCircledMon
dec b dec b
jr nz, Func_414c5 jr nz, Trade_AnimMonMoveHorizontal
ret ret
Func_414e8: ; 414e8 (10:54e8) Trade_AnimCircledMon: ; 414e8 (10:54e8)
; Cycles between the two animation frames of the mon party sprite, cycles
; between a circle and an oval around the mon sprite, and makes the cable flash.
push de push de
push bc push bc
push hl push hl
ld a, [rBGP] ld a, [rBGP]
xor $3c xor $3c ; make link cable flash
ld [rBGP], a ld [rBGP], a
ld hl, wOAMBuffer + $02 ld hl, wOAMBuffer + $02
ld de, $4 ld de, $4
ld c, $14 ld c, $14
.asm_414f9 .loop
ld a, [hl] ld a, [hl]
xor $40 xor $40
ld [hl], a ld [hl], a
add hl, de add hl, de
dec c dec c
jr nz, .asm_414f9 jr nz, .loop
pop hl pop hl
pop bc pop bc
pop de pop de
ret ret
Func_41505: ; 41505 (10:5505) Trade_WriteCircledMonOAM: ; 41505 (10:5505)
callba WriteMonPartySpriteOAMByMonID callba WriteMonPartySpriteOAMBySpecies
call Func_41558 call Trade_WriteCircleOAM
Func_41510: ; 41510 (10:5510) Trade_AddOffsetsToOAMCoords: ; 41510 (10:5510)
ld hl, wOAMBuffer ld hl, wOAMBuffer
ld c, $14 ld c, $14
.asm_41515 .loop
ld a, [W_BASECOORDY] ld a, [W_BASECOORDY]
add [hl] add [hl]
ld [hli], a ld [hli], a
@ -549,41 +629,52 @@ Func_41510: ; 41510 (10:5510)
inc hl inc hl
inc hl inc hl
dec c dec c
jr nz, .asm_41515 jr nz, .loop
ret ret
Func_41525: ; 41525 (10:5525) Trade_AnimMonMoveVertical: ; 41525 (10:5525)
ld a, [wd08a] ; Animates the mon going through the link cable vertically as well as
; horizontally for a bit. The last bit of horizontal movement (when moving
; right) or the first bit of horizontal movement (when moving left) are done
; here instead of Trade_AnimMonMoveHorizontal because this function moves the
; sprite itself rather than scrolling the screen around the sprite. Moving the
; sprite itself is necessary because the vertical segment of the link cable is
; to the right of the screen position that the mon sprite has when
; Trade_AnimMonMoveHorizontal is executing.
ld a, [wTradedMonMovingRight]
and a and a
jr z, .asm_41536 jr z, .movingLeft
ld bc, $400 ; moving right
call .asm_4153f ld bc, $400 ; move right
ld bc, $a call .doAnim
jr .asm_4153f ld bc, $a ; move down
.asm_41536 jr .doAnim
ld bc, $f6 .movingLeft
call .asm_4153f ld bc, $f6 ; move up
ld bc, $fc00 call .doAnim
.asm_4153f ld bc, $fc00 ; move left
.doAnim
ld a, b ld a, b
ld [W_BASECOORDX], a ld [W_BASECOORDX], a
ld a, c ld a, c
ld [W_BASECOORDY], a ld [W_BASECOORDY], a
ld d, $4 ld d, $4
.asm_41549 .loop
call Func_41510 call Trade_AddOffsetsToOAMCoords
call Func_414e8 call Trade_AnimCircledMon
ld c, $8 ld c, $8
call DelayFrames call DelayFrames
dec d dec d
jr nz, .asm_41549 jr nz, .loop
ret ret
Func_41558: ; 41558 (10:5558) Trade_WriteCircleOAM: ; 41558 (10:5558)
ld hl, OAMPointers_41574 ; Writes the OAM blocks for the circle around the traded mon as it passes
; the link cable.
ld hl, Trade_CircleOAMPointers
ld c, $4 ld c, $4
xor a xor a
.asm_4155e .loop
push bc push bc
ld e, [hl] ld e, [hl]
inc hl inc hl
@ -601,32 +692,32 @@ Func_41558: ; 41558 (10:5558)
pop hl pop hl
pop bc pop bc
dec c dec c
jr nz, .asm_4155e jr nz, .loop
ret ret
OAMPointers_41574: ; 41574 (10:5574) Trade_CircleOAMPointers: ; 41574 (10:5574)
dw UnknownOAM_41584 dw Trade_CircleOAM0
db $08,$08 db $08,$08
dw UnknownOAM_4158c dw Trade_CircleOAM1
db $18,$08 db $18,$08
dw UnknownOAM_41594 dw Trade_CircleOAM2
db $08,$18 db $08,$18
dw UnknownOAM_4159c dw Trade_CircleOAM3
db $18,$18 db $18,$18
UnknownOAM_41584: ; 41584 (10:5584) Trade_CircleOAM0: ; 41584 (10:5584)
db $38,$10,$39,$10 db $38,$10,$39,$10
db $3A,$10,$3B,$10 db $3A,$10,$3B,$10
UnknownOAM_4158c: ; 4158c (10:558c) Trade_CircleOAM1: ; 4158c (10:558c)
db $39,$30,$38,$30 db $39,$30,$38,$30
db $3B,$30,$3A,$30 db $3B,$30,$3A,$30
UnknownOAM_41594: ; 41594 (10:5594) Trade_CircleOAM2: ; 41594 (10:5594)
db $3A,$50,$3B,$50 db $3A,$50,$3B,$50
db $38,$50,$39,$50 db $38,$50,$39,$50
UnknownOAM_4159c: ; 4159c (10:559c) Trade_CircleOAM3: ; 4159c (10:559c)
db $3B,$70,$3A,$70 db $3B,$70,$3A,$70
db $39,$70,$38,$70 db $39,$70,$38,$70
@ -647,7 +738,8 @@ Trade_LoadMonSprite: ; 415a4 (10:55a4)
ld c, 10 ld c, 10
jp DelayFrames jp DelayFrames
Func_415c8: ; 415c8 (10:55c8) Trade_ShowClearedWindow: ; 415c8 (10:55c8)
; clears the window and covers the BG entirely with the window
ld a, $1 ld a, $1
ld [H_AUTOBGTRANSFERENABLED], a ld [H_AUTOBGTRANSFERENABLED], a
call ClearScreen call ClearScreen
@ -661,7 +753,8 @@ Func_415c8: ; 415c8 (10:55c8)
ld [hSCX], a ld [hSCX], a
ret ret
Func_415df: ; 415df (10:55df) Trade_SlideTextBoxOffScreen: ; 415df (10:55df)
; Slides the window right until it's off screen.
ld c, 50 ld c, 50
call DelayFrames call DelayFrames
.loop .loop
@ -684,7 +777,7 @@ PrintTradeWentToText: ; 415fe (10:55fe)
call PrintText call PrintText
ld c, 200 ld c, 200
call DelayFrames call DelayFrames
jp Func_415df jp Trade_SlideTextBoxOffScreen
TradeWentToText: ; 4160c (10:560c) TradeWentToText: ; 4160c (10:560c)
TX_FAR _TradeWentToText TX_FAR _TradeWentToText
@ -713,7 +806,7 @@ PrintTradeFarewellText: ; 4162d (10:562d)
ld hl, TradeTransferredText ld hl, TradeTransferredText
call PrintText call PrintText
call Trade_Delay80 call Trade_Delay80
jp Func_415df jp Trade_SlideTextBoxOffScreen
TradeWavesFarewellText: ; 41642 (10:5642) TradeWavesFarewellText: ; 41642 (10:5642)
TX_FAR _TradeWavesFarewellText TX_FAR _TradeWavesFarewellText

View file

@ -658,9 +658,17 @@ wTradedEnemyMonOTID:: ; cd59
wcd5b:: ds 1 wcd5b:: ds 1
wcd5c:: ds 1 wcd5c:: ds 1
wcd5d:: ds 1
wcd5e:: ds 1 wMonPartySpriteSpecies:: ; cd5d
wcd5f:: ds 1 ds 1
wLeftGBMonSpecies:: ; cd5e
; in the trade animation, the mon that leaves the left gameboy
ds 1
wRightGBMonSpecies:: ; cd5f
; in the trade animation, the mon that leaves the right gameboy
ds 1
wFlags_0xcd60:: ; cd60 wFlags_0xcd60:: ; cd60
; bit 0: is player engaged by trainer (to avoid being engaged by multiple trainers simultaneously) ; bit 0: is player engaged by trainer (to avoid being engaged by multiple trainers simultaneously)
@ -1114,6 +1122,9 @@ W_NUMFBTILES:: ; d089
; number of tiles in current battle animation frame block ; number of tiles in current battle animation frame block
ds 1 ds 1
wTradedMonMovingRight:: ; d08a
; $01 if mon is moving from left gameboy to right gameboy; $00 if vice versa
wd08a:: ds 1 wd08a:: ds 1
wTownMapSpriteBlinkingCounter:: ; d08b wTownMapSpriteBlinkingCounter:: ; d08b