diff options
author | mid-kid <esteve.varela@gmail.com> | 2018-03-13 13:07:16 +0100 |
---|---|---|
committer | mid-kid <esteve.varela@gmail.com> | 2018-03-13 13:21:40 +0100 |
commit | baa0dc5a963a79843b37888bcfe1d2dfe833ade9 (patch) | |
tree | 968c86105bd67a3121d8f3f20018bfc59191f4c9 /engine/link.asm | |
parent | 12070ca50067d3abe36a730190f88ee43f2cace9 (diff) |
Organize the engine/ directory
This is an informed attempt at reorganizing the engine/ directory by
creating categorized subdirectories, in order to make it easier to
navigate and find things.
The directories created are as follows:
* engine/game: Contains all "minigames", things like the unown puzzle
and slot machine.
* engine/gfx: Contains all handling of graphics. From loading palettes
to playing animations.
* engine/link: Contains all multiplayer functionality.
* engine/menu: Contains all generic/misc. menus and menu code.
Other, more specialized menus are in their own subdirectories (pokedex,
pokegear, party menu, etc).
* engine/overworld: Contains all handling of the overworld. From loading
and connecting maps to wild encounters and the scripting engine.
* engine/pokegear: In the same vein as engine/pokedex, except it could
use some more splitting up.
* engine/pokemon: Contains everything related to manipulating pokemon
data. From the pokemon storage system to evolution and mail.
* engine/printer: Contains everything related to printing things as well
as the printer communication.
* engine/title: Contains intro sequences, title screens and credits.
Diffstat (limited to 'engine/link.asm')
-rwxr-xr-x | engine/link.asm | 2589 |
1 files changed, 0 insertions, 2589 deletions
diff --git a/engine/link.asm b/engine/link.asm deleted file mode 100755 index c693e6919..000000000 --- a/engine/link.asm +++ /dev/null @@ -1,2589 +0,0 @@ -LinkCommunications: ; 28000 - call ClearBGPalettes - ld c, 80 - call DelayFrames - call ClearScreen - call ClearSprites - call UpdateSprites - xor a - ld [hSCX], a - ld [hSCY], a - ld c, 80 - call DelayFrames - call ClearScreen - call UpdateSprites - call LoadStandardFont - call LoadFontsBattleExtra - farcall LinkComms_LoadPleaseWaitTextboxBorderGFX - call WaitBGMap2 - hlcoord 3, 8 - ld b, 2 - ld c, 12 - ld d, h - ld e, l - farcall LinkTextbox2 - hlcoord 4, 10 - ld de, String_PleaseWait - call PlaceString - call SetTradeRoomBGPals - call WaitBGMap2 - ld hl, wcf5d - xor a ; LOW($5000) - ld [hli], a - ld [hl], HIGH($5000) - ld a, [wLinkMode] - cp LINK_TIMECAPSULE - jp nz, Gen2ToGen2LinkComms - -Gen2ToGen1LinkComms: ; 2805d - call ClearLinkData - call Link_PrepPartyData_Gen1 - call FixDataForLinkTransfer - xor a - ld [wPlayerLinkAction], a - call WaitLinkTransfer - ld a, [hSerialConnectionStatus] - cp USING_INTERNAL_CLOCK - jr nz, .player_1 - - ld c, 3 - call DelayFrames - xor a - ld [hSerialSend], a - ld a, (0 << rSC_ON) | 1 - ld [rSC], a - ld a, (1 << rSC_ON) | 1 - ld [rSC], a - - call DelayFrame - xor a - ld [hSerialSend], a - ld a, (0 << rSC_ON) | 1 - ld [rSC], a - ld a, (1 << rSC_ON) | 1 - ld [rSC], a - -.player_1 - ld de, MUSIC_NONE - call PlayMusic - ld c, 3 - call DelayFrames - xor a - ld [rIF], a - ld a, $8 - ld [rIE], a - ld hl, wd1f3 - ld de, wEnemyMonSpecies - ld bc, $11 - call Serial_ExchangeBytes - ld a, SERIAL_NO_DATA_BYTE - ld [de], a - ld hl, wLinkData - ld de, wOTPlayerName - ld bc, $1a8 - call Serial_ExchangeBytes - ld a, SERIAL_NO_DATA_BYTE - ld [de], a - ld hl, wMisc - ld de, wPlayerTrademonSpecies - ld bc, wPlayerTrademonSpecies - wMisc - call Serial_ExchangeBytes - xor a - ld [rIF], a - ld a, $1d - ld [rIE], a - call Link_CopyRandomNumbers - ld hl, wOTPlayerName - call Link_FindFirstNonControlCharacter_SkipZero - push hl - ld bc, NAME_LENGTH - add hl, bc - ld a, [hl] - pop hl - and a - jp z, Function28b22 - cp $7 - jp nc, Function28b22 - ld de, wLinkData - ld bc, $1a2 - call Link_CopyOTData - ld de, wPlayerTrademonSpecies - ld hl, wTimeCapsulePartyMon1Species - ld c, 2 -.loop - ld a, [de] - inc de - and a - jr z, .loop - cp SERIAL_PREAMBLE_BYTE - jr z, .loop - cp SERIAL_NO_DATA_BYTE - jr z, .loop - cp SERIAL_PATCH_LIST_PART_TERMINATOR - jr z, .next - push hl - push bc - ld b, 0 - dec a - ld c, a - add hl, bc - ld a, SERIAL_NO_DATA_BYTE - ld [hl], a - pop bc - pop hl - jr .loop - -.next - ld hl, wc90f - dec c - jr nz, .loop - ld hl, wLinkPlayerName - ld de, wOTPlayerName - ld bc, NAME_LENGTH - call CopyBytes - ld de, wOTPartyCount - ld a, [hli] - ld [de], a - inc de -.party_loop - ld a, [hli] - cp -1 - jr z, .done_party - ld [wd265], a - push hl - push de - callfar ConvertMon_1to2 - pop de - pop hl - ld a, [wd265] - ld [de], a - inc de - jr .party_loop - -.done_party - ld [de], a - ld hl, wTimeCapsulePartyMon1Species - call Function2868a - ld a, LOW(wOTPartyMonOT) - ld [wUnusedD102], a - ld a, HIGH(wOTPartyMonOT) - ld [wUnusedD102 + 1], a - ld de, MUSIC_NONE - call PlayMusic - ld a, [hSerialConnectionStatus] - cp USING_INTERNAL_CLOCK - ld c, 66 - call z, DelayFrames - ld de, MUSIC_ROUTE_30 - call PlayMusic - jp InitTradeMenuDisplay -; 28177 - -Gen2ToGen2LinkComms: ; 28177 - call ClearLinkData - call Link_PrepPartyData_Gen2 - call FixDataForLinkTransfer - call Function29dba - ld a, [wScriptVar] - and a - jp z, LinkTimeout - ld a, [hSerialConnectionStatus] - cp USING_INTERNAL_CLOCK - jr nz, .Player1 - - ld c, 3 - call DelayFrames - xor a - ld [hSerialSend], a - ld a, (0 << rSC_ON) | 1 - ld [rSC], a - ld a, (1 << rSC_ON) | 1 - ld [rSC], a - - call DelayFrame - xor a - ld [hSerialSend], a - ld a, (0 << rSC_ON) | 1 - ld [rSC], a - ld a, (1 << rSC_ON) | 1 - ld [rSC], a - -.Player1: - ld de, MUSIC_NONE - call PlayMusic - ld c, 3 - call DelayFrames - xor a - ld [rIF], a - ld a, $8 - ld [rIE], a - ld hl, wd1f3 - ld de, wEnemyMonSpecies - ld bc, $11 - call Serial_ExchangeBytes - ld a, SERIAL_NO_DATA_BYTE - ld [de], a - ld hl, wLinkData - ld de, wOTPlayerName - ld bc, $1c2 - call Serial_ExchangeBytes - ld a, SERIAL_NO_DATA_BYTE - ld [de], a - ld hl, wMisc - ld de, wPlayerTrademonSpecies - ld bc, $c8 - call Serial_ExchangeBytes - ld a, [wLinkMode] - cp LINK_TRADECENTER - jr nz, .not_trading - ld hl, wc9f4 - ld de, wcb84 - ld bc, $186 - call ExchangeBytes - -.not_trading - xor a - ld [rIF], a - ld a, $1d - ld [rIE], a - ld de, MUSIC_NONE - call PlayMusic - call Link_CopyRandomNumbers - ld hl, wOTPlayerName - call Link_FindFirstNonControlCharacter_SkipZero - ld de, wLinkData - ld bc, $1b9 - call Link_CopyOTData - ld de, wPlayerTrademonSpecies - ld hl, wLinkPlayerPartyMon1Species - ld c, 2 -.loop1 - ld a, [de] - inc de - and a - jr z, .loop1 - cp SERIAL_PREAMBLE_BYTE - jr z, .loop1 - cp SERIAL_NO_DATA_BYTE - jr z, .loop1 - cp SERIAL_PATCH_LIST_PART_TERMINATOR - jr z, .next1 - push hl - push bc - ld b, 0 - dec a - ld c, a - add hl, bc - ld a, SERIAL_NO_DATA_BYTE - ld [hl], a - pop bc - pop hl - jr .loop1 - -.next1 - ld hl, wc90f - dec c - jr nz, .loop1 - ld a, [wLinkMode] - cp LINK_TRADECENTER - jp nz, .skip_mail - ld hl, wcb84 -.loop2 - ld a, [hli] - cp MAIL_MSG_LENGTH - jr nz, .loop2 -.loop3 - ld a, [hli] - cp SERIAL_NO_DATA_BYTE - jr z, .loop3 - cp MAIL_MSG_LENGTH - jr z, .loop3 - dec hl - ld de, wcb84 - ld bc, $190 ; 400 - call CopyBytes - ld hl, wcb84 - ld bc, $c6 ; 198 -.loop4 - ld a, [hl] - cp MAIL_MSG_LENGTH + 1 - jr nz, .okay1 - ld [hl], SERIAL_NO_DATA_BYTE -.okay1 - inc hl - dec bc - ld a, b - or c - jr nz, .loop4 - ld de, wcc9e -.loop5 - ld a, [de] - inc de - 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], SERIAL_NO_DATA_BYTE - jr .loop5 - -.start_copying_mail - ld hl, wcb84 - ld de, wc9f4 - ld b, PARTY_LENGTH -.copy_mail_loop - push bc - ld bc, MAIL_MSG_LENGTH + 1 - call CopyBytes - ld a, LOW(MAIL_STRUCT_LENGTH - (MAIL_MSG_LENGTH + 1)) - add e - ld e, a - ld a, HIGH(MAIL_STRUCT_LENGTH - (MAIL_MSG_LENGTH + 1)) - adc d - ld d, a - pop bc - dec b - jr nz, .copy_mail_loop - ld de, wc9f4 - ld b, PARTY_LENGTH -.copy_author_loop - push bc - ld a, LOW(MAIL_MSG_LENGTH + 1) - add e - ld e, a - ld a, HIGH(MAIL_MSG_LENGTH + 1) - adc d - ld d, a - ld bc, MAIL_STRUCT_LENGTH - (MAIL_MSG_LENGTH + 1) - call CopyBytes - pop bc - dec b - jr nz, .copy_author_loop - ld b, PARTY_LENGTH - ld de, wc9f4 -.fix_mail_loop - push bc - push de - farcall IsMailEuropean - ld a, c - or a - jr z, .next - sub $3 - jr nc, .skip - farcall DeutenEnglischenPost - jr .next - -.skip - cp $2 - jr nc, .next - farcall HandleSpanishItalianMail - -.next - pop de - ld hl, MAIL_STRUCT_LENGTH - add hl, de - ld d, h - ld e, l - pop bc - dec b - jr nz, .fix_mail_loop - ld de, wcb0e - xor a - ld [de], a - -.skip_mail - ld hl, wLinkPlayerName - ld de, wOTPlayerName - ld bc, NAME_LENGTH - call CopyBytes - ld de, wOTPartyCount - ld bc, 1 + PARTY_LENGTH + 1 - call CopyBytes - ld de, wOTPlayerID - ld bc, 2 - call CopyBytes - ld de, wOTPartyMons - ld bc, wOTPartyDataEnd - wOTPartyMons - call CopyBytes - ld a, LOW(wOTPartyMonOT) - ld [wUnusedD102], a - ld a, HIGH(wOTPartyMonOT) - ld [wUnusedD102 + 1], a - ld de, MUSIC_NONE - call PlayMusic - ld a, [hSerialConnectionStatus] - cp USING_INTERNAL_CLOCK - ld c, 66 - call z, DelayFrames - ld a, [wLinkMode] - cp LINK_COLOSSEUM - jr nz, .ready_to_trade - ld a, CAL - ld [wOtherTrainerClass], a - call ClearScreen - farcall Link_WaitBGMap - ld hl, wOptions - ld a, [hl] - push af - and 1 << STEREO - or TEXT_DELAY_MED - ld [hl], a - ld hl, wOTPlayerName - ld de, wOTClassName - ld bc, NAME_LENGTH - call CopyBytes - call ReturnToMapFromSubmenu - - ; LET'S DO THIS - ld a, [wDisableTextAcceleration] - push af - ld a, 1 - ld [wDisableTextAcceleration], a - ld a, [rIE] - push af - ld a, [rIF] - push af - xor a - ld [rIF], a - ld a, [rIE] - set 1, a - ld [rIE], a - pop af - ld [rIF], a - - predef StartBattle - - ld a, [rIF] - ld h, a - xor a - ld [rIF], a - pop af - ld [rIE], a - ld a, h - ld [rIF], a - pop af - ld [wDisableTextAcceleration], a - pop af - ld [wOptions], a - farcall LoadPokemonData - jp Function28b22 - -.ready_to_trade - ld de, MUSIC_ROUTE_30 - call PlayMusic - jp InitTradeMenuDisplay -; 283b2 - -LinkTimeout: ; 283b2 - ld de, .TooMuchTimeHasElapsed - ld b, 10 -.loop - call DelayFrame - call LinkDataReceived - dec b - jr nz, .loop - xor a - ld [hld], a - ld [hl], a - ld [hVBlank], a - push de - hlcoord 0, 12 - ld b, 4 - ld c, 18 - push de - ld d, h - ld e, l - farcall LinkTextbox2 - pop de - pop hl - bccoord 1, 14 - call PlaceHLTextAtBC - call RotateThreePalettesRight - call ClearScreen - ld b, SCGB_DIPLOMA - call GetSGBLayout - call WaitBGMap2 - ret -; 283ed - -.TooMuchTimeHasElapsed: ; 0x283ed - ; Too much time has elapsed. Please try again. - text_jump UnknownText_0x1c4183 - db "@" -; 0x283f2 - -ExchangeBytes: ; 283f2 - ld a, TRUE - ld [hSerialIgnoringInitialData], a -.loop - ld a, [hl] - ld [hSerialSend], a - call Serial_ExchangeByte - push bc - ld b, a - inc hl - ld a, 48 -.delay_cycles - dec a - jr nz, .delay_cycles - ld a, [hSerialIgnoringInitialData] - and a - ld a, b - pop bc - jr z, .load - dec hl - xor a - ld [hSerialIgnoringInitialData], a - jr .loop - -.load - ld [de], a - inc de - dec bc - ld a, b - or c - jr nz, .loop - ret -; 28419 - -String_PleaseWait: ; 28419 - db "PLEASE WAIT!@" -; 28426 - -ClearLinkData: ; 28426 - ld hl, wLinkData - ld bc, wLinkDataEnd - wLinkData -.loop - xor a - ld [hli], a - dec bc - ld a, b - or c - jr nz, .loop - ret -; 28434 - -FixDataForLinkTransfer: ; 28434 - ld hl, wd1f3 - ld a, SERIAL_PREAMBLE_BYTE - ld b, wLinkBattleRNs - wd1f3 -.loop1 - ld [hli], a - dec b - jr nz, .loop1 - ld b, wTempEnemyMonSpecies - wLinkBattleRNs -.loop2 - call Random - cp SERIAL_PREAMBLE_BYTE - jr nc, .loop2 - ld [hli], a - dec b - jr nz, .loop2 - ld hl, wMisc - ld a, SERIAL_PREAMBLE_BYTE - ld [hli], a - ld [hli], a - ld [hli], a - ld b, $c8 - xor a -.loop3 - ld [hli], a - dec b - jr nz, .loop3 - ld hl, wTimeCapsulePartyMon1 - 1 + 6 - ld de, wc612 - lb bc, 0, 0 -.loop4 - inc c - ld a, c - cp SERIAL_PREAMBLE_BYTE - jr z, .next1 - ld a, b - dec a - jr nz, .next2 - push bc - ld a, [wLinkMode] - cp LINK_TIMECAPSULE - ld b, $d - jr z, .got_value - ld b, $27 -.got_value - ld a, c - cp b - pop bc - jr z, .done -.next2 - inc hl - ld a, [hl] - cp SERIAL_NO_DATA_BYTE - jr nz, .loop4 - ld a, c - ld [de], a - inc de - ld [hl], SERIAL_PATCH_LIST_PART_TERMINATOR - jr .loop4 - -.next1 - ld a, SERIAL_PATCH_LIST_PART_TERMINATOR - ld [de], a - inc de - lb bc, 1, 0 - jr .loop4 - -.done - ld a, SERIAL_PATCH_LIST_PART_TERMINATOR - ld [de], a - ret -; 28499 - -Link_PrepPartyData_Gen1: ; 28499 - ld de, wLinkData - ld a, SERIAL_PREAMBLE_BYTE - ld b, PARTY_LENGTH -.loop1 - ld [de], a - inc de - dec b - jr nz, .loop1 - ld hl, wPlayerName - ld bc, NAME_LENGTH - call CopyBytes - push de - ld hl, wPartyCount - ld a, [hli] - ld [de], a - inc de -.loop2 - ld a, [hli] - cp -1 - jr z, .done_party - ld [wd265], a - push hl - push de - callfar ConvertMon_2to1 - pop de - pop hl - ld a, [wd265] - ld [de], a - inc de - jr .loop2 - -.done_party - ld [de], a - pop de - ld hl, 1 + PARTY_LENGTH + 1 - add hl, de - ld d, h - ld e, l - ld hl, wPartyMon1Species - ld c, PARTY_LENGTH -.mon_loop - push bc - call .ConvertPartyStruct2to1 - ld bc, PARTYMON_STRUCT_LENGTH - add hl, bc - pop bc - dec c - jr nz, .mon_loop - ld hl, wPartyMonOT - call .copy_ot_nicks - ld hl, wPartyMonNicknames -.copy_ot_nicks - ld bc, PARTY_LENGTH * NAME_LENGTH - jp CopyBytes -; 284f6 - -.ConvertPartyStruct2to1: ; 284f6 - ld b, h - ld c, l - push de - push bc - ld a, [hl] - ld [wd265], a - callfar ConvertMon_2to1 - pop bc - pop de - ld a, [wd265] - ld [de], a - inc de - ld hl, MON_HP - add hl, bc - ld a, [hli] - ld [de], a - inc de - ld a, [hl] - ld [de], a - inc de - xor a - ld [de], a - inc de - ld hl, MON_STATUS - add hl, bc - ld a, [hl] - ld [de], a - inc de - ld a, [bc] - cp MAGNEMITE - jr z, .steel_type - cp MAGNETON - jr nz, .skip_steel - -.steel_type - ld a, ELECTRIC - ld [de], a - inc de - ld [de], a - inc de - jr .done_steel - -.skip_steel - push bc - dec a - ld hl, BaseData + BASE_TYPES - ld bc, BASE_DATA_SIZE - call AddNTimes - ld bc, BASE_CATCH_RATE - BASE_TYPES - ld a, BANK(BaseData) - call FarCopyBytes - pop bc - -.done_steel - push bc - ld hl, MON_ITEM - add hl, bc - ld bc, MON_HAPPINESS - MON_ITEM - call CopyBytes - pop bc - - ld hl, MON_LEVEL - add hl, bc - ld a, [hl] - ld [de], a - ld [wCurPartyLevel], a - inc de - - push bc - ld hl, MON_MAXHP - add hl, bc - ld bc, MON_SAT - MON_MAXHP - call CopyBytes - pop bc - - push de - push bc - - ld a, [bc] - dec a - push bc - ld b, 0 - ld c, a - ld hl, KantoMonSpecials - add hl, bc - ld a, BANK(KantoMonSpecials) - call GetFarByte - ld [wBaseSpecialAttack], a - pop bc - - ld hl, MON_STAT_EXP - 1 - add hl, bc - ld c, STAT_SATK - ld b, TRUE - predef CalcMonStatC - - pop bc - pop de - - ld a, [hQuotient + 1] - ld [de], a - inc de - ld a, [hQuotient + 2] - ld [de], a - inc de - ld h, b - ld l, c - ret -; 28595 - -Link_PrepPartyData_Gen2: ; 28595 - ld de, wLinkData - ld a, SERIAL_PREAMBLE_BYTE - ld b, PARTY_LENGTH -.loop1 - ld [de], a - inc de - dec b - jr nz, .loop1 - ld hl, wPlayerName - ld bc, NAME_LENGTH - call CopyBytes - ld hl, wPartyCount - ld bc, 1 + PARTY_LENGTH + 1 - call CopyBytes - ld hl, wPlayerID - ld bc, 2 - call CopyBytes - ld hl, wPartyMon1Species - ld bc, PARTY_LENGTH * PARTYMON_STRUCT_LENGTH - call CopyBytes - ld hl, wPartyMonOT - ld bc, PARTY_LENGTH * NAME_LENGTH - call CopyBytes - ld hl, wPartyMonNicknames - ld bc, PARTY_LENGTH * MON_NAME_LENGTH - call CopyBytes - -; Okay, we did all that. Now, are we in the trade center? - ld a, [wLinkMode] - cp LINK_TRADECENTER - ret nz - -; Fill 5 bytes at wc9f4 with $20 - ld de, wc9f4 - ld a, $20 - call Function28682 - -; Copy all the mail messages to wc9f9 - ld a, BANK(sPartyMail) - call GetSRAMBank - ld hl, sPartyMail - ld b, PARTY_LENGTH -.loop2 - push bc - ld bc, MAIL_MSG_LENGTH + 1 - call CopyBytes - ld bc, sPartyMon1MailEnd - sPartyMon1MailAuthor - add hl, bc - pop bc - dec b - jr nz, .loop2 -; Copy the mail data to wcabf - ld hl, sPartyMail - ld b, PARTY_LENGTH -.loop3 - push bc - ld bc, MAIL_MSG_LENGTH + 1 - add hl, bc - ld bc, sPartyMon1MailEnd - sPartyMon1MailAuthor - call CopyBytes - pop bc - dec b - jr nz, .loop3 - - ld b, PARTY_LENGTH - ld de, sPartyMail - ld hl, wc9f9 -.loop4 - push bc - push hl - push de - push hl - farcall IsMailEuropean - pop de - ld a, c - or a - jr z, .next - sub $3 - jr nc, .italian_spanish - farcall HandleFrenchGermanMail - jr .next - -.italian_spanish - cp $2 - jr nc, .next - farcall HandleSpanishItalianMail - -.next - pop de - ld hl, MAIL_STRUCT_LENGTH - add hl, de - ld d, h - ld e, l - pop hl - ld bc, sPartyMon1MailAuthor - sPartyMon1Mail - add hl, bc - pop bc - dec b - jr nz, .loop4 - call CloseSRAM - ld hl, wc9f9 - ld bc, PARTY_LENGTH * (sPartyMon1MailAuthor - sPartyMon1Mail) -.loop5 - ld a, [hl] - cp SERIAL_NO_DATA_BYTE - jr nz, .skip2 - ld [hl], sPartyMon1MailAuthor - sPartyMon1Mail - -.skip2 - inc hl - dec bc - ld a, b - or c - jr nz, .loop5 - ld hl, wcabf - ld de, wcb13 - ld b, PARTY_LENGTH * (sPartyMon1MailEnd - sPartyMon1MailAuthor) - ld c, $0 -.loop6 - inc c - ld a, [hl] - cp SERIAL_NO_DATA_BYTE - jr nz, .skip3 - ld [hl], SERIAL_PATCH_LIST_PART_TERMINATOR - ld a, c - ld [de], a - inc de - -.skip3 - inc hl - dec b - jr nz, .loop6 - ld a, SERIAL_PATCH_LIST_PART_TERMINATOR - ld [de], a - ret -; 28682 - -Function28682: ; 28682 - ld c, 5 -.loop - ld [de], a - inc de - dec c - jr nz, .loop - ret -; 2868a - -Function2868a: ; 2868a - push hl - ld d, h - ld e, l - ld bc, wLinkOTPartyMonTypes - ld hl, wcbe8 - ld a, c - ld [hli], a - ld [hl], b - ld hl, wOTPartyMon1Species - ld c, PARTY_LENGTH -.loop - push bc - call .ConvertToGen2 - pop bc - dec c - jr nz, .loop - pop hl - ld bc, PARTY_LENGTH * REDMON_STRUCT_LENGTH - add hl, bc - ld de, wOTPartyMonOT - ld bc, PARTY_LENGTH * NAME_LENGTH - call CopyBytes - ld de, wOTPartyMonNicknames - ld bc, PARTY_LENGTH * MON_NAME_LENGTH - jp CopyBytes -; 286ba - -.ConvertToGen2: ; 286ba - ld b, h - ld c, l - ld a, [de] - inc de - push bc - push de - ld [wd265], a - callfar ConvertMon_1to2 - pop de - pop bc - ld a, [wd265] - ld [bc], a - ld [wCurSpecies], a - ld hl, MON_HP - add hl, bc - ld a, [de] - inc de - ld [hli], a - ld a, [de] - inc de - ld [hl], a - inc de - ld hl, MON_STATUS - add hl, bc - ld a, [de] - inc de - ld [hl], a - ld hl, wcbe8 - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - ld a, l - ld [wcbe8], a - ld a, h - ld [wcbe8 + 1], a - push bc - ld hl, MON_ITEM - add hl, bc - push hl - ld h, d - ld l, e - pop de - push bc - ld a, [hli] - ld b, a - call TimeCapsule_ReplaceTeruSama - ld a, b - ld [de], a - inc de - pop bc - ld bc, $19 - call CopyBytes - pop bc - ld d, h - ld e, l - ld hl, $1f - add hl, bc - ld a, [de] - inc de - ld [hl], a - ld [wCurPartyLevel], a - push bc - ld hl, $24 - add hl, bc - push hl - ld h, d - ld l, e - pop de - ld bc, 8 - call CopyBytes - pop bc - call GetBaseData - push de - push bc - ld d, h - ld e, l - ld hl, MON_STAT_EXP - 1 - add hl, bc - ld c, STAT_SATK - ld b, TRUE - predef CalcMonStatC - pop bc - pop hl - ld a, [hQuotient + 1] - ld [hli], a - ld a, [hQuotient + 2] - ld [hli], a - push hl - push bc - ld hl, MON_STAT_EXP - 1 - add hl, bc - ld c, STAT_SDEF - ld b, TRUE - predef CalcMonStatC - pop bc - pop hl - ld a, [hQuotient + 1] - ld [hli], a - ld a, [hQuotient + 2] - ld [hli], a - push hl - ld hl, $1b - add hl, bc - ld a, $46 - ld [hli], a - xor a - ld [hli], a - ld [hli], a - ld [hl], a - pop hl - inc de - inc de - ret -; 28771 - -TimeCapsule_ReplaceTeruSama: ; 28771 - ld a, b - and a - ret z - push hl - ld hl, TimeCapsule_CatchRateItems -.loop - ld a, [hli] - and a - jr z, .end - cp b - jr z, .found - inc hl - jr .loop - -.found - ld b, [hl] - -.end - pop hl - ret - - -INCLUDE "data/items/catch_rate_items.asm" - - -Link_CopyOTData: ; 2879e -.loop - ld a, [hli] - cp SERIAL_NO_DATA_BYTE - jr z, .loop - ld [de], a - inc de - dec bc - ld a, b - or c - jr nz, .loop - ret -; 287ab - -Link_CopyRandomNumbers: ; 287ab - ld a, [hSerialConnectionStatus] - cp USING_INTERNAL_CLOCK - ret z - ld hl, wEnemyMonSpecies - call Link_FindFirstNonControlCharacter_AllowZero - ld de, wLinkBattleRNs - ld c, 10 -.loop - ld a, [hli] - cp SERIAL_NO_DATA_BYTE - jr z, .loop - cp SERIAL_PREAMBLE_BYTE - jr z, .loop - ld [de], a - inc de - dec c - jr nz, .loop - ret -; 287ca - -Link_FindFirstNonControlCharacter_SkipZero: ; 287ca -.loop - ld a, [hli] - and a - jr z, .loop - cp SERIAL_PREAMBLE_BYTE - jr z, .loop - cp SERIAL_NO_DATA_BYTE - jr z, .loop - dec hl - ret -; 287d8 - -Link_FindFirstNonControlCharacter_AllowZero: ; 287d8 -.loop - ld a, [hli] - cp SERIAL_PREAMBLE_BYTE - jr z, .loop - cp SERIAL_NO_DATA_BYTE - jr z, .loop - dec hl - ret -; 287e3 - -InitTradeMenuDisplay: ; 287e3 - call ClearScreen - call LoadTradeScreenBorder - farcall InitTradeSpeciesList - xor a - ld hl, wOtherPlayerLinkMode - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a - ld a, 1 - ld [wMenuCursorY], a - inc a - ld [wPlayerLinkAction], a - jp LinkTrade_PlayerPartyMenu -; 28803 - -LinkTrade_OTPartyMenu: ; 28803 - ld a, OTPARTYMON - ld [wMonType], a - ld a, A_BUTTON | D_UP | D_DOWN - ld [wMenuJoypadFilter], a - ld a, [wOTPartyCount] - ld [w2DMenuNumRows], a - ld a, 1 - ld [w2DMenuNumCols], a - ld a, 9 - ld [w2DMenuCursorInitY], a - ld a, 6 - ld [w2DMenuCursorInitX], a - ld a, 1 - ld [wMenuCursorX], a - ln a, 1, 0 - ld [w2DMenuCursorOffsets], a - ld a, MENU_UNUSED_3 - ld [w2DMenuFlags1], a - xor a - ld [w2DMenuFlags2], a - -LinkTradeOTPartymonMenuLoop: ; 28835 - farcall LinkTradeMenu - ld a, d - and a - jp z, LinkTradePartiesMenuMasterLoop - bit A_BUTTON_F, a - jr z, .not_a_button - ld a, INIT_ENEMYOT_LIST - ld [wInitListType], a - callfar InitList - ld hl, wOTPartyMon1Species - farcall LinkMonStatsScreen - jp LinkTradePartiesMenuMasterLoop - -.not_a_button - bit D_UP_F, a - jr z, .not_d_up - ld a, [wMenuCursorY] - ld b, a - ld a, [wOTPartyCount] - cp b - jp nz, LinkTradePartiesMenuMasterLoop - xor a - ld [wMonType], a - call HideCursor - push hl - push bc - ld bc, NAME_LENGTH - add hl, bc - ld [hl], " " - pop bc - pop hl - ld a, [wPartyCount] - ld [wMenuCursorY], a - jr LinkTrade_PlayerPartyMenu - -.not_d_up - bit D_DOWN_F, a - jp z, LinkTradePartiesMenuMasterLoop - jp Function28ac9 -; 2888b - -LinkTrade_PlayerPartyMenu: ; 2888b - farcall InitMG_Mobile_LinkTradePalMap - xor a - ld [wMonType], a - ld a, A_BUTTON | D_UP | D_DOWN - ld [wMenuJoypadFilter], a - ld a, [wPartyCount] - ld [w2DMenuNumRows], a - ld a, 1 - ld [w2DMenuNumCols], a - ld a, 1 - ld [w2DMenuCursorInitY], a - ld a, 6 - ld [w2DMenuCursorInitX], a - ld a, 1 - ld [wMenuCursorX], a - ln a, 1, 0 - ld [w2DMenuCursorOffsets], a - ld a, MENU_UNUSED_3 - ld [w2DMenuFlags1], a - xor a - ld [w2DMenuFlags2], a - call WaitBGMap2 - -LinkTradePartymonMenuLoop: ; 288c5 - farcall LinkTradeMenu - ld a, d - and a - jr nz, .check_joypad - jp LinkTradePartiesMenuMasterLoop - -.check_joypad - bit A_BUTTON_F, a - jr z, .not_a_button - jp Function28926 - -.not_a_button - bit D_DOWN_F, a - jr z, .not_d_down - ld a, [wMenuCursorY] - dec a - jp nz, LinkTradePartiesMenuMasterLoop - ld a, OTPARTYMON - ld [wMonType], a - call HideCursor - push hl - push bc - ld bc, NAME_LENGTH - add hl, bc - ld [hl], " " - pop bc - pop hl - ld a, 1 - ld [wMenuCursorY], a - jp LinkTrade_OTPartyMenu - -.not_d_down - bit D_UP_F, a - jr z, LinkTradePartiesMenuMasterLoop - ld a, [wMenuCursorY] - ld b, a - ld a, [wPartyCount] - cp b - jr nz, LinkTradePartiesMenuMasterLoop - call HideCursor - push hl - push bc - ld bc, NAME_LENGTH - add hl, bc - ld [hl], " " - pop bc - pop hl - jp Function28ade -; 2891c - -LinkTradePartiesMenuMasterLoop: ; 2891c - ld a, [wMonType] - and a - jp z, LinkTradePartymonMenuLoop ; PARTYMON - jp LinkTradeOTPartymonMenuLoop ; OTPARTYMON -; 28926 - -Function28926: ; 28926 - call LoadTileMapToTempTileMap - ld a, [wMenuCursorY] - push af - hlcoord 0, 15 - ld b, 1 - ld c, 18 - call LinkTextboxAtHL - hlcoord 2, 16 - ld de, .String_Stats_Trade - call PlaceString - farcall Link_WaitBGMap - -.joy_loop - ld a, " " - ldcoord_a 11, 16 - ld a, A_BUTTON | B_BUTTON | D_RIGHT - ld [wMenuJoypadFilter], a - ld a, 1 - ld [w2DMenuNumRows], a - ld a, 1 - ld [w2DMenuNumCols], a - ld a, 16 - ld [w2DMenuCursorInitY], a - ld a, 1 - ld [w2DMenuCursorInitX], a - ld a, 1 - ld [wMenuCursorY], a - ld [wMenuCursorX], a - ln a, 2, 0 - ld [w2DMenuCursorOffsets], a - xor a - ld [w2DMenuFlags1], a - ld [w2DMenuFlags2], a - call ScrollingMenuJoypad - bit D_RIGHT_F, a - jr nz, .d_right - bit B_BUTTON_F, a - jr z, .show_stats -.b_button - pop af - ld [wMenuCursorY], a - call Call_LoadTempTileMapToTileMap - jp LinkTrade_PlayerPartyMenu - -.d_right - ld a, " " - ldcoord_a 1, 16 - ld a, A_BUTTON | B_BUTTON | D_LEFT - ld [wMenuJoypadFilter], a - ld a, 1 - ld [w2DMenuNumRows], a - ld a, 1 - ld [w2DMenuNumCols], a - ld a, 16 - ld [w2DMenuCursorInitY], a - ld a, 11 - ld [w2DMenuCursorInitX], a - ld a, 1 - ld [wMenuCursorY], a - ld [wMenuCursorX], a - ln a, 2, 0 - ld [w2DMenuCursorOffsets], a - xor a - ld [w2DMenuFlags1], a - ld [w2DMenuFlags2], a - call ScrollingMenuJoypad - bit D_LEFT_F, a - jp nz, .joy_loop - bit B_BUTTON_F, a - jr nz, .b_button - jr .try_trade - -.show_stats - pop af - ld [wMenuCursorY], a - ld a, INIT_PLAYEROT_LIST - ld [wInitListType], a - callfar InitList - farcall LinkMonStatsScreen - call Call_LoadTempTileMapToTileMap - hlcoord 6, 1 - lb bc, 6, 1 - ld a, " " - call LinkEngine_FillBox - hlcoord 17, 1 - lb bc, 6, 1 - ld a, " " - call LinkEngine_FillBox - jp LinkTrade_PlayerPartyMenu - -.try_trade - call PlaceHollowCursor - pop af - ld [wMenuCursorY], a - dec a - ld [wd002], a - ld [wPlayerLinkAction], a - farcall Function16d6ce - ld a, [wOtherPlayerLinkMode] - cp $f - jp z, InitTradeMenuDisplay - ld [wd003], a - call Function28b68 - ld c, 100 - call DelayFrames - farcall ValidateOTTrademon - jr c, .abnormal - farcall Functionfb5dd - jp nc, LinkTrade - xor a - ld [wcf57], a - ld [wOtherPlayerLinkAction], a - hlcoord 0, 12 - ld b, 4 - ld c, 18 - call LinkTextboxAtHL - farcall Link_WaitBGMap - ld hl, .Text_CantTradeLastMon - bccoord 1, 14 - call PlaceHLTextAtBC - jr .cancel_trade - -.abnormal - xor a - ld [wcf57], a - ld [wOtherPlayerLinkAction], a - ld a, [wd003] - ld hl, wOTPartySpecies - ld c, a - ld b, 0 - add hl, bc - ld a, [hl] - ld [wd265], a - call GetPokemonName - hlcoord 0, 12 - ld b, 4 - ld c, 18 - call LinkTextboxAtHL - farcall Link_WaitBGMap - ld hl, .Text_Abnormal - bccoord 1, 14 - call PlaceHLTextAtBC - -.cancel_trade - hlcoord 0, 12 - ld b, 4 - ld c, 18 - call LinkTextboxAtHL - hlcoord 1, 14 - ld de, String_TooBadTheTradeWasCanceled - call PlaceString - ld a, $1 - ld [wPlayerLinkAction], a - farcall Function16d6ce - ld c, 100 - call DelayFrames - jp InitTradeMenuDisplay -; 28aaf - - -.Text_CantTradeLastMon: ; 0x28aaf - ; If you trade that #MON, you won't be able to battle. - text_jump UnknownText_0x1c41b1 - db "@" -; 0x28ab4 - -.String_Stats_Trade: ; 28ab4 - db "STATS TRADE@" - -.Text_Abnormal: ; 0x28ac4 - ; Your friend's @ appears to be abnormal! - text_jump UnknownText_0x1c41e6 - db "@" -; 0x28ac9 - - -Function28ac9: ; 28ac9 - ld a, [wMenuCursorY] - cp 1 - jp nz, LinkTradePartiesMenuMasterLoop - call HideCursor - push hl - push bc - ld bc, NAME_LENGTH - add hl, bc - ld [hl], " " - pop bc - pop hl -Function28ade: ; 28ade -.loop1 - ld a, "▶" - ldcoord_a 9, 17 -.loop2 - call JoyTextDelay - ld a, [hJoyLast] - and a - jr z, .loop2 - bit A_BUTTON_F, a - jr nz, .a_button - push af - ld a, " " - ldcoord_a 9, 17 - pop af - bit D_UP_F, a - jr z, .d_up - ld a, [wOTPartyCount] - ld [wMenuCursorY], a - jp LinkTrade_OTPartyMenu - -.d_up - ld a, $1 - ld [wMenuCursorY], a - jp LinkTrade_PlayerPartyMenu - -.a_button - ld a, "▷" - ldcoord_a 9, 17 - ld a, $f - ld [wPlayerLinkAction], a - farcall Function16d6ce - ld a, [wOtherPlayerLinkMode] - cp $f - jr nz, .loop1 -Function28b22: ; 28b22 - call RotateThreePalettesRight - call ClearScreen - ld b, SCGB_DIPLOMA - call GetSGBLayout - call WaitBGMap2 - xor a - ld [wcfbb], a - xor a - ld [rSB], a - ld [hSerialSend], a - ld a, (0 << rSC_ON) | 1 - ld [rSC], a - ld a, (1 << rSC_ON) | 1 - ld [rSC], a - ret -; 28b42 - -Unreferenced_Function28b42: ; 28b42 - hlcoord 0, 16 - ld a, "┘" - ld bc, 2 * SCREEN_WIDTH - call ByteFill - hlcoord 1, 16 - ld a, " " - ld bc, SCREEN_WIDTH - 2 - call ByteFill - hlcoord 2, 16 - ld de, .Cancel - jp PlaceString -; 28b61 - -.Cancel: ; 28b61 - db "CANCEL@" -; 28b68 - -Function28b68: ; 28b68 - ld a, [wOtherPlayerLinkMode] - hlcoord 6, 9 - ld bc, SCREEN_WIDTH - call AddNTimes - ld [hl], "▷" - ret -; 28b77 - -LinkEngine_FillBox: ; 28b77 -.row - push bc - push hl -.col - 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 -; 28b87 - -LinkTrade: ; 28b87 - xor a - ld [wcf57], a - ld [wOtherPlayerLinkAction], a - hlcoord 0, 12 - ld b, 4 - ld c, 18 - call LinkTextboxAtHL - farcall Link_WaitBGMap - ld a, [wd002] - ld hl, wPartySpecies - ld c, a - ld b, 0 - add hl, bc - ld a, [hl] - ld [wd265], a - call GetPokemonName - ld hl, wStringBuffer1 - ld de, wd004 - ld bc, MON_NAME_LENGTH - call CopyBytes - ld a, [wd003] - ld hl, wOTPartySpecies - ld c, a - ld b, 0 - add hl, bc - ld a, [hl] - ld [wd265], a - call GetPokemonName - ld hl, UnknownText_0x28eb8 - bccoord 1, 14 - call PlaceHLTextAtBC - call LoadStandardMenuHeader - hlcoord 10, 7 - ld b, 3 - ld c, 7 - call LinkTextboxAtHL - ld de, String28eab - hlcoord 12, 8 - call PlaceString - ld a, 8 - ld [w2DMenuCursorInitY], a - ld a, 11 - ld [w2DMenuCursorInitX], a - ld a, 1 - ld [w2DMenuNumCols], a - ld a, 2 - ld [w2DMenuNumRows], a - xor a - ld [w2DMenuFlags1], a - ld [w2DMenuFlags2], a - ld a, $20 - ld [w2DMenuCursorOffsets], a - ld a, A_BUTTON | B_BUTTON - ld [wMenuJoypadFilter], a - ld a, 1 - ld [wMenuCursorY], a - ld [wMenuCursorX], a - farcall Link_WaitBGMap - call ScrollingMenuJoypad - push af - call Call_ExitMenu - call WaitBGMap2 - pop af - bit 1, a - jr nz, .asm_28c33 - ld a, [wMenuCursorY] - dec a - jr z, .asm_28c54 - -.asm_28c33 - ld a, $1 - ld [wPlayerLinkAction], a - hlcoord 0, 12 - ld b, 4 - ld c, 18 - call LinkTextboxAtHL - hlcoord 1, 14 - ld de, String_TooBadTheTradeWasCanceled - call PlaceString - farcall Function16d6ce - jp Function28ea3 - -.asm_28c54 - ld a, $2 - ld [wPlayerLinkAction], a - farcall Function16d6ce - ld a, [wOtherPlayerLinkMode] - dec a - jr nz, .asm_28c7b - hlcoord 0, 12 - ld b, 4 - ld c, 18 - call LinkTextboxAtHL - hlcoord 1, 14 - ld de, String_TooBadTheTradeWasCanceled - call PlaceString - jp Function28ea3 - -.asm_28c7b - ld hl, sPartyMail - ld a, [wd002] - ld bc, MAIL_STRUCT_LENGTH - call AddNTimes - ld a, BANK(sPartyMail) - call GetSRAMBank - ld d, h - ld e, l - ld bc, MAIL_STRUCT_LENGTH - add hl, bc - ld a, [wd002] - ld c, a -.asm_28c96 - inc c - ld a, c - cp PARTY_LENGTH - jr z, .asm_28ca6 - push bc - ld bc, MAIL_STRUCT_LENGTH - call CopyBytes - pop bc - jr .asm_28c96 - -.asm_28ca6 - ld hl, sPartyMail - ld a, [wPartyCount] - dec a - ld bc, MAIL_STRUCT_LENGTH - call AddNTimes - push hl - ld hl, wc9f4 - ld a, [wd003] - ld bc, MAIL_STRUCT_LENGTH - call AddNTimes - pop de - ld bc, MAIL_STRUCT_LENGTH - call CopyBytes - call CloseSRAM - ld hl, wPlayerName - ld de, wPlayerTrademonSenderName - ld bc, NAME_LENGTH - call CopyBytes - ld a, [wd002] - ld hl, wPartySpecies - ld b, 0 - ld c, a - add hl, bc - ld a, [hl] - ld [wPlayerTrademonSpecies], a - push af - ld a, [wd002] - ld hl, wPartyMonOT - call SkipNames - ld de, wPlayerTrademonOTName - ld bc, NAME_LENGTH - call CopyBytes - ld hl, wPartyMon1ID - ld a, [wd002] - call GetPartyLocation - ld a, [hli] - ld [wPlayerTrademonID], a - ld a, [hl] - ld [wPlayerTrademonID + 1], a - ld hl, wPartyMon1DVs - ld a, [wd002] - call GetPartyLocation - ld a, [hli] - ld [wPlayerTrademonDVs], a - ld a, [hl] - ld [wPlayerTrademonDVs + 1], a - ld a, [wd002] - ld hl, wPartyMon1Species - call GetPartyLocation - ld b, h - ld c, l - farcall GetCaughtGender - ld a, c - ld [wPlayerTrademonCaughtData], a - ld hl, wOTPlayerName - ld de, wOTTrademonSenderName - ld bc, NAME_LENGTH - call CopyBytes - ld a, [wd003] - ld hl, wOTPartySpecies - ld b, 0 - ld c, a - add hl, bc - ld a, [hl] - ld [wOTTrademonSpecies], a - ld a, [wd003] - ld hl, wOTPartyMonOT - call SkipNames - ld de, wOTTrademonOTName - ld bc, NAME_LENGTH - call CopyBytes - ld hl, wOTPartyMon1ID - ld a, [wd003] - call GetPartyLocation - ld a, [hli] - ld [wOTTrademonID], a - ld a, [hl] - ld [wOTTrademonID + 1], a - ld hl, wOTPartyMon1DVs - ld a, [wd003] - call GetPartyLocation - ld a, [hli] - ld [wOTTrademonDVs], a - ld a, [hl] - ld [wOTTrademonDVs + 1], a - ld a, [wd003] - ld hl, wOTPartyMon1Species - call GetPartyLocation - ld b, h - ld c, l - farcall GetCaughtGender - ld a, c - ld [wOTTrademonCaughtData], a - ld a, [wd002] - ld [wCurPartyMon], a - ld hl, wPartySpecies - ld b, 0 - ld c, a - add hl, bc - ld a, [hl] - ld [wd002], a - xor a ; REMOVE_PARTY - ld [wPokemonWithdrawDepositParameter], a - callfar RemoveMonFromPartyOrBox - ld a, [wPartyCount] - dec a - ld [wCurPartyMon], a - ld a, TRUE - ld [wForceEvolution], a - ld a, [wd003] - push af - ld hl, wOTPartySpecies - ld b, 0 - ld c, a - add hl, bc - ld a, [hl] - ld [wd003], a - ld c, 100 - call DelayFrames - call ClearTileMap - call LoadFontsBattleExtra - ld b, SCGB_DIPLOMA - call GetSGBLayout - ld a, [hSerialConnectionStatus] - cp USING_EXTERNAL_CLOCK - jr z, .player_2 - predef TradeAnimation - jr .done_animation - -.player_2 - predef TradeAnimationPlayer2 - -.done_animation - pop af - ld c, a - ld [wCurPartyMon], a - ld hl, wOTPartySpecies - ld d, 0 - ld e, a - add hl, de - ld a, [hl] - ld [wCurPartySpecies], a - ld hl, wOTPartyMon1Species - ld a, c - call GetPartyLocation - ld de, wTempMonSpecies - ld bc, PARTYMON_STRUCT_LENGTH - call CopyBytes - predef AddTempmonToParty - ld a, [wPartyCount] - dec a - ld [wCurPartyMon], a - callfar EvolvePokemon - call ClearScreen - call LoadTradeScreenBorder - call SetTradeRoomBGPals - farcall Link_WaitBGMap - ld b, $1 - pop af - ld c, a - cp MEW - jr z, .loop - ld a, [wCurPartySpecies] - cp MEW - jr z, .loop - ld b, $2 - ld a, c - cp CELEBI - jr z, .loop - ld a, [wCurPartySpecies] - cp CELEBI - jr z, .loop - ld b, $0 - -.loop - ld a, b - ld [wPlayerLinkAction], a - push bc - call Serial_PrintWaitingTextAndSyncAndExchangeNybble - pop bc - ld a, [wLinkMode] - cp LINK_TIMECAPSULE - jr z, .save - ld a, b - and a - jr z, .save - ld a, [wOtherPlayerLinkAction] - cp b - jr nz, .loop - -.save - farcall SaveAfterLinkTrade - farcall StubbedTrainerRankings_Trades - farcall BackupMobileEventIndex - ld c, 40 - call DelayFrames - hlcoord 0, 12 - ld b, 4 - ld c, 18 - call LinkTextboxAtHL - hlcoord 1, 14 - ld de, String28ebd - call PlaceString - farcall Link_WaitBGMap - ld c, 50 - call DelayFrames - ld a, [wLinkMode] - cp LINK_TIMECAPSULE - jp z, Gen2ToGen1LinkComms - jp Gen2ToGen2LinkComms -; 28ea3 - -Function28ea3: ; 28ea3 - ld c, 100 - call DelayFrames - jp InitTradeMenuDisplay -; 28eab - -String28eab: ; 28eab - db "TRADE" - next "CANCEL@" - -UnknownText_0x28eb8: ; 0x28eb8 - ; Trade @ for @ ? - text_jump UnknownText_0x1c4212 - db "@" -; 0x28ebd - -String28ebd: ; 28ebd - db "Trade completed!@" - -String_TooBadTheTradeWasCanceled: ; 28ece - db "Too bad! The trade" - next "was canceled!@" - - -LinkTextboxAtHL: ; 28eef - ld d, h - ld e, l - farcall LinkTextbox - ret -; 28ef8 - -LoadTradeScreenBorder: ; 28ef8 - farcall _LoadTradeScreenBorder - ret -; 28eff - -SetTradeRoomBGPals: ; 28eff - farcall LoadTradeRoomBGPals_ ; just a nested farcall; so wasteful - call SetPalettes - ret -; 28f09 - -Unreferenced_Function28f09: ; 28f09 - hlcoord 0, 0 - ld b, 6 - ld c, 18 - call LinkTextboxAtHL - hlcoord 0, 8 - ld b, 6 - ld c, 18 - call LinkTextboxAtHL - farcall PlaceTradePartnerNamesAndParty - ret -; 28f24 - -INCLUDE "engine/trade_animation.asm" - -CheckTimeCapsuleCompatibility: ; 29bfb -; Checks to see if your party is compatible with the Gen 1 games. -; Returns the following in wScriptVar: -; 0: Party is okay -; 1: At least one Pokémon was introduced in Gen 2 -; 2: At least one Pokémon has a move that was introduced in Gen 2 -; 3: At least one Pokémon is holding mail - -; If any party Pokémon was introduced in the Gen 2 games, don't let it in. - ld hl, wPartySpecies - ld b, PARTY_LENGTH -.loop - ld a, [hli] - cp -1 - jr z, .checkitem - cp JOHTO_POKEMON - jr nc, .mon_too_new - dec b - jr nz, .loop - -; If any party Pokémon is holding mail, don't let it in. -.checkitem - ld a, [wPartyCount] - ld b, a - ld hl, wPartyMon1Item -.itemloop - push hl - push bc - ld d, [hl] - farcall ItemIsMail - pop bc - pop hl - jr c, .mon_has_mail - ld de, PARTYMON_STRUCT_LENGTH - add hl, de - dec b - jr nz, .itemloop - -; If any party Pokémon has a move that was introduced in the Gen 2 games, don't let it in. - ld hl, wPartyMon1Moves - ld a, [wPartyCount] - ld b, a -.move_loop - ld c, NUM_MOVES -.move_next - ld a, [hli] - cp STRUGGLE + 1 - jr nc, .move_too_new - dec c - jr nz, .move_next - ld de, wPartyMon2 - (wPartyMon1 + NUM_MOVES) - add hl, de - dec b - jr nz, .move_loop - xor a - jr .done - -.mon_too_new - ld [wd265], a - call GetPokemonName - ld a, $1 - jr .done - -.move_too_new - push bc - ld [wd265], a - call GetMoveName - call CopyName1 - pop bc - call Function29c67 - ld a, $2 - jr .done - -.mon_has_mail - call Function29c67 - ld a, $3 - -.done - ld [wScriptVar], a - ret -; 29c67 - -Function29c67: ; 29c67 - ld a, [wPartyCount] - sub b - ld c, a - inc c - ld b, 0 - ld hl, wPartyCount - add hl, bc - ld a, [hl] - ld [wd265], a - call GetPokemonName - ret -; 29c7b - -EnterTimeCapsule: ; 29c7b - ld c, 10 - call DelayFrames - ld a, $4 - call Link_EnsureSync - ld c, 40 - call DelayFrames - xor a - ld [hVBlank], a - inc a - ld [wLinkMode], a - ret -; 29c92 - -WaitForOtherPlayerToExit: ; 29c92 - ld c, 3 - call DelayFrames - ld a, CONNECTION_NOT_ESTABLISHED - ld [hSerialConnectionStatus], a - xor a - ld [rSB], a - ld [hSerialReceive], a - ld a, (0 << rSC_ON) | 1 - ld [rSC], a - 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 << rSC_ON) | 0 - ld [rSC], a - ld a, (1 << rSC_ON) | 0 - ld [rSC], a - ld c, 3 - call DelayFrames - xor a - ld [rSB], a - ld [hSerialReceive], a - ld [rSC], a - ld c, 3 - call DelayFrames - ld a, CONNECTION_NOT_ESTABLISHED - ld [hSerialConnectionStatus], a - ld a, [rIF] - push af - xor a - ld [rIF], a - ld a, $f - ld [rIE], a - pop af - ld [rIF], a - ld hl, wLinkTimeoutFrames - xor a - ld [hli], a - ld [hl], a - ld [hVBlank], a - ld [wLinkMode], a - ret -; 29ce8 - -SetBitsForLinkTradeRequest: ; 29ce8 - ld a, LINK_TRADECENTER - 1 - ld [wPlayerLinkAction], a - ld [wd265], a - ret -; 29cf1 - -SetBitsForBattleRequest: ; 29cf1 - ld a, LINK_COLOSSEUM - 1 - ld [wPlayerLinkAction], a - ld [wd265], a - ret -; 29cfa - -SetBitsForTimeCapsuleRequest: ; 29cfa - ld a, $2 - ld [rSB], a - xor a - ld [hSerialReceive], a - ld a, (0 << rSC_ON) | 0 - ld [rSC], a - ld a, (1 << rSC_ON) | 0 - ld [rSC], a - xor a ; LINK_TIMECAPSULE - 1 - ld [wPlayerLinkAction], a - ld [wd265], a - ret -; 29d11 - -WaitForLinkedFriend: ; 29d11 - ld a, [wPlayerLinkAction] - and a - jr z, .no_link_action - ld a, $2 - ld [rSB], a - xor a - ld [hSerialReceive], a - ld a, (0 << rSC_ON) | 0 - ld [rSC], a - ld a, (1 << rSC_ON) | 0 - ld [rSC], a - call DelayFrame - call DelayFrame - call DelayFrame - -.no_link_action - ld a, $2 - ld [wLinkTimeoutFrames + 1], a - ld a, $ff - ld [wLinkTimeoutFrames], a -.loop - ld a, [hSerialConnectionStatus] - cp USING_INTERNAL_CLOCK - jr z, .connected - cp USING_EXTERNAL_CLOCK - jr z, .connected - ld a, CONNECTION_NOT_ESTABLISHED - ld [hSerialConnectionStatus], a - ld a, $2 - ld [rSB], a - xor a - ld [hSerialReceive], a - ld a, (0 << rSC_ON) | 0 - ld [rSC], a - ld a, (1 << rSC_ON) | 0 - ld [rSC], a - ld a, [wLinkTimeoutFrames] - dec a - ld [wLinkTimeoutFrames], a - jr nz, .not_done - ld a, [wLinkTimeoutFrames + 1] - dec a - ld [wLinkTimeoutFrames + 1], a - jr z, .done - -.not_done - ld a, $1 - ld [rSB], a - ld a, (0 << rSC_ON) | 1 - ld [rSC], a - ld a, (1 << rSC_ON) | 1 - ld [rSC], a - call DelayFrame - jr .loop - -.connected - call LinkDataReceived - call DelayFrame - call LinkDataReceived - ld c, 50 - call DelayFrames - ld a, $1 - ld [wScriptVar], a - ret - -.done - xor a - ld [wScriptVar], a - ret -; 29d92 - -CheckLinkTimeout: ; 29d92 - ld a, $1 - ld [wPlayerLinkAction], a - ld hl, wLinkTimeoutFrames - ld a, $3 - ld [hli], a - xor a - ld [hl], a - call WaitBGMap - ld a, $2 - ld [hVBlank], a - call DelayFrame - call DelayFrame - call Link_CheckCommunicationError - xor a - ld [hVBlank], a - ld a, [wScriptVar] - and a - ret nz - jp Link_ResetSerialRegistersAfterLinkClosure -; 29dba - -Function29dba: ; 29dba - ld a, $5 - ld [wPlayerLinkAction], a - ld hl, wLinkTimeoutFrames - ld a, $3 - ld [hli], a - xor a - ld [hl], a - call WaitBGMap - ld a, $2 - ld [hVBlank], a - call DelayFrame - call DelayFrame - call Link_CheckCommunicationError - ld a, [wScriptVar] - and a - jr z, .vblank - ld bc, -1 -.wait - dec bc - ld a, b - or c - jr nz, .wait - ld a, [wOtherPlayerLinkMode] - cp $5 - jr nz, .script_var - ld a, $6 - ld [wPlayerLinkAction], a - ld hl, wLinkTimeoutFrames - ld a, $1 - ld [hli], a - ld [hl], $32 - call Link_CheckCommunicationError - ld a, [wOtherPlayerLinkMode] - cp $6 - jr z, .vblank - -.script_var - xor a - ld [wScriptVar], a - ret - -.vblank - xor a - ld [hVBlank], a - ret -; 29e0c - -Link_CheckCommunicationError: ; 29e0c - xor a - ld [hSerialReceivedNewData], a - ld a, [wLinkTimeoutFrames] - ld h, a - ld a, [wLinkTimeoutFrames + 1] - ld l, a - push hl - call .CheckConnected - pop hl - jr nz, .load_true - call .AcknowledgeSerial - call .ConvertDW - call .CheckConnected - jr nz, .load_true - call .AcknowledgeSerial - xor a - jr .load_scriptvar - -.load_true - ld a, $1 - -.load_scriptvar - ld [wScriptVar], a - ld hl, wLinkTimeoutFrames - xor a - ld [hli], a - ld [hl], a - ret -; 29e3b - -.CheckConnected: ; 29e3b - call WaitLinkTransfer - ld hl, wLinkTimeoutFrames - ld a, [hli] - inc a - ret nz - ld a, [hl] - inc a - ret -; 29e47 - -.AcknowledgeSerial: ; 29e47 - ld b, 10 -.loop - call DelayFrame - call LinkDataReceived - dec b - jr nz, .loop - ret -; 29e53 - -.ConvertDW: ; 29e53 - ; [wLinkTimeoutFrames] = ((hl - $100) / 4) + $100 - ; = (hl / 4) + $c0 - dec h - srl h - rr l - srl h - rr l - inc h - ld a, h - ld [wLinkTimeoutFrames], a - ld a, l - ld [wLinkTimeoutFrames + 1], a - ret -; 29e66 - -TryQuickSave: ; 29e66 - ld a, [wd265] - push af - farcall Link_SaveGame - ld a, TRUE - jr nc, .return_result - xor a ; FALSE -.return_result - ld [wScriptVar], a - ld c, 30 - call DelayFrames - pop af - ld [wd265], a - ret -; 29e82 - -CheckBothSelectedSameRoom: ; 29e82 - ld a, [wd265] - call Link_EnsureSync - push af - call LinkDataReceived - call DelayFrame - call LinkDataReceived - pop af - ld b, a - ld a, [wd265] - cp b - jr nz, .fail - ld a, [wd265] - inc a - ld [wLinkMode], a - xor a - ld [hVBlank], a - ld a, TRUE - ld [wScriptVar], a - ret - -.fail - xor a ; FALSE - ld [wScriptVar], a - ret -; 29eaf - -TimeCapsule: ; 29eaf - ld a, LINK_TIMECAPSULE - ld [wLinkMode], a - call DisableSpriteUpdates - callfar LinkCommunications - call EnableSpriteUpdates - xor a - ld [hVBlank], a - ret -; 29ec4 - -TradeCenter: ; 29ec4 - ld a, LINK_TRADECENTER - ld [wLinkMode], a - call DisableSpriteUpdates - callfar LinkCommunications - call EnableSpriteUpdates - xor a - ld [hVBlank], a - ret -; 29ed9 - -Colosseum: ; 29ed9 - ld a, LINK_COLOSSEUM - ld [wLinkMode], a - call DisableSpriteUpdates - callfar LinkCommunications - call EnableSpriteUpdates - xor a - ld [hVBlank], a - ret -; 29eee - -CloseLink: ; 29eee - xor a - ld [wLinkMode], a - ld c, 3 - call DelayFrames - jp Link_ResetSerialRegistersAfterLinkClosure -; 29efa - -FailedLinkToPast: ; 29efa - ld c, 40 - call DelayFrames - ld a, $e - jp Link_EnsureSync -; 29f04 - -Link_ResetSerialRegistersAfterLinkClosure: ; 29f04 - ld c, 3 - call DelayFrames - ld a, CONNECTION_NOT_ESTABLISHED - ld [hSerialConnectionStatus], a - ld a, $2 - ld [rSB], a - xor a - ld [hSerialReceive], a - ld [rSC], a - ret -; 29f17 - -Link_EnsureSync: ; 29f17 - add $d0 - ld [wPlayerLinkAction], a - ld [wcf57], a - ld a, $2 - ld [hVBlank], a - call DelayFrame - call DelayFrame -.receive_loop - call Serial_ExchangeLinkMenuSelection - ld a, [wOtherPlayerLinkMode] - ld b, a - and $f0 - cp $d0 - jr z, .done - ld a, [wOtherPlayerLinkAction] - ld b, a - and $f0 - cp $d0 - jr nz, .receive_loop - -.done - xor a - ld [hVBlank], a - ld a, b - and $f - ret -; 29f47 - -CableClubCheckWhichChris: ; 29f47 - ld a, [hSerialConnectionStatus] - cp USING_EXTERNAL_CLOCK - ld a, TRUE - jr z, .yes - dec a ; FALSE - -.yes - ld [wScriptVar], a - ret -; 29f54 - -Unreferenced_Gen1LinkCommsBorderGFX: ; 29f54 -INCBIN "gfx/trade/unused_gen_1_border_tiles.2bpp" -; 29fe4 - -Unreferenced_Function29fe4: - ld a, BANK(sPartyMail) - call GetSRAMBank - ld d, FALSE - ld b, CHECK_FLAG - predef SmallFarFlagAction - call CloseSRAM - ld a, c - and a - ret |