mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
Resolve #471 (although link code still needs more cleanup, like its WRAM labels)
This commit is contained in:
parent
52993d20ef
commit
0c6338836d
@ -6,7 +6,25 @@
|
||||
const LINK_COLOSSEUM ; 3
|
||||
const LINK_MOBILE ; 4
|
||||
|
||||
|
||||
; hSerialReceive high nybbles
|
||||
SERIAL_TIMECAPSULE EQU $60
|
||||
SERIAL_TRADECENTER EQU $70
|
||||
SERIAL_BATTLE EQU $80
|
||||
|
||||
ESTABLISH_CONNECTION_WITH_INTERNAL_CLOCK EQU $01
|
||||
ESTABLISH_CONNECTION_WITH_EXTERNAL_CLOCK EQU $02
|
||||
|
||||
START_TRANSFER_EXTERNAL_CLOCK EQU $80 ; 1 << rSC_ON
|
||||
START_TRANSFER_INTERNAL_CLOCK EQU $81 ; (1 << rSC_ON) | 1
|
||||
|
||||
; hSerialConnectionStatus
|
||||
USING_EXTERNAL_CLOCK EQU $01
|
||||
USING_INTERNAL_CLOCK EQU $02
|
||||
CONNECTION_NOT_ESTABLISHED EQU $ff
|
||||
|
||||
; signals the start of an array of bytes transferred over the link cable
|
||||
SERIAL_PREAMBLE_BYTE EQU $fd
|
||||
; this byte is used when there is no data to send
|
||||
SERIAL_NO_DATA_BYTE EQU $fe
|
||||
; signals the end of one part of a patch list (there are two parts) for player/enemy party data
|
||||
SERIAL_PATCH_LIST_PART_TERMINATOR EQU $ff
|
||||
|
@ -26,7 +26,7 @@ DoBattle: ; 3c000
|
||||
and a
|
||||
jr z, .not_linked
|
||||
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $2
|
||||
jr z, .player_2
|
||||
|
||||
@ -97,7 +97,7 @@ DoBattle: ; 3c000
|
||||
ld a, [wLinkMode]
|
||||
and a
|
||||
jr z, .not_linked_2
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $2
|
||||
jr nz, .not_linked_2
|
||||
xor a
|
||||
@ -251,7 +251,7 @@ Stubbed_Function3c1bf:
|
||||
; 3c1d6
|
||||
|
||||
HandleBetweenTurnEffects: ; 3c1d6
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .CheckEnemyFirst
|
||||
call CheckFaint_PlayerThenEnemy
|
||||
@ -350,7 +350,7 @@ CheckFaint_EnemyThenPlayer: ; 3c25c
|
||||
; 3c27c
|
||||
|
||||
HandleBerserkGene: ; 3c27c
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .reverse
|
||||
|
||||
@ -458,7 +458,7 @@ DetermineMoveOrder: ; 3c314
|
||||
ld a, [wPlayerAction]
|
||||
cp $2
|
||||
jr nz, .switch
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $2
|
||||
jr z, .player_2
|
||||
|
||||
@ -515,7 +515,7 @@ DetermineMoveOrder: ; 3c314
|
||||
jp .enemy_first
|
||||
|
||||
.both_have_quick_claw
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $2
|
||||
jr z, .player_2b
|
||||
call BattleRandom
|
||||
@ -545,7 +545,7 @@ DetermineMoveOrder: ; 3c314
|
||||
jp .enemy_first
|
||||
|
||||
.speed_tie
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $2
|
||||
jr z, .player_2c
|
||||
call BattleRandom
|
||||
@ -709,7 +709,7 @@ ParsePlayerAction: ; 3c434
|
||||
; 3c4df
|
||||
|
||||
HandleEncore: ; 3c4df
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .player_1
|
||||
call .do_player
|
||||
@ -1161,7 +1161,7 @@ ResidualDamage: ; 3c716
|
||||
; 3c801
|
||||
|
||||
HandlePerishSong: ; 3c801
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .EnemyFirst
|
||||
call SetPlayerTurn
|
||||
@ -1230,7 +1230,7 @@ HandlePerishSong: ; 3c801
|
||||
; 3c874
|
||||
|
||||
HandleWrap: ; 3c874
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .EnemyFirst
|
||||
call SetPlayerTurn
|
||||
@ -1302,7 +1302,7 @@ SwitchTurnCore: ; 3c8e4
|
||||
; 3c8eb
|
||||
|
||||
HandleLeftovers: ; 3c8eb
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .DoEnemyFirst
|
||||
call SetPlayerTurn
|
||||
@ -1352,7 +1352,7 @@ HandleLeftovers: ; 3c8eb
|
||||
; 3c93c
|
||||
|
||||
HandleMysteryberry: ; 3c93c
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .DoEnemyFirst
|
||||
call SetPlayerTurn
|
||||
@ -1491,7 +1491,7 @@ HandleMysteryberry: ; 3c93c
|
||||
; 3ca26
|
||||
|
||||
HandleFutureSight: ; 3ca26
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .enemy_first
|
||||
call SetPlayerTurn
|
||||
@ -1550,7 +1550,7 @@ HandleFutureSight: ; 3ca26
|
||||
; 3ca8f
|
||||
|
||||
HanleDefrost: ; 3ca8f
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .enemy_first
|
||||
call .do_player_turn
|
||||
@ -1610,7 +1610,7 @@ HanleDefrost: ; 3ca8f
|
||||
; 3cafb
|
||||
|
||||
HandleSafeguard: ; 3cafb
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .player1
|
||||
call .CheckPlayer
|
||||
@ -1647,7 +1647,7 @@ HandleSafeguard: ; 3cafb
|
||||
jp StdBattleTextBox
|
||||
|
||||
HandleScreens: ; 3cb36
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp 1
|
||||
jr z, .Both
|
||||
call .CheckPlayer
|
||||
@ -1731,7 +1731,7 @@ HandleWeather: ; 3cb9e
|
||||
cp WEATHER_SANDSTORM
|
||||
ret nz
|
||||
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp 1
|
||||
jr z, .enemy_first
|
||||
|
||||
@ -2115,7 +2115,7 @@ HandleEnemyMonFaint: ; 3cd55
|
||||
; 3cdca
|
||||
|
||||
DoubleSwitch: ; 3cdca
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .player_1
|
||||
call ClearSprites
|
||||
@ -4350,7 +4350,7 @@ RecallPlayerMon: ; 3dce6
|
||||
; 3dcf9
|
||||
|
||||
HandleHealingItems: ; 3dcf9
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .player_1
|
||||
call SetPlayerTurn
|
||||
@ -4595,7 +4595,7 @@ UseConfusionHealingItem: ; 3de51
|
||||
|
||||
HandleStatBoostingHeldItems: ; 3de97
|
||||
; The effects handled here are not used in-game.
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .player_1
|
||||
call .DoPlayer
|
||||
@ -5374,7 +5374,7 @@ PlayerSwitch: ; 3e3ad
|
||||
ret
|
||||
|
||||
.dont_run
|
||||
ld a, [hLinkPlayerNumber]
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp $1
|
||||
jr z, .player_1
|
||||
call BattleMonEntrance
|
||||
|
286
engine/link.asm
286
engine/link.asm
@ -28,9 +28,9 @@ LinkCommunications: ; 28000
|
||||
call SetTradeRoomBGPals
|
||||
call WaitBGMap2
|
||||
ld hl, wcf5d
|
||||
xor a
|
||||
xor a ; LOW($5000)
|
||||
ld [hli], a
|
||||
ld [hl], $50
|
||||
ld [hl], HIGH($5000)
|
||||
ld a, [wLinkMode]
|
||||
cp LINK_TIMECAPSULE
|
||||
jp nz, Gen2ToGen2LinkComms
|
||||
@ -42,29 +42,31 @@ TimeCapsule: ; 2805d
|
||||
xor a
|
||||
ld [wPlayerLinkAction], a
|
||||
call WaitLinkTransfer
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $2
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_INTERNAL_CLOCK
|
||||
jr nz, .player_1
|
||||
|
||||
ld c, 3
|
||||
call DelayFrames
|
||||
xor a
|
||||
ld [hSerialSend], a
|
||||
ld a, $1
|
||||
ld a, (0 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
ld a, $81
|
||||
ld a, (1 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
|
||||
call DelayFrame
|
||||
xor a
|
||||
ld [hSerialSend], a
|
||||
ld a, $1
|
||||
ld a, (0 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
ld a, $81
|
||||
ld a, (1 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
|
||||
.player_1
|
||||
ld de, MUSIC_NONE
|
||||
call PlayMusic
|
||||
ld c, $3
|
||||
ld c, 3
|
||||
call DelayFrames
|
||||
xor a
|
||||
ld [rIF], a
|
||||
@ -73,19 +75,19 @@ TimeCapsule: ; 2805d
|
||||
ld hl, wd1f3
|
||||
ld de, EnemyMonSpecies
|
||||
ld bc, $11
|
||||
call Function75f
|
||||
ld a, $fe
|
||||
call Serial_ExchangeBytes
|
||||
ld a, SERIAL_NO_DATA_BYTE
|
||||
ld [de], a
|
||||
ld hl, wLinkData
|
||||
ld de, OTPlayerName
|
||||
ld bc, $1a8
|
||||
call Function75f
|
||||
ld a, $fe
|
||||
call Serial_ExchangeBytes
|
||||
ld a, SERIAL_NO_DATA_BYTE
|
||||
ld [de], a
|
||||
ld hl, wMisc
|
||||
ld de, wPlayerTrademonSpecies
|
||||
ld bc, wPlayerTrademonSpecies - wMisc
|
||||
call Function75f
|
||||
call Serial_ExchangeBytes
|
||||
xor a
|
||||
ld [rIF], a
|
||||
ld a, $1d
|
||||
@ -107,25 +109,25 @@ TimeCapsule: ; 2805d
|
||||
call Link_CopyOTData
|
||||
ld de, wPlayerTrademonSpecies
|
||||
ld hl, wTimeCapsulePartyMon1Species
|
||||
ld c, $2
|
||||
ld c, 2
|
||||
.loop
|
||||
ld a, [de]
|
||||
inc de
|
||||
and a
|
||||
jr z, .loop
|
||||
cp $fd
|
||||
cp SERIAL_PREAMBLE_BYTE
|
||||
jr z, .loop
|
||||
cp $fe
|
||||
cp SERIAL_NO_DATA_BYTE
|
||||
jr z, .loop
|
||||
cp $ff
|
||||
cp SERIAL_PATCH_LIST_PART_TERMINATOR
|
||||
jr z, .next
|
||||
push hl
|
||||
push bc
|
||||
ld b, $0
|
||||
ld b, 0
|
||||
dec a
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, $fe
|
||||
ld a, SERIAL_NO_DATA_BYTE
|
||||
ld [hl], a
|
||||
pop bc
|
||||
pop hl
|
||||
@ -168,8 +170,8 @@ TimeCapsule: ; 2805d
|
||||
ld [wUnusedD102 + 1], a
|
||||
ld de, MUSIC_NONE
|
||||
call PlayMusic
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $2
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_INTERNAL_CLOCK
|
||||
ld c, 66
|
||||
call z, DelayFrames
|
||||
ld de, MUSIC_ROUTE_30
|
||||
@ -185,23 +187,25 @@ Gen2ToGen2LinkComms: ; 28177
|
||||
ld a, [ScriptVar]
|
||||
and a
|
||||
jp z, LinkTimeout
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $2
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_INTERNAL_CLOCK
|
||||
jr nz, .Player1
|
||||
|
||||
ld c, 3
|
||||
call DelayFrames
|
||||
xor a
|
||||
ld [hSerialSend], a
|
||||
ld a, $1
|
||||
ld a, (0 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
ld a, $81
|
||||
ld a, (1 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
|
||||
call DelayFrame
|
||||
xor a
|
||||
ld [hSerialSend], a
|
||||
ld a, $1
|
||||
ld a, (0 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
ld a, $81
|
||||
ld a, (1 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
|
||||
.Player1:
|
||||
@ -216,26 +220,26 @@ Gen2ToGen2LinkComms: ; 28177
|
||||
ld hl, wd1f3
|
||||
ld de, EnemyMonSpecies
|
||||
ld bc, $11
|
||||
call Function75f
|
||||
ld a, $fe
|
||||
call Serial_ExchangeBytes
|
||||
ld a, SERIAL_NO_DATA_BYTE
|
||||
ld [de], a
|
||||
ld hl, wLinkData
|
||||
ld de, OTPlayerName
|
||||
ld bc, $1c2
|
||||
call Function75f
|
||||
ld a, $fe
|
||||
call Serial_ExchangeBytes
|
||||
ld a, SERIAL_NO_DATA_BYTE
|
||||
ld [de], a
|
||||
ld hl, wMisc
|
||||
ld de, wPlayerTrademonSpecies
|
||||
ld bc, $c8
|
||||
call Function75f
|
||||
call Serial_ExchangeBytes
|
||||
ld a, [wLinkMode]
|
||||
cp LINK_TRADECENTER
|
||||
jr nz, .not_trading
|
||||
ld hl, wc9f4
|
||||
ld de, wcb84
|
||||
ld bc, $186
|
||||
call Function283f2
|
||||
call ExchangeBytes
|
||||
|
||||
.not_trading
|
||||
xor a
|
||||
@ -252,25 +256,25 @@ Gen2ToGen2LinkComms: ; 28177
|
||||
call Link_CopyOTData
|
||||
ld de, wPlayerTrademonSpecies
|
||||
ld hl, wLinkPlayerPartyMon1Species
|
||||
ld c, $2
|
||||
ld c, 2
|
||||
.loop1
|
||||
ld a, [de]
|
||||
inc de
|
||||
and a
|
||||
jr z, .loop1
|
||||
cp $fd
|
||||
cp SERIAL_PREAMBLE_BYTE
|
||||
jr z, .loop1
|
||||
cp $fe
|
||||
cp SERIAL_NO_DATA_BYTE
|
||||
jr z, .loop1
|
||||
cp $ff
|
||||
cp SERIAL_PATCH_LIST_PART_TERMINATOR
|
||||
jr z, .next1
|
||||
push hl
|
||||
push bc
|
||||
ld b, $0
|
||||
ld b, 0
|
||||
dec a
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, $fe
|
||||
ld a, SERIAL_NO_DATA_BYTE
|
||||
ld [hl], a
|
||||
pop bc
|
||||
pop hl
|
||||
@ -286,13 +290,13 @@ Gen2ToGen2LinkComms: ; 28177
|
||||
ld hl, wcb84
|
||||
.loop2
|
||||
ld a, [hli]
|
||||
cp $20
|
||||
cp MAIL_MSG_LENGTH
|
||||
jr nz, .loop2
|
||||
.loop3
|
||||
ld a, [hli]
|
||||
cp $fe
|
||||
cp SERIAL_NO_DATA_BYTE
|
||||
jr z, .loop3
|
||||
cp $20
|
||||
cp MAIL_MSG_LENGTH
|
||||
jr z, .loop3
|
||||
dec hl
|
||||
ld de, wcb84
|
||||
@ -302,9 +306,9 @@ Gen2ToGen2LinkComms: ; 28177
|
||||
ld bc, $c6 ; 198
|
||||
.loop4
|
||||
ld a, [hl]
|
||||
cp $21
|
||||
cp MAIL_MSG_LENGTH + 1
|
||||
jr nz, .okay1
|
||||
ld [hl], $fe
|
||||
ld [hl], SERIAL_NO_DATA_BYTE
|
||||
.okay1
|
||||
inc hl
|
||||
dec bc
|
||||
@ -315,14 +319,14 @@ Gen2ToGen2LinkComms: ; 28177
|
||||
.loop5
|
||||
ld a, [de]
|
||||
inc de
|
||||
cp $ff
|
||||
cp SERIAL_PATCH_LIST_PART_TERMINATOR
|
||||
jr z, .start_copying_mail
|
||||
ld hl, wcc4a
|
||||
dec a
|
||||
ld b, $0
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld [hl], $fe
|
||||
ld [hl], SERIAL_NO_DATA_BYTE
|
||||
jr .loop5
|
||||
|
||||
.start_copying_mail
|
||||
@ -395,7 +399,7 @@ Gen2ToGen2LinkComms: ; 28177
|
||||
ld bc, NAME_LENGTH
|
||||
call CopyBytes
|
||||
ld de, OTPartyCount
|
||||
ld bc, 8
|
||||
ld bc, 1 + PARTY_LENGTH + 1
|
||||
call CopyBytes
|
||||
ld de, OTPlayerID
|
||||
ld bc, 2
|
||||
@ -409,8 +413,8 @@ Gen2ToGen2LinkComms: ; 28177
|
||||
ld [wUnusedD102 + 1], a
|
||||
ld de, MUSIC_NONE
|
||||
call PlayMusic
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $2
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_INTERNAL_CLOCK
|
||||
ld c, 66
|
||||
call z, DelayFrames
|
||||
ld a, [wLinkMode]
|
||||
@ -423,8 +427,8 @@ Gen2ToGen2LinkComms: ; 28177
|
||||
ld hl, Options
|
||||
ld a, [hl]
|
||||
push af
|
||||
and $20
|
||||
or $3
|
||||
and 1 << STEREO
|
||||
or TEXT_DELAY_MED
|
||||
ld [hl], a
|
||||
ld hl, OTPlayerName
|
||||
ld de, OTClassName
|
||||
@ -510,28 +514,28 @@ LinkTimeout: ; 283b2
|
||||
db "@"
|
||||
; 0x283f2
|
||||
|
||||
Function283f2: ; 283f2
|
||||
ld a, $1
|
||||
ld [hFFCC], a
|
||||
ExchangeBytes: ; 283f2
|
||||
ld a, TRUE
|
||||
ld [hSerialIgnoringInitialData], a
|
||||
.loop
|
||||
ld a, [hl]
|
||||
ld [hSerialSend], a
|
||||
call Function78a
|
||||
call Serial_ExchangeByte
|
||||
push bc
|
||||
ld b, a
|
||||
inc hl
|
||||
ld a, $30
|
||||
ld a, 48
|
||||
.delay_cycles
|
||||
dec a
|
||||
jr nz, .delay_cycles
|
||||
ld a, [hFFCC]
|
||||
ld a, [hSerialIgnoringInitialData]
|
||||
and a
|
||||
ld a, b
|
||||
pop bc
|
||||
jr z, .load
|
||||
dec hl
|
||||
xor a
|
||||
ld [hFFCC], a
|
||||
ld [hSerialIgnoringInitialData], a
|
||||
jr .loop
|
||||
|
||||
.load
|
||||
@ -563,7 +567,7 @@ ClearLinkData: ; 28426
|
||||
|
||||
FixDataForLinkTransfer: ; 28434
|
||||
ld hl, wd1f3
|
||||
ld a, $fd
|
||||
ld a, SERIAL_PREAMBLE_BYTE
|
||||
ld b, LinkBattleRNs - wd1f3
|
||||
.loop1
|
||||
ld [hli], a
|
||||
@ -572,13 +576,13 @@ FixDataForLinkTransfer: ; 28434
|
||||
ld b, TempEnemyMonSpecies - LinkBattleRNs
|
||||
.loop2
|
||||
call Random
|
||||
cp $fd
|
||||
cp SERIAL_PREAMBLE_BYTE
|
||||
jr nc, .loop2
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .loop2
|
||||
ld hl, wMisc
|
||||
ld a, $fd
|
||||
ld a, SERIAL_PREAMBLE_BYTE
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
@ -594,7 +598,7 @@ FixDataForLinkTransfer: ; 28434
|
||||
.loop4
|
||||
inc c
|
||||
ld a, c
|
||||
cp $fd
|
||||
cp SERIAL_PREAMBLE_BYTE
|
||||
jr z, .next1
|
||||
ld a, b
|
||||
dec a
|
||||
@ -613,31 +617,31 @@ FixDataForLinkTransfer: ; 28434
|
||||
.next2
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
cp $fe
|
||||
cp SERIAL_NO_DATA_BYTE
|
||||
jr nz, .loop4
|
||||
ld a, c
|
||||
ld [de], a
|
||||
inc de
|
||||
ld [hl], $ff
|
||||
ld [hl], SERIAL_PATCH_LIST_PART_TERMINATOR
|
||||
jr .loop4
|
||||
|
||||
.next1
|
||||
ld a, $ff
|
||||
ld a, SERIAL_PATCH_LIST_PART_TERMINATOR
|
||||
ld [de], a
|
||||
inc de
|
||||
lb bc, 1, 0
|
||||
jr .loop4
|
||||
|
||||
.done
|
||||
ld a, $ff
|
||||
ld a, SERIAL_PATCH_LIST_PART_TERMINATOR
|
||||
ld [de], a
|
||||
ret
|
||||
; 28499
|
||||
|
||||
Link_PrepPartyData_Gen1: ; 28499
|
||||
ld de, wLinkData
|
||||
ld a, $fd
|
||||
ld b, 6
|
||||
ld a, SERIAL_PREAMBLE_BYTE
|
||||
ld b, PARTY_LENGTH
|
||||
.loop1
|
||||
ld [de], a
|
||||
inc de
|
||||
@ -804,8 +808,8 @@ Link_PrepPartyData_Gen1: ; 28499
|
||||
|
||||
Link_PrepPartyData_Gen2: ; 28595
|
||||
ld de, wLinkData
|
||||
ld a, $fd
|
||||
ld b, 6
|
||||
ld a, SERIAL_PREAMBLE_BYTE
|
||||
ld b, PARTY_LENGTH
|
||||
.loop1
|
||||
ld [de], a
|
||||
inc de
|
||||
@ -907,7 +911,7 @@ Link_PrepPartyData_Gen2: ; 28595
|
||||
ld bc, PARTY_LENGTH * (sPartyMon1MailAuthor - sPartyMon1Mail)
|
||||
.loop5
|
||||
ld a, [hl]
|
||||
cp $fe
|
||||
cp SERIAL_NO_DATA_BYTE
|
||||
jr nz, .skip2
|
||||
ld [hl], sPartyMon1MailAuthor - sPartyMon1Mail
|
||||
|
||||
@ -924,9 +928,9 @@ Link_PrepPartyData_Gen2: ; 28595
|
||||
.loop6
|
||||
inc c
|
||||
ld a, [hl]
|
||||
cp $fe
|
||||
cp SERIAL_NO_DATA_BYTE
|
||||
jr nz, .skip3
|
||||
ld [hl], $ff
|
||||
ld [hl], SERIAL_PATCH_LIST_PART_TERMINATOR
|
||||
ld a, c
|
||||
ld [de], a
|
||||
inc de
|
||||
@ -935,13 +939,13 @@ Link_PrepPartyData_Gen2: ; 28595
|
||||
inc hl
|
||||
dec b
|
||||
jr nz, .loop6
|
||||
ld a, $ff
|
||||
ld a, SERIAL_PATCH_LIST_PART_TERMINATOR
|
||||
ld [de], a
|
||||
ret
|
||||
; 28682
|
||||
|
||||
Function28682: ; 28682
|
||||
ld c, $5
|
||||
ld c, 5
|
||||
.loop
|
||||
ld [de], a
|
||||
inc de
|
||||
@ -1129,7 +1133,7 @@ INCLUDE "data/items/catch_rate_items.asm"
|
||||
Link_CopyOTData: ; 2879e
|
||||
.loop
|
||||
ld a, [hli]
|
||||
cp $fe
|
||||
cp SERIAL_NO_DATA_BYTE
|
||||
jr z, .loop
|
||||
ld [de], a
|
||||
inc de
|
||||
@ -1141,8 +1145,8 @@ Link_CopyOTData: ; 2879e
|
||||
; 287ab
|
||||
|
||||
Link_CopyRandomNumbers: ; 287ab
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $2
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_INTERNAL_CLOCK
|
||||
ret z
|
||||
ld hl, EnemyMonSpecies
|
||||
call Link_FindFirstNonControlCharacter_AllowZero
|
||||
@ -1150,9 +1154,9 @@ Link_CopyRandomNumbers: ; 287ab
|
||||
ld c, 10
|
||||
.loop
|
||||
ld a, [hli]
|
||||
cp $fe
|
||||
cp SERIAL_NO_DATA_BYTE
|
||||
jr z, .loop
|
||||
cp $fd
|
||||
cp SERIAL_PREAMBLE_BYTE
|
||||
jr z, .loop
|
||||
ld [de], a
|
||||
inc de
|
||||
@ -1166,9 +1170,9 @@ Link_FindFirstNonControlCharacter_SkipZero: ; 287ca
|
||||
ld a, [hli]
|
||||
and a
|
||||
jr z, .loop
|
||||
cp $fd
|
||||
cp SERIAL_PREAMBLE_BYTE
|
||||
jr z, .loop
|
||||
cp $fe
|
||||
cp SERIAL_NO_DATA_BYTE
|
||||
jr z, .loop
|
||||
dec hl
|
||||
ret
|
||||
@ -1177,9 +1181,9 @@ Link_FindFirstNonControlCharacter_SkipZero: ; 287ca
|
||||
Link_FindFirstNonControlCharacter_AllowZero: ; 287d8
|
||||
.loop
|
||||
ld a, [hli]
|
||||
cp $fd
|
||||
cp SERIAL_PREAMBLE_BYTE
|
||||
jr z, .loop
|
||||
cp $fe
|
||||
cp SERIAL_NO_DATA_BYTE
|
||||
jr z, .loop
|
||||
dec hl
|
||||
ret
|
||||
@ -1219,7 +1223,7 @@ LinkTrade_OTPartyMenu: ; 28803
|
||||
ld [wMenuCursorX], a
|
||||
ln a, 1, 0
|
||||
ld [w2DMenuCursorOffsets], a
|
||||
ld a, $20
|
||||
ld a, MENU_UNUSED_3
|
||||
ld [w2DMenuFlags1], a
|
||||
xor a
|
||||
ld [w2DMenuFlags2], a
|
||||
@ -1231,7 +1235,7 @@ LinkTradeOTPartymonMenuLoop: ; 28835
|
||||
jp z, LinkTradePartiesMenuMasterLoop
|
||||
bit A_BUTTON_F, a
|
||||
jr z, .not_a_button
|
||||
ld a, $1
|
||||
ld a, INIT_ENEMYOT_LIST
|
||||
ld [wInitListType], a
|
||||
callfar InitList
|
||||
ld hl, OTPartyMon1Species
|
||||
@ -1284,7 +1288,7 @@ LinkTrade_PlayerPartyMenu: ; 2888b
|
||||
ld [wMenuCursorX], a
|
||||
ln a, 1, 0
|
||||
ld [w2DMenuCursorOffsets], a
|
||||
ld a, $20
|
||||
ld a, MENU_UNUSED_3
|
||||
ld [w2DMenuFlags1], a
|
||||
xor a
|
||||
ld [w2DMenuFlags2], a
|
||||
@ -1424,7 +1428,7 @@ Function28926: ; 28926
|
||||
.show_stats
|
||||
pop af
|
||||
ld [wMenuCursorY], a
|
||||
ld a, $4
|
||||
ld a, INIT_PLAYEROT_LIST
|
||||
ld [wInitListType], a
|
||||
callfar InitList
|
||||
farcall LinkMonStatsScreen
|
||||
@ -1478,7 +1482,7 @@ Function28926: ; 28926
|
||||
ld a, [wd003]
|
||||
ld hl, OTPartySpecies
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld b, 0
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [wd265], a
|
||||
@ -1583,9 +1587,9 @@ Function28b22: ; 28b22
|
||||
xor a
|
||||
ld [rSB], a
|
||||
ld [hSerialSend], a
|
||||
ld a, $1
|
||||
ld a, (0 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
ld a, $81
|
||||
ld a, (1 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
ret
|
||||
; 28b42
|
||||
@ -1639,14 +1643,14 @@ LinkTrade: ; 28b87
|
||||
ld [wcf57], a
|
||||
ld [wOtherPlayerLinkAction], a
|
||||
hlcoord 0, 12
|
||||
ld b, $4
|
||||
ld c, $12
|
||||
ld b, 4
|
||||
ld c, 18
|
||||
call LinkTextboxAtHL
|
||||
farcall Link_WaitBGMap
|
||||
ld a, [wd002]
|
||||
ld hl, PartySpecies
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld b, 0
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [wd265], a
|
||||
@ -1658,7 +1662,7 @@ LinkTrade: ; 28b87
|
||||
ld a, [wd003]
|
||||
ld hl, OTPartySpecies
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld b, 0
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [wd265], a
|
||||
@ -1749,7 +1753,7 @@ LinkTrade: ; 28b87
|
||||
.asm_28c96
|
||||
inc c
|
||||
ld a, c
|
||||
cp $6
|
||||
cp PARTY_LENGTH
|
||||
jr z, .asm_28ca6
|
||||
push bc
|
||||
ld bc, MAIL_STRUCT_LENGTH
|
||||
@ -1778,7 +1782,7 @@ LinkTrade: ; 28b87
|
||||
call CopyBytes
|
||||
ld a, [wd002]
|
||||
ld hl, PartySpecies
|
||||
ld b, $0
|
||||
ld b, 0
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
@ -1818,7 +1822,7 @@ LinkTrade: ; 28b87
|
||||
call CopyBytes
|
||||
ld a, [wd003]
|
||||
ld hl, OTPartySpecies
|
||||
ld b, $0
|
||||
ld b, 0
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
@ -1854,7 +1858,7 @@ LinkTrade: ; 28b87
|
||||
ld a, [wd002]
|
||||
ld [CurPartyMon], a
|
||||
ld hl, PartySpecies
|
||||
ld b, $0
|
||||
ld b, 0
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
@ -1865,12 +1869,12 @@ LinkTrade: ; 28b87
|
||||
ld a, [PartyCount]
|
||||
dec a
|
||||
ld [CurPartyMon], a
|
||||
ld a, $1
|
||||
ld a, TRUE
|
||||
ld [wForceEvolution], a
|
||||
ld a, [wd003]
|
||||
push af
|
||||
ld hl, OTPartySpecies
|
||||
ld b, $0
|
||||
ld b, 0
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
@ -1881,8 +1885,8 @@ LinkTrade: ; 28b87
|
||||
call LoadFontsBattleExtra
|
||||
ld b, SCGB_DIPLOMA
|
||||
call GetSGBLayout
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $1
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_EXTERNAL_CLOCK
|
||||
jr z, .player_2
|
||||
predef TradeAnimation
|
||||
jr .done_animation
|
||||
@ -1895,7 +1899,7 @@ LinkTrade: ; 28b87
|
||||
ld c, a
|
||||
ld [CurPartyMon], a
|
||||
ld hl, OTPartySpecies
|
||||
ld d, $0
|
||||
ld d, 0
|
||||
ld e, a
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
@ -1936,7 +1940,7 @@ LinkTrade: ; 28b87
|
||||
ld a, b
|
||||
ld [wPlayerLinkAction], a
|
||||
push bc
|
||||
call Function862
|
||||
call Serial_PrintWaitingTextAndSyncAndExchangeNybble
|
||||
pop bc
|
||||
ld a, [wLinkMode]
|
||||
cp LINK_TIMECAPSULE
|
||||
@ -2113,7 +2117,7 @@ Function29c67: ; 29c67
|
||||
sub b
|
||||
ld c, a
|
||||
inc c
|
||||
ld b, $0
|
||||
ld b, 0
|
||||
ld hl, PartyCount
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
@ -2140,24 +2144,24 @@ Special_WaitForOtherPlayerToExit: ; 29c92
|
||||
ld c, 3
|
||||
call DelayFrames
|
||||
ld a, -1
|
||||
ld [hLinkPlayerNumber], a
|
||||
ld [hSerialConnectionStatus], a
|
||||
xor a
|
||||
ld [rSB], a
|
||||
ld [hSerialReceive], a
|
||||
ld a, $1
|
||||
ld a, (0 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
ld a, $81
|
||||
ld a, (1 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
ld c, 3
|
||||
call DelayFrames
|
||||
xor a
|
||||
ld [rSB], a
|
||||
ld [hSerialReceive], a
|
||||
ld a, $0
|
||||
ld a, (0 << rSC_ON) | 0
|
||||
ld [rSC], a
|
||||
ld a, $80
|
||||
ld a, (1 << rSC_ON) | 0
|
||||
ld [rSC], a
|
||||
ld c, $3
|
||||
ld c, 3
|
||||
call DelayFrames
|
||||
xor a
|
||||
ld [rSB], a
|
||||
@ -2166,7 +2170,7 @@ Special_WaitForOtherPlayerToExit: ; 29c92
|
||||
ld c, 3
|
||||
call DelayFrames
|
||||
ld a, -1
|
||||
ld [hLinkPlayerNumber], a
|
||||
ld [hSerialConnectionStatus], a
|
||||
ld a, [rIF]
|
||||
push af
|
||||
xor a
|
||||
@ -2203,9 +2207,9 @@ Special_SetBitsForTimeCapsuleRequest: ; 29cfa
|
||||
ld [rSB], a
|
||||
xor a
|
||||
ld [hSerialReceive], a
|
||||
ld a, $0
|
||||
ld a, (0 << rSC_ON) | 0
|
||||
ld [rSC], a
|
||||
ld a, $80
|
||||
ld a, (1 << rSC_ON) | 0
|
||||
ld [rSC], a
|
||||
xor a ; LINK_TIMECAPSULE - 1
|
||||
ld [wPlayerLinkAction], a
|
||||
@ -2221,9 +2225,9 @@ Special_WaitForLinkedFriend: ; 29d11
|
||||
ld [rSB], a
|
||||
xor a
|
||||
ld [hSerialReceive], a
|
||||
ld a, $0
|
||||
ld a, (0 << rSC_ON) | 0
|
||||
ld [rSC], a
|
||||
ld a, $80
|
||||
ld a, (1 << rSC_ON) | 0
|
||||
ld [rSC], a
|
||||
call DelayFrame
|
||||
call DelayFrame
|
||||
@ -2235,20 +2239,20 @@ Special_WaitForLinkedFriend: ; 29d11
|
||||
ld a, $ff
|
||||
ld [wLinkTimeoutFrames], a
|
||||
.loop
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $2
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_INTERNAL_CLOCK
|
||||
jr z, .connected
|
||||
cp $1
|
||||
cp USING_EXTERNAL_CLOCK
|
||||
jr z, .connected
|
||||
ld a, -1
|
||||
ld [hLinkPlayerNumber], a
|
||||
ld a, CONNECTION_NOT_ESTABLISHED
|
||||
ld [hSerialConnectionStatus], a
|
||||
ld a, $2
|
||||
ld [rSB], a
|
||||
xor a
|
||||
ld [hSerialReceive], a
|
||||
ld a, $0
|
||||
ld a, (0 << rSC_ON) | 0
|
||||
ld [rSC], a
|
||||
ld a, $80
|
||||
ld a, (1 << rSC_ON) | 0
|
||||
ld [rSC], a
|
||||
ld a, [wLinkTimeoutFrames]
|
||||
dec a
|
||||
@ -2262,9 +2266,9 @@ Special_WaitForLinkedFriend: ; 29d11
|
||||
.not_done
|
||||
ld a, $1
|
||||
ld [rSB], a
|
||||
ld a, $1
|
||||
ld a, (0 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
ld a, $81
|
||||
ld a, (1 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
call DelayFrame
|
||||
jr .loop
|
||||
@ -2357,7 +2361,7 @@ Function29dba: ; 29dba
|
||||
|
||||
Link_CheckCommunicationError: ; 29e0c
|
||||
xor a
|
||||
ld [hFFCA], a
|
||||
ld [hSerialReceivedNewData], a
|
||||
ld a, [wLinkTimeoutFrames]
|
||||
ld h, a
|
||||
ld a, [wLinkTimeoutFrames + 1]
|
||||
@ -2409,7 +2413,7 @@ Link_CheckCommunicationError: ; 29e0c
|
||||
|
||||
.ConvertDW: ; 29e53
|
||||
; [wLinkTimeoutFrames] = ((hl - $100) / 4) + $100
|
||||
; = (hl / 4) + $c0
|
||||
; = (hl / 4) + $c0
|
||||
dec h
|
||||
srl h
|
||||
rr l
|
||||
@ -2427,9 +2431,9 @@ Special_TryQuickSave: ; 29e66
|
||||
ld a, [wd265]
|
||||
push af
|
||||
farcall Link_SaveGame
|
||||
ld a, $1
|
||||
ld a, TRUE
|
||||
jr nc, .return_result
|
||||
xor a
|
||||
xor a ; FALSE
|
||||
.return_result
|
||||
ld [ScriptVar], a
|
||||
ld c, 30
|
||||
@ -2456,12 +2460,12 @@ Special_CheckBothSelectedSameRoom: ; 29e82
|
||||
ld [wLinkMode], a
|
||||
xor a
|
||||
ld [hVBlank], a
|
||||
ld a, $1
|
||||
ld a, TRUE
|
||||
ld [ScriptVar], a
|
||||
ret
|
||||
|
||||
.fail
|
||||
xor a
|
||||
xor a ; FALSE
|
||||
ld [ScriptVar], a
|
||||
ret
|
||||
; 29eaf
|
||||
@ -2517,8 +2521,8 @@ Special_FailedLinkToPast: ; 29efa
|
||||
Link_ResetSerialRegistersAfterLinkClosure: ; 29f04
|
||||
ld c, 3
|
||||
call DelayFrames
|
||||
ld a, -1
|
||||
ld [hLinkPlayerNumber], a
|
||||
ld a, CONNECTION_NOT_ESTABLISHED
|
||||
ld [hSerialConnectionStatus], a
|
||||
ld a, $2
|
||||
ld [rSB], a
|
||||
xor a
|
||||
@ -2536,7 +2540,7 @@ Link_EnsureSync: ; 29f17
|
||||
call DelayFrame
|
||||
call DelayFrame
|
||||
.receive_loop
|
||||
call Function83b
|
||||
call Serial_ExchangeLinkMenuSelection
|
||||
ld a, [wOtherPlayerLinkMode]
|
||||
ld b, a
|
||||
and $f0
|
||||
@ -2557,11 +2561,11 @@ Link_EnsureSync: ; 29f17
|
||||
; 29f47
|
||||
|
||||
Special_CableClubCheckWhichChris: ; 29f47
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $1
|
||||
ld a, $1
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_EXTERNAL_CLOCK
|
||||
ld a, TRUE
|
||||
jr z, .yes
|
||||
dec a
|
||||
dec a ; FALSE
|
||||
|
||||
.yes
|
||||
ld [ScriptVar], a
|
||||
@ -2575,7 +2579,7 @@ INCBIN "gfx/trade/unused_gen_1_border_tiles.2bpp"
|
||||
Unreferenced_Function29fe4:
|
||||
ld a, BANK(sPartyMail)
|
||||
call GetSRAMBank
|
||||
ld d, $0
|
||||
ld d, FALSE
|
||||
ld b, CHECK_FLAG
|
||||
predef SmallFarFlagAction
|
||||
call CloseSRAM
|
||||
|
@ -56,7 +56,7 @@ LinkTextbox2: ; 4d35b
|
||||
|
||||
.PlaceBorder: ; 4d37e
|
||||
push hl
|
||||
ld a, $76
|
||||
ld a, "ぁ" ; $76
|
||||
ld [hli], a
|
||||
inc a
|
||||
call .PlaceRow
|
||||
|
@ -139,7 +139,7 @@ _LoadTradeScreenBorder: ; 16d696
|
||||
|
||||
LinkComms_LoadPleaseWaitTextboxBorderGFX: ; 16d69a
|
||||
ld de, LinkCommsBorderGFX + $30 tiles
|
||||
ld hl, vTiles2 tile $76
|
||||
ld hl, vTiles2 tile "ぁ"
|
||||
lb bc, BANK(LinkCommsBorderGFX), 8
|
||||
call Get2bpp
|
||||
ret
|
||||
|
@ -32,7 +32,7 @@ _Start:: ; 16e
|
||||
.load
|
||||
ld [hCGB], a
|
||||
ld a, $1
|
||||
ld [hFFEA], a
|
||||
ld [hSystemBooted], a
|
||||
; 17d
|
||||
|
||||
|
||||
@ -84,14 +84,14 @@ Init:: ; 17d
|
||||
; Clear HRAM
|
||||
ld a, [hCGB]
|
||||
push af
|
||||
ld a, [hFFEA]
|
||||
ld a, [hSystemBooted]
|
||||
push af
|
||||
xor a
|
||||
ld hl, HRAM_Begin
|
||||
ld bc, HRAM_End - HRAM_Begin
|
||||
call ByteFill
|
||||
pop af
|
||||
ld [hFFEA], a
|
||||
ld [hSystemBooted], a
|
||||
pop af
|
||||
ld [hCGB], a
|
||||
|
||||
@ -137,7 +137,7 @@ Init:: ; 17d
|
||||
ld [rLCDC], a
|
||||
|
||||
ld a, -1
|
||||
ld [hLinkPlayerNumber], a
|
||||
ld [hSerialConnectionStatus], a
|
||||
|
||||
farcall InitCGBPals
|
||||
|
||||
|
@ -1352,7 +1352,7 @@ UpdateBGMapRow:: ; 27d3
|
||||
dec c
|
||||
jr nz, .loop
|
||||
ld a, SCREEN_WIDTH
|
||||
ld [hFFDC], a
|
||||
ld [hBGMapTileCount], a
|
||||
ret
|
||||
; 27f8
|
||||
|
||||
@ -1379,7 +1379,7 @@ UpdateBGMapColumn:: ; 27f8
|
||||
dec c
|
||||
jr nz, .loop
|
||||
ld a, SCREEN_HEIGHT
|
||||
ld [hFFDC], a
|
||||
ld [hBGMapTileCount], a
|
||||
ret
|
||||
; 2816
|
||||
|
||||
|
130
home/serial.asm
130
home/serial.asm
@ -14,9 +14,9 @@ Serial:: ; 6ef
|
||||
bit 0, a
|
||||
jr nz, .printer
|
||||
|
||||
ld a, [hLinkPlayerNumber]
|
||||
inc a ; is it equal to -1?
|
||||
jr z, .init_player_number
|
||||
ld a, [hSerialConnectionStatus]
|
||||
inc a ; is it equal to CONNECTION_NOT_ESTABLISHED?
|
||||
jr z, .establish_connection
|
||||
|
||||
ld a, [rSB]
|
||||
ld [hSerialReceive], a
|
||||
@ -24,8 +24,8 @@ Serial:: ; 6ef
|
||||
ld a, [hSerialSend]
|
||||
ld [rSB], a
|
||||
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $2
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_INTERNAL_CLOCK
|
||||
jr z, .player2
|
||||
|
||||
ld a, 0 << rSC_ON
|
||||
@ -42,22 +42,22 @@ Serial:: ; 6ef
|
||||
call PrinterReceive
|
||||
jr .end
|
||||
|
||||
.init_player_number
|
||||
.establish_connection
|
||||
ld a, [rSB]
|
||||
cp $1
|
||||
cp USING_EXTERNAL_CLOCK
|
||||
jr z, .player1
|
||||
cp $2
|
||||
cp USING_INTERNAL_CLOCK
|
||||
jr nz, .player2
|
||||
|
||||
.player1
|
||||
ld [hSerialReceive], a
|
||||
ld [hLinkPlayerNumber], a
|
||||
cp $2
|
||||
ld [hSerialConnectionStatus], a
|
||||
cp USING_INTERNAL_CLOCK
|
||||
jr z, ._player2
|
||||
|
||||
xor a
|
||||
ld [rSB], a
|
||||
ld a, $3
|
||||
ld a, 3
|
||||
ld [rDIV], a
|
||||
|
||||
.wait_bit_7
|
||||
@ -76,9 +76,9 @@ Serial:: ; 6ef
|
||||
ld [rSB], a
|
||||
|
||||
.player2
|
||||
ld a, $1
|
||||
ld [hFFCA], a
|
||||
ld a, $fe
|
||||
ld a, TRUE
|
||||
ld [hSerialReceivedNewData], a
|
||||
ld a, SERIAL_NO_DATA_BYTE
|
||||
ld [hSerialSend], a
|
||||
|
||||
.end
|
||||
@ -89,13 +89,13 @@ Serial:: ; 6ef
|
||||
reti
|
||||
; 75f
|
||||
|
||||
Function75f:: ; 75f
|
||||
Serial_ExchangeBytes:: ; 75f
|
||||
ld a, $1
|
||||
ld [hFFCC], a
|
||||
ld [hSerialIgnoringInitialData], a
|
||||
.loop
|
||||
ld a, [hl]
|
||||
ld [hSerialSend], a
|
||||
call Function78a
|
||||
call Serial_ExchangeByte
|
||||
push bc
|
||||
ld b, a
|
||||
inc hl
|
||||
@ -103,16 +103,16 @@ Function75f:: ; 75f
|
||||
.wait
|
||||
dec a
|
||||
jr nz, .wait
|
||||
ld a, [hFFCC]
|
||||
ld a, [hSerialIgnoringInitialData]
|
||||
and a
|
||||
ld a, b
|
||||
pop bc
|
||||
jr z, .load
|
||||
dec hl
|
||||
cp $fd
|
||||
cp SERIAL_PREAMBLE_BYTE
|
||||
jr nz, .loop
|
||||
xor a
|
||||
ld [hFFCC], a
|
||||
ld [hSerialIgnoringInitialData], a
|
||||
jr .loop
|
||||
|
||||
.load
|
||||
@ -125,24 +125,24 @@ Function75f:: ; 75f
|
||||
ret
|
||||
; 78a
|
||||
|
||||
Function78a:: ; 78a
|
||||
Serial_ExchangeByte:: ; 78a
|
||||
.loop
|
||||
xor a
|
||||
ld [hFFCA], a
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $2
|
||||
ld [hSerialReceivedNewData], a
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_INTERNAL_CLOCK
|
||||
jr nz, .not_player_2
|
||||
ld a, $1
|
||||
ld a, (0 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
ld a, $81
|
||||
ld a, (1 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
.not_player_2
|
||||
.loop2
|
||||
ld a, [hFFCA]
|
||||
ld a, [hSerialReceivedNewData]
|
||||
and a
|
||||
jr nz, .reset_ffca
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $1
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_EXTERNAL_CLOCK
|
||||
jr nz, .not_player_1_or_wLinkTimeoutFrames_zero
|
||||
call CheckwLinkTimeoutFramesNonzero
|
||||
jr z, .not_player_1_or_wLinkTimeoutFrames_zero
|
||||
@ -162,8 +162,8 @@ Function78a:: ; 78a
|
||||
|
||||
.not_player_1_or_wLinkTimeoutFrames_zero
|
||||
ld a, [rIE]
|
||||
and $f
|
||||
cp $8
|
||||
and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
|
||||
cp 1 << SERIAL
|
||||
jr nz, .loop2
|
||||
ld a, [wcf5d]
|
||||
dec a
|
||||
@ -173,8 +173,8 @@ Function78a:: ; 78a
|
||||
dec a
|
||||
ld [wcf5d + 1], a
|
||||
jr nz, .loop2
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $1
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_EXTERNAL_CLOCK
|
||||
jr z, .reset_ffca
|
||||
|
||||
ld a, 255
|
||||
@ -184,19 +184,20 @@ Function78a:: ; 78a
|
||||
|
||||
.reset_ffca
|
||||
xor a
|
||||
ld [hFFCA], a
|
||||
ld [hSerialReceivedNewData], a
|
||||
ld a, [rIE]
|
||||
and $f
|
||||
sub $8
|
||||
and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
|
||||
sub 1 << SERIAL
|
||||
jr nz, .rIE_not_equal_8
|
||||
|
||||
; LOW($5000)
|
||||
ld [wcf5d], a
|
||||
ld a, $50
|
||||
ld a, HIGH($5000)
|
||||
ld [wcf5d + 1], a
|
||||
|
||||
.rIE_not_equal_8
|
||||
ld a, [hSerialReceive]
|
||||
cp $fe
|
||||
cp SERIAL_NO_DATA_BYTE
|
||||
ret nz
|
||||
call CheckwLinkTimeoutFramesNonzero
|
||||
jr z, .wLinkTimeoutFrames_zero
|
||||
@ -216,9 +217,9 @@ Function78a:: ; 78a
|
||||
|
||||
.wLinkTimeoutFrames_zero
|
||||
ld a, [rIE]
|
||||
and $f
|
||||
cp $8
|
||||
ld a, $fe
|
||||
and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
|
||||
cp 1 << SERIAL
|
||||
ld a, SERIAL_NO_DATA_BYTE
|
||||
ret z
|
||||
ld a, [hl]
|
||||
ld [hSerialSend], a
|
||||
@ -243,29 +244,31 @@ CheckwLinkTimeoutFramesNonzero:: ; 82b
|
||||
; 833
|
||||
|
||||
SerialDisconnected:: ; 833
|
||||
dec a
|
||||
dec a ; a is always 0 when this is called
|
||||
ld [wLinkTimeoutFrames], a
|
||||
ld [wLinkTimeoutFrames + 1], a
|
||||
ret
|
||||
; 83b
|
||||
|
||||
Function83b:: ; 83b
|
||||
; This is used to exchange the button press and selected menu item on the link menu.
|
||||
; The data is sent thrice and read twice to increase reliability.
|
||||
Serial_ExchangeLinkMenuSelection:: ; 83b
|
||||
ld hl, wPlayerLinkAction
|
||||
ld de, wOtherPlayerLinkMode
|
||||
ld c, $2
|
||||
ld a, $1
|
||||
ld [hFFCC], a
|
||||
ld c, 2
|
||||
ld a, TRUE
|
||||
ld [hSerialIgnoringInitialData], a
|
||||
.asm_847
|
||||
call DelayFrame
|
||||
ld a, [hl]
|
||||
ld [hSerialSend], a
|
||||
call Function78a
|
||||
call Serial_ExchangeByte
|
||||
ld b, a
|
||||
inc hl
|
||||
ld a, [hFFCC]
|
||||
ld a, [hSerialIgnoringInitialData]
|
||||
and a
|
||||
ld a, $0
|
||||
ld [hFFCC], a
|
||||
ld a, FALSE
|
||||
ld [hSerialIgnoringInitialData], a
|
||||
jr nz, .asm_847
|
||||
ld a, b
|
||||
ld [de], a
|
||||
@ -275,15 +278,14 @@ Function83b:: ; 83b
|
||||
ret
|
||||
; 862
|
||||
|
||||
Function862:: ; 862
|
||||
Serial_PrintWaitingTextAndSyncAndExchangeNybble:: ; 862
|
||||
call LoadTileMapToTempTileMap
|
||||
callfar PlaceWaitingText
|
||||
call WaitLinkTransfer
|
||||
jp Call_LoadTempTileMapToTileMap
|
||||
; 871
|
||||
|
||||
|
||||
Function871:: ; 871
|
||||
Serial_SyncAndExchangeNybble:: ; 871
|
||||
call LoadTileMapToTempTileMap
|
||||
callfar PlaceWaitingText
|
||||
jp WaitLinkTransfer
|
||||
@ -356,12 +358,12 @@ LinkTransfer:: ; 8c1
|
||||
ld a, [wPlayerLinkAction]
|
||||
add b
|
||||
ld [hSerialSend], a
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $2
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_INTERNAL_CLOCK
|
||||
jr nz, .player_1
|
||||
ld a, $1
|
||||
ld a, (0 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
ld a, $81
|
||||
ld a, (1 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
|
||||
.player_1
|
||||
@ -388,12 +390,12 @@ LinkDataReceived:: ; 908
|
||||
; Let the other system know that the data has been received.
|
||||
xor a
|
||||
ld [hSerialSend], a
|
||||
ld a, [hLinkPlayerNumber]
|
||||
cp $2
|
||||
ld a, [hSerialConnectionStatus]
|
||||
cp USING_INTERNAL_CLOCK
|
||||
ret nz
|
||||
ld a, $1
|
||||
ld a, (0 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
ld a, $81
|
||||
ld a, (1 << rSC_ON) | 1
|
||||
ld [rSC], a
|
||||
ret
|
||||
; 919
|
||||
@ -402,13 +404,13 @@ Unreferenced_Function919:: ; 919
|
||||
ld a, [wLinkMode]
|
||||
and a
|
||||
ret nz
|
||||
ld a, $2
|
||||
ld a, USING_INTERNAL_CLOCK
|
||||
ld [rSB], a
|
||||
xor a
|
||||
ld [hSerialReceive], a
|
||||
ld a, $0
|
||||
ld a, 0 << rSC_ON
|
||||
ld [rSC], a
|
||||
ld a, $80
|
||||
ld a, 1 << rSC_ON
|
||||
ld [rSC], a
|
||||
ret
|
||||
; 92e
|
||||
|
@ -20,10 +20,10 @@ DMATransfer:: ; 15d8
|
||||
|
||||
|
||||
UpdateBGMapBuffer:: ; 15e3
|
||||
; Copy [hFFDC] 16x8 tiles from BGMapBuffer
|
||||
; Copy [hBGMapTileCount] 16x8 tiles from BGMapBuffer
|
||||
; to bg map addresses in BGMapBufferPtrs.
|
||||
|
||||
; [hFFDC] must be even since this is done in pairs.
|
||||
; [hBGMapTileCount] must be even since this is done in pairs.
|
||||
|
||||
; Return carry on success.
|
||||
|
||||
@ -76,10 +76,10 @@ rept 2
|
||||
endr
|
||||
|
||||
; We've done 2 16x8 blocks
|
||||
ld a, [hFFDC]
|
||||
ld a, [hBGMapTileCount]
|
||||
dec a
|
||||
dec a
|
||||
ld [hFFDC], a
|
||||
ld [hBGMapTileCount], a
|
||||
|
||||
jr nz, .next
|
||||
|
||||
|
20
hram.asm
20
hram.asm
@ -39,7 +39,8 @@ hInMenu EQU $ffaa
|
||||
hPrinter EQU $ffac
|
||||
hGraphicStartTile EQU $ffad
|
||||
hMoveMon EQU $ffae
|
||||
hMapObjectIndexBuffer EQU $ffaf
|
||||
|
||||
hMapObjectIndexBuffer EQU $ffaf
|
||||
hObjectStructIndexBuffer EQU $ffb0
|
||||
|
||||
hConnectionStripLength EQU $ffaf
|
||||
@ -88,12 +89,13 @@ hMGJoypadReleased EQU $ffc4
|
||||
hLCDCPointer EQU $ffc6
|
||||
hLYOverrideStart EQU $ffc7
|
||||
hLYOverrideEnd EQU $ffc8
|
||||
hMobileReceive EQU $ffc9
|
||||
hFFCA EQU $ffca
|
||||
hLinkPlayerNumber EQU $ffcb
|
||||
hFFCC EQU $ffcc
|
||||
hSerialSend EQU $ffcd
|
||||
hSerialReceive EQU $ffce
|
||||
|
||||
hMobileReceive EQU $ffc9
|
||||
hSerialReceivedNewData EQU $ffca
|
||||
hSerialConnectionStatus EQU $ffcb
|
||||
hSerialIgnoringInitialData EQU $ffcc
|
||||
hSerialSend EQU $ffcd
|
||||
hSerialReceive EQU $ffce
|
||||
|
||||
hSCX EQU $ffcf
|
||||
hSCY EQU $ffd0
|
||||
@ -108,7 +110,7 @@ hOAMUpdate EQU $ffd8
|
||||
hSPBuffer EQU $ffd9
|
||||
|
||||
hBGMapUpdate EQU $ffdb
|
||||
hFFDC EQU $ffdc
|
||||
hBGMapTileCount EQU $ffdc
|
||||
|
||||
hMapAnims EQU $ffde
|
||||
hTileAnimFrame EQU $ffdf
|
||||
@ -125,5 +127,5 @@ hCGB EQU $ffe6
|
||||
hSGB EQU $ffe7
|
||||
hDMATransfer EQU $ffe8
|
||||
hMobile EQU $ffe9
|
||||
hFFEA EQU $ffea
|
||||
hSystemBooted EQU $ffea
|
||||
hClockResetTrigger EQU $ffeb
|
||||
|
@ -4056,7 +4056,7 @@ _StartMobileBattle: ; 1019ab
|
||||
jr z, .got_link_player_number
|
||||
ld a, 1
|
||||
.got_link_player_number
|
||||
ld [hLinkPlayerNumber], a
|
||||
ld [hSerialConnectionStatus], a
|
||||
ret
|
||||
; 101a21
|
||||
|
||||
@ -4076,7 +4076,7 @@ StartMobileBattle: ; 101a21
|
||||
xor a
|
||||
ld [wDisableTextAcceleration], a
|
||||
ld a, $ff
|
||||
ld [hLinkPlayerNumber], a
|
||||
ld [hSerialConnectionStatus], a
|
||||
pop af
|
||||
ld [Options], a
|
||||
ret
|
||||
|
@ -4,7 +4,7 @@ Unreferenced_Function16c000: ; 16c000
|
||||
and a
|
||||
ret z
|
||||
; Only do this once per boot cycle
|
||||
ld a, [hFFEA]
|
||||
ld a, [hSystemBooted]
|
||||
and a
|
||||
ret z
|
||||
; Set some flag, preserving the old state
|
||||
@ -19,9 +19,9 @@ Unreferenced_Function16c000: ; 16c000
|
||||
call .RunJumptable
|
||||
farcall DisableMobile
|
||||
; Prevent this routine from running again
|
||||
; until the next time the syatem is turned on
|
||||
; until the next time the system is turned on
|
||||
xor a
|
||||
ld [hFFEA], a
|
||||
ld [hSystemBooted], a
|
||||
; Restore the flag state
|
||||
pop af
|
||||
ld [wcfbe], a
|
||||
|
Loading…
Reference in New Issue
Block a user