diff options
| author | dannye <33dannye@gmail.com> | 2020-11-04 00:06:44 -0600 |
|---|---|---|
| committer | dannye <33dannye@gmail.com> | 2020-11-04 00:06:44 -0600 |
| commit | 5647ca687b92954dcf37a6ea6bfbc9a341c32de4 (patch) | |
| tree | dde1937a1bfdb3a835f4155e1c2eb8f1aaf86f63 /engine/cable_club.asm | |
| parent | Merge pull request #55 from Deokishisu/patch-1 (diff) | |
| download | pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.tar.gz pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.tar.xz pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.zip | |
Sync with pokered
Diffstat (limited to 'engine/cable_club.asm')
| -rwxr-xr-x | engine/cable_club.asm | 984 |
1 files changed, 0 insertions, 984 deletions
diff --git a/engine/cable_club.asm b/engine/cable_club.asm deleted file mode 100755 index a8dc5d8d..00000000 --- a/engine/cable_club.asm +++ /dev/null @@ -1,984 +0,0 @@ -; performs the appropriate action when the player uses the gameboy on the table in the Colosseum or Trade Center -; In the Colosseum, it starts a battle. In the Trade Center, it displays the trade selection screen. -; Before doing either action, it swaps random numbers, trainer names and party data with the other gameboy. -CableClub_DoBattleOrTrade: - ld c, 80 - call DelayFrames - call ClearScreen - call UpdateSprites - call LoadFontTilePatterns - call LoadHpBarAndStatusTilePatterns - call LoadTrainerInfoTextBoxTiles - coord hl, 3, 8 - lb bc, 2, 12 - call CableClub_TextBoxBorder - coord hl, 4, 10 - ld de, PleaseWaitString - call PlaceString - ld hl, wPlayerNumHits - xor a - ld [hli], a - ld [hl], $50 - ; fall through - -; This is called after completing a trade. -CableClub_DoBattleOrTradeAgain: - ld hl, wSerialPlayerDataBlock - ld a, SERIAL_PREAMBLE_BYTE - ld b, 6 -.writePlayerDataBlockPreambleLoop - ld [hli], a - dec b - jr nz, .writePlayerDataBlockPreambleLoop - ld hl, wSerialRandomNumberListBlock - ld a, SERIAL_PREAMBLE_BYTE - ld b, 7 -.writeRandomNumberListPreambleLoop - ld [hli], a - dec b - jr nz, .writeRandomNumberListPreambleLoop - ld b, 10 -.generateRandomNumberListLoop - call Random - cp SERIAL_PREAMBLE_BYTE ; all the random numbers have to be less than the preamble byte - jr nc, .generateRandomNumberListLoop - ld [hli], a - dec b - jr nz, .generateRandomNumberListLoop - ld hl, wSerialPartyMonsPatchList - ld a, SERIAL_PREAMBLE_BYTE - ld [hli], a - ld [hli], a - ld [hli], a - ld b, $c8 - xor a -.zeroPlayerDataPatchListLoop - ld [hli], a - dec b - jr nz, .zeroPlayerDataPatchListLoop - ld hl, wGrassRate - ld bc, wTrainerHeaderPtr - wGrassRate -.zeroEnemyPartyLoop - xor a - ld [hli], a - dec bc - ld a, b - or c - jr nz, .zeroEnemyPartyLoop - ld hl, wPartyMons - 1 - ld de, wSerialPartyMonsPatchList + 10 - ld bc, 0 -.patchPartyMonsLoop - inc c - ld a, c - cp SERIAL_PREAMBLE_BYTE - jr z, .startPatchListPart2 - ld a, b - dec a ; are we in part 2 of the patch list? - jr nz, .checkPlayerDataByte ; jump if in part 1 -; if we're in part 2 - ld a, c - cp (wPartyMonOT - (wPartyMons - 1)) - (SERIAL_PREAMBLE_BYTE - 1) - jr z, .finishedPatchingPlayerData -.checkPlayerDataByte - inc hl - ld a, [hl] - cp SERIAL_NO_DATA_BYTE - jr nz, .patchPartyMonsLoop -; if the player data byte matches SERIAL_NO_DATA_BYTE, patch it with $FF and record the offset in the patch list - ld a, c - ld [de], a - inc de - ld [hl], $ff - jr .patchPartyMonsLoop -.startPatchListPart2 - ld a, SERIAL_PATCH_LIST_PART_TERMINATOR - ld [de], a ; end of part 1 - inc de - lb bc, 1, 0 - jr .patchPartyMonsLoop -.finishedPatchingPlayerData - ld a, SERIAL_PATCH_LIST_PART_TERMINATOR - ld [de], a ; end of part 2 - call Serial_SyncAndExchangeNybble - ld a, [hSerialConnectionStatus] - cp USING_INTERNAL_CLOCK - jr nz, .skipSendingTwoZeroBytes -; if using internal clock -; send two zero bytes for syncing purposes? - call Delay3 - xor a - ld [hSerialSendData], a - ld a, START_TRANSFER_INTERNAL_CLOCK - ld [rSC], a - call DelayFrame - xor a - ld [hSerialSendData], a - ld a, START_TRANSFER_INTERNAL_CLOCK - ld [rSC], a -.skipSendingTwoZeroBytes - call Delay3 - call StopAllMusic - ld a, (1 << SERIAL) - ld [rIE], a - ld hl, wSerialRandomNumberListBlock - ld de, wSerialOtherGameboyRandomNumberListBlock - ld bc, $11 - call Serial_ExchangeBytes - ld a, SERIAL_NO_DATA_BYTE - ld [de], a - ld hl, wSerialPlayerDataBlock - ld de, wSerialEnemyDataBlock - ld bc, $1a8 - call Serial_ExchangeBytes - ld a, SERIAL_NO_DATA_BYTE - ld [de], a - ld hl, wSerialPartyMonsPatchList - ld de, wSerialEnemyMonsPatchList - ld bc, $c8 - call Serial_ExchangeBytes - ld a, (1 << SERIAL) | (1 << TIMER) | (1 << VBLANK) - ld [rIE], a - ld a, [hSerialConnectionStatus] - cp USING_INTERNAL_CLOCK - jr z, .skipCopyingRandomNumberList ; the list generated by the gameboy clocking the connection is used by both gameboys - ld hl, wSerialOtherGameboyRandomNumberListBlock -.findStartOfRandomNumberListLoop - ld a, [hli] - and a - jr z, .findStartOfRandomNumberListLoop - cp SERIAL_PREAMBLE_BYTE - jr z, .findStartOfRandomNumberListLoop - cp SERIAL_NO_DATA_BYTE - jr z, .findStartOfRandomNumberListLoop - dec hl - ld de, wLinkBattleRandomNumberList - ld c, 10 -.copyRandomNumberListLoop - ld a, [hli] - cp SERIAL_NO_DATA_BYTE - jr z, .copyRandomNumberListLoop - ld [de], a - inc de - dec c - jr nz, .copyRandomNumberListLoop -.skipCopyingRandomNumberList - ld hl, wSerialEnemyDataBlock + 3 -.findStartOfEnemyNameLoop - ld a, [hli] - and a - jr z, .findStartOfEnemyNameLoop - cp SERIAL_PREAMBLE_BYTE - jr z, .findStartOfEnemyNameLoop - cp SERIAL_NO_DATA_BYTE - jr z, .findStartOfEnemyNameLoop - dec hl - ld de, wLinkEnemyTrainerName - ld c, NAME_LENGTH -.copyEnemyNameLoop - ld a, [hli] - cp SERIAL_NO_DATA_BYTE - jr z, .copyEnemyNameLoop - ld [de], a - inc de - dec c - jr nz, .copyEnemyNameLoop - ld de, wEnemyPartyCount - ld bc, wTrainerHeaderPtr - wEnemyPartyCount -.copyEnemyPartyLoop - ld a, [hli] - cp SERIAL_NO_DATA_BYTE - jr z, .copyEnemyPartyLoop - ld [de], a - inc de - dec bc - ld a, b - or c - jr nz, .copyEnemyPartyLoop - ld de, wSerialPartyMonsPatchList - ld hl, wPartyMons - ld c, 2 ; patch list has 2 parts -.unpatchPartyMonsLoop - ld a, [de] - inc de - and a - jr z, .unpatchPartyMonsLoop - cp SERIAL_PREAMBLE_BYTE - jr z, .unpatchPartyMonsLoop - cp SERIAL_NO_DATA_BYTE - jr z, .unpatchPartyMonsLoop - cp SERIAL_PATCH_LIST_PART_TERMINATOR - jr z, .finishedPartyMonsPatchListPart - 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 .unpatchPartyMonsLoop -.finishedPartyMonsPatchListPart - ld hl, wPartyMons + (SERIAL_PREAMBLE_BYTE - 1) - dec c ; is there another part? - jr nz, .unpatchPartyMonsLoop - ld de, wSerialEnemyMonsPatchList - ld hl, wEnemyMons - ld c, 2 ; patch list has 2 parts -.unpatchEnemyMonsLoop - ld a, [de] - inc de - and a - jr z, .unpatchEnemyMonsLoop - cp SERIAL_PREAMBLE_BYTE - jr z, .unpatchEnemyMonsLoop - cp SERIAL_NO_DATA_BYTE - jr z, .unpatchEnemyMonsLoop - cp SERIAL_PATCH_LIST_PART_TERMINATOR - jr z, .finishedEnemyMonsPatchListPart - 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 .unpatchEnemyMonsLoop -.finishedEnemyMonsPatchListPart - ld hl, wEnemyMons + (SERIAL_PREAMBLE_BYTE - 1) - dec c - jr nz, .unpatchEnemyMonsLoop - ld a, wEnemyMonOT % $100 - ld [wUnusedCF8D], a - ld a, wEnemyMonOT / $100 - ld [wUnusedCF8D + 1], a - xor a - ld [wTradeCenterPointerTableIndex], a - call StopAllMusic - ld a, [hSerialConnectionStatus] - cp USING_INTERNAL_CLOCK - ld c, 66 - call z, DelayFrames ; delay if using internal clock - ld a, [wLinkState] - cp LINK_STATE_START_BATTLE - ld a, LINK_STATE_TRADING - ld [wLinkState], a - jr nz, .trading - ld a, LINK_STATE_BATTLING - ld [wLinkState], a - ld a, OPP_SONY1 - ld [wCurOpponent], a - call ClearScreen - call Delay3 - ld b, $9 - call RunPaletteCommand - ld hl, wOptions - res 7, [hl] - ld a, [wLetterPrintingDelayFlags] - push af - xor a - ld [wLetterPrintingDelayFlags], a - predef InitOpponent - pop af - ld [wLetterPrintingDelayFlags], a - predef HealParty - jp ReturnToCableClubRoom -.trading - ld c, BANK(Music_GameCorner) - ld a, MUSIC_GAME_CORNER - call PlayMusic - jr CallCurrentTradeCenterFunction - -PleaseWaitString: - db "PLEASE WAIT!@" - -CallCurrentTradeCenterFunction: - ld hl, TradeCenterPointerTable - ld b, 0 - ld a, [wTradeCenterPointerTableIndex] - cp $ff - jp z, DisplayTitleScreen - add a - ld c, a - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -TradeCenter_SelectMon: - call ClearScreen - call Delay3 - ld b, $9 - call RunPaletteCommand - call LoadTrainerInfoTextBoxTiles - call TradeCenter_DrawPartyLists - call TradeCenter_DrawCancelBox - xor a - ld hl, wSerialSyncAndExchangeNybbleReceiveData - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a - ld [wMenuWatchMovingOutOfBounds], a - ld [wCurrentMenuItem], a - ld [wLastMenuItem], a - ld [wMenuJoypadPollCount], a - inc a - ld [wSerialExchangeNybbleSendData], a - jp .playerMonMenu -.enemyMonMenu - xor a - ld [wMenuWatchMovingOutOfBounds], a - inc a - ld [wWhichTradeMonSelectionMenu], a - ld a, D_DOWN | D_LEFT | A_BUTTON - ld [wMenuWatchedKeys], a - ld a, [wEnemyPartyCount] - ld [wMaxMenuItem], a - ld a, 9 - ld [wTopMenuItemY], a - ld a, 1 - ld [wTopMenuItemX], a -.enemyMonMenu_HandleInput - ld hl, hFlags_0xFFFA - set 1, [hl] - call HandleMenuInput - ld hl, hFlags_0xFFFA - res 1, [hl] - and a - jp z, .getNewInput - bit 0, a ; A button pressed? - jr z, .enemyMonMenu_ANotPressed -; if A button pressed - ld a, [wMaxMenuItem] - ld c, a - ld a, [wCurrentMenuItem] - cp c - jr c, .displayEnemyMonStats - ld a, [wMaxMenuItem] - dec a - ld [wCurrentMenuItem], a -.displayEnemyMonStats - ld a, INIT_ENEMYOT_LIST - ld [wInitListType], a - callab InitList ; the list isn't used - ld hl, wEnemyMons - call TradeCenter_DisplayStats - jp .getNewInput -.enemyMonMenu_ANotPressed - bit 5, a ; Left pressed? - jr z, .enemyMonMenu_LeftNotPressed -; if Left pressed, switch back to the player mon menu - xor a ; player mon menu - ld [wWhichTradeMonSelectionMenu], a - ld a, [wMenuCursorLocation] - ld l, a - ld a, [wMenuCursorLocation + 1] - ld h, a - ld a, [wTileBehindCursor] - ld [hl], a - ld a, [wCurrentMenuItem] - ld b, a - ld a, [wPartyCount] - dec a - cp b - jr nc, .playerMonMenu - ld [wCurrentMenuItem], a - jr .playerMonMenu -.enemyMonMenu_LeftNotPressed - bit 7, a ; Down pressed? - jp z, .getNewInput - jp .selectedCancelMenuItem ; jump if Down pressed -.playerMonMenu - xor a ; player mon menu - ld [wWhichTradeMonSelectionMenu], a - ld [wMenuWatchMovingOutOfBounds], a - ld a, D_DOWN | D_RIGHT | A_BUTTON - ld [wMenuWatchedKeys], a - ld a, [wPartyCount] - ld [wMaxMenuItem], a - ld a, 1 - ld [wTopMenuItemY], a - ld a, 1 - ld [wTopMenuItemX], a - coord hl, 1, 1 - lb bc, 6, 1 - call ClearScreenArea -.playerMonMenu_HandleInput - ld hl, hFlags_0xFFFA - set 1, [hl] - call HandleMenuInput - ld hl, hFlags_0xFFFA - res 1, [hl] - and a ; was anything pressed? - jr nz, .playerMonMenu_SomethingPressed - jp .getNewInput -.playerMonMenu_SomethingPressed - bit 0, a ; A button pressed? - jr z, .playerMonMenu_ANotPressed - jp .chosePlayerMon ; jump if A button pressed -; unreachable code - ld a, INIT_PLAYEROT_LIST - ld [wInitListType], a - callab InitList ; the list isn't used - call TradeCenter_DisplayStats - jp .getNewInput -.playerMonMenu_ANotPressed - bit 4, a ; Right pressed? - jr z, .playerMonMenu_RightNotPressed -; if Right pressed, switch to the enemy mon menu - ld a, $1 ; enemy mon menu - ld [wWhichTradeMonSelectionMenu], a - ld a, [wMenuCursorLocation] - ld l, a - ld a, [wMenuCursorLocation + 1] - ld h, a - ld a, [wTileBehindCursor] - ld [hl], a - ld a, [wCurrentMenuItem] - ld b, a - ld a, [wEnemyPartyCount] - dec a - cp b - jr nc, .notPastLastEnemyMon -; when switching to the enemy mon menu, if the menu selection would be past the last enemy mon, select the last enemy mon - ld [wCurrentMenuItem], a -.notPastLastEnemyMon - jp .enemyMonMenu -.playerMonMenu_RightNotPressed - bit 7, a ; Down pressed? - jr z, .getNewInput - jp .selectedCancelMenuItem ; jump if Down pressed -.getNewInput - ld a, [wWhichTradeMonSelectionMenu] - and a - jp z, .playerMonMenu_HandleInput - jp .enemyMonMenu_HandleInput -.chosePlayerMon - call SaveScreenTilesToBuffer1 - call PlaceUnfilledArrowMenuCursor - ld a, [wMaxMenuItem] - ld c, a - ld a, [wCurrentMenuItem] - cp c - jr c, .displayStatsTradeMenu - ld a, [wMaxMenuItem] - dec a -.displayStatsTradeMenu - push af - coord hl, 0, 14 - lb bc, 2, 18 - call CableClub_TextBoxBorder - coord hl, 2, 16 - ld de, .statsTrade - call PlaceString - xor a - ld [wCurrentMenuItem], a - ld [wLastMenuItem], a - ld [wMenuJoypadPollCount], a - ld [wMaxMenuItem], a - ld a, 16 - ld [wTopMenuItemY], a -.selectStatsMenuItem - ld a, " " - Coorda 11, 16 - ld a, D_RIGHT | B_BUTTON | A_BUTTON - ld [wMenuWatchedKeys], a - ld a, 1 - ld [wTopMenuItemX], a - call HandleMenuInput - bit 4, a ; Right pressed? - jr nz, .selectTradeMenuItem - bit 1, a ; B button pressed? - jr z, .displayPlayerMonStats -.cancelPlayerMonChoice - pop af - ld [wCurrentMenuItem], a - call LoadScreenTilesFromBuffer1 - jp .playerMonMenu -.selectTradeMenuItem - ld a, " " - Coorda 1, 16 - ld a, D_LEFT | B_BUTTON | A_BUTTON - ld [wMenuWatchedKeys], a - ld a, 11 - ld [wTopMenuItemX], a - call HandleMenuInput - bit 5, a ; Left pressed? - jr nz, .selectStatsMenuItem - bit 1, a ; B button pressed? - jr nz, .cancelPlayerMonChoice - jr .choseTrade -.displayPlayerMonStats - pop af - ld [wCurrentMenuItem], a - ld a, INIT_PLAYEROT_LIST - ld [wInitListType], a - callab InitList ; the list isn't used - call TradeCenter_DisplayStats - call LoadScreenTilesFromBuffer1 - jp .playerMonMenu -.choseTrade - call PlaceUnfilledArrowMenuCursor - pop af - ld [wCurrentMenuItem], a - ld [wTradingWhichPlayerMon], a - ld [wSerialExchangeNybbleSendData], a - call Serial_PrintWaitingTextAndSyncAndExchangeNybble - ld a, [wSerialSyncAndExchangeNybbleReceiveData] - cp $f - jp z, CallCurrentTradeCenterFunction ; go back to the beginning of the trade selection menu if the other person cancelled - ld [wTradingWhichEnemyMon], a - call TradeCenter_PlaceSelectedEnemyMonMenuCursor - ld a, $1 ; TradeCenter_Trade - ld [wTradeCenterPointerTableIndex], a - jp CallCurrentTradeCenterFunction -.statsTrade - db "STATS TRADE@" -.selectedCancelMenuItem - ld a, [wCurrentMenuItem] - ld b, a - ld a, [wMaxMenuItem] - cp b - jp nz, .getNewInput - ld a, [wMenuCursorLocation] - ld l, a - ld a, [wMenuCursorLocation + 1] - ld h, a - ld a, " " - ld [hl], a -.cancelMenuItem_Loop - ld a, "▶" ; filled arrow cursor - Coorda 1, 16 -.cancelMenuItem_JoypadLoop - call JoypadLowSensitivity - ld a, [hJoy5] - and a ; pressed anything? - jr z, .cancelMenuItem_JoypadLoop - bit 0, a ; A button pressed? - jr nz, .cancelMenuItem_APressed - bit 6, a ; Up pressed? - jr z, .cancelMenuItem_JoypadLoop -; if Up pressed - ld a, " " - Coorda 1, 16 - ld a, [wPartyCount] - dec a - ld [wCurrentMenuItem], a - jp .playerMonMenu -.cancelMenuItem_APressed - ld a, "▷" ; unfilled arrow cursor - Coorda 1, 16 - ld a, $f - ld [wSerialExchangeNybbleSendData], a - call Serial_PrintWaitingTextAndSyncAndExchangeNybble - ld a, [wSerialSyncAndExchangeNybbleReceiveData] - cp $f ; did the other person choose Cancel too? - jr nz, .cancelMenuItem_Loop - ; fall through - -ReturnToCableClubRoom: - call GBPalWhiteOutWithDelay3 - ld hl, wFontLoaded - ld a, [hl] - push af - push hl - res 0, [hl] - xor a - ld [wd72d], a - dec a - ld [wDestinationWarpID], a - call LoadMapData - callba ClearVariablesOnEnterMap - pop hl - pop af - ld [hl], a - call GBFadeInFromWhite - ret - -TradeCenter_DrawCancelBox: - coord hl, 11, 15 - ld a, $7e - ld bc, 2 * SCREEN_WIDTH + 9 - call FillMemory - coord hl, 0, 15 - lb bc, 1, 9 - call CableClub_TextBoxBorder - coord hl, 2, 16 - ld de, CancelTextString - jp PlaceString - -CancelTextString: - db "CANCEL@" - -TradeCenter_PlaceSelectedEnemyMonMenuCursor: - ld a, [wSerialSyncAndExchangeNybbleReceiveData] - coord hl, 1, 9 - ld bc, SCREEN_WIDTH - call AddNTimes - ld [hl], "▷" ; cursor - ret - -TradeCenter_DisplayStats: - ld a, [wCurrentMenuItem] - ld [wWhichPokemon], a - predef StatusScreen - predef StatusScreen2 - call Delay3 - ld b, $9 - call RunPaletteCommand - call GBPalNormal - call LoadTrainerInfoTextBoxTiles - call TradeCenter_DrawPartyLists - jp TradeCenter_DrawCancelBox - -TradeCenter_DrawPartyLists: - coord hl, 0, 0 - lb bc, 6, 18 - call CableClub_TextBoxBorder - coord hl, 0, 8 - lb bc, 6, 18 - call CableClub_TextBoxBorder - coord hl, 5, 0 - ld de, wPlayerName - call PlaceString - coord hl, 5, 8 - ld de, wLinkEnemyTrainerName - call PlaceString - coord hl, 2, 1 - ld de, wPartySpecies - call TradeCenter_PrintPartyListNames - coord hl, 2, 9 - ld de, wEnemyPartyMons - ; fall through - -TradeCenter_PrintPartyListNames: - ld c, $0 -.loop - ld a, [de] - cp $ff - ret z - ld [wd11e], a - push bc - push hl - push de - push hl - ld a, c - ld [$ff95], a - call GetMonName - pop hl - call PlaceString - pop de - inc de - pop hl - ld bc, 20 - add hl, bc - pop bc - inc c - jr .loop - -TradeCenter_Trade: - ld c, 100 - call DelayFrames - xor a - ld [wSerialExchangeNybbleSendData + 1], a ; unnecessary - ld [wSerialExchangeNybbleReceiveData], a - ld [wMenuWatchMovingOutOfBounds], a - ld [wMenuJoypadPollCount], a - coord hl, 0, 12 - lb bc, 4, 18 - call CableClub_TextBoxBorder - ld a, [wTradingWhichPlayerMon] - ld hl, wPartySpecies - ld c, a - ld b, 0 - add hl, bc - ld a, [hl] - ld [wd11e], a - call GetMonName - ld hl, wcd6d - ld de, wNameOfPlayerMonToBeTraded - ld bc, NAME_LENGTH - call CopyData - ld a, [wTradingWhichEnemyMon] - ld hl, wEnemyPartyMons - ld c, a - ld b, 0 - add hl, bc - ld a, [hl] - ld [wd11e], a - call GetMonName - ld hl, WillBeTradedText - coord bc, 1, 14 - call TextCommandProcessor - call SaveScreenTilesToBuffer1 - coord hl, 10, 7 - lb bc, 8, 11 - ld a, TRADE_CANCEL_MENU - ld [wTwoOptionMenuID], a - ld a, TWO_OPTION_MENU - ld [wTextBoxID], a - call DisplayTextBoxID - call LoadScreenTilesFromBuffer1 - ld a, [wCurrentMenuItem] - and a - jr z, .tradeConfirmed -; if trade cancelled - ld a, $1 - ld [wSerialExchangeNybbleSendData], a - coord hl, 0, 12 - lb bc, 4, 18 - call CableClub_TextBoxBorder - coord hl, 1, 14 - ld de, TradeCanceled - call PlaceString - call Serial_PrintWaitingTextAndSyncAndExchangeNybble - jp .tradeCancelled -.tradeConfirmed - ld a, $2 - ld [wSerialExchangeNybbleSendData], a - call Serial_PrintWaitingTextAndSyncAndExchangeNybble - ld a, [wSerialSyncAndExchangeNybbleReceiveData] - dec a ; did the other person cancel? - jr nz, .doTrade -; if the other person cancelled - coord hl, 0, 12 - lb bc, 4, 18 - call CableClub_TextBoxBorder - coord hl, 1, 14 - ld de, TradeCanceled - call PlaceString - jp .tradeCancelled -.doTrade - ld a, [wTradingWhichPlayerMon] - ld hl, wPartyMonOT - call SkipFixedLengthTextEntries - ld de, wTradedPlayerMonOT - ld bc, NAME_LENGTH - call CopyData - ld hl, wPartyMon1Species - ld a, [wTradingWhichPlayerMon] - ld bc, wPartyMon2 - wPartyMon1 - call AddNTimes - ld bc, wPartyMon1OTID - wPartyMon1 - add hl, bc - ld a, [hli] - ld [wTradedPlayerMonOTID], a - ld a, [hl] - ld [wTradedPlayerMonOTID + 1], a - ld a, [wTradingWhichEnemyMon] - ld hl, wEnemyMonOT - call SkipFixedLengthTextEntries - ld de, wTradedEnemyMonOT - ld bc, NAME_LENGTH - call CopyData - ld hl, wEnemyMons - ld a, [wTradingWhichEnemyMon] - ld bc, wEnemyMon2 - wEnemyMon1 - call AddNTimes - ld bc, wEnemyMon1OTID - wEnemyMon1 - add hl, bc - ld a, [hli] - ld [wTradedEnemyMonOTID], a - ld a, [hl] - ld [wTradedEnemyMonOTID + 1], a - ld a, [wTradingWhichPlayerMon] - ld [wWhichPokemon], a - ld hl, wPartySpecies - ld b, 0 - ld c, a - add hl, bc - ld a, [hl] - ld [wTradedPlayerMonSpecies], a - callabd_ModifyPikachuHappiness PIKAHAPPY_TRADE - xor a - ld [wRemoveMonFromBox], a - call RemovePokemon - ld a, [wTradingWhichEnemyMon] - ld c, a - ld [wWhichPokemon], a - ld hl, wEnemyPartyMons - ld d, 0 - ld e, a - add hl, de - ld a, [hl] - ld [wcf91], a - ld hl, wEnemyMons - ld a, c - ld bc, wEnemyMon2 - wEnemyMon1 - call AddNTimes - ld de, wLoadedMon - ld bc, wEnemyMon2 - wEnemyMon1 - call CopyData - call AddEnemyMonToPlayerParty - ld a, [wPartyCount] - dec a - ld [wWhichPokemon], a - ld a, $1 - ld [wForceEvolution], a - ld a, [wTradingWhichEnemyMon] - ld hl, wEnemyPartyMons - ld b, 0 - ld c, a - add hl, bc - ld a, [hl] - ld [wTradedEnemyMonSpecies], a - ld a, 10 - ld [wAudioFadeOutControl], a - ld a, BANK(Music_SafariZone) - ld [wAudioSavedROMBank], a - ld a, MUSIC_SAFARI_ZONE - ld [wNewSoundID], a - call PlaySound - ld c, 100 - call DelayFrames - call ClearScreen - call LoadHpBarAndStatusTilePatterns - xor a - ld [wUnusedCC5B], a - ld a, [hSerialConnectionStatus] - cp USING_EXTERNAL_CLOCK - jr z, .usingExternalClock - predef InternalClockTradeAnim - jr .tradeCompleted -.usingExternalClock - predef ExternalClockTradeAnim -.tradeCompleted - callab TryEvolvingMon - call ClearScreen - call LoadTrainerInfoTextBoxTiles - call Serial_PrintWaitingTextAndSyncAndExchangeNybble - ld c, 40 - call DelayFrames - call Delay3 - ld b, $9 - call RunPaletteCommand - coord hl, 0, 12 - lb bc, 4, 18 - call CableClub_TextBoxBorder - coord hl, 1, 14 - ld de, TradeCompleted - call PlaceString - predef SaveSAVtoSRAM2 - ld c, 50 - call DelayFrames - xor a - ld [wTradeCenterPointerTableIndex], a - jp CableClub_DoBattleOrTradeAgain -.tradeCancelled - ld c, 100 - call DelayFrames - xor a ; TradeCenter_SelectMon - ld [wTradeCenterPointerTableIndex], a - jp CallCurrentTradeCenterFunction - -WillBeTradedText: - TX_FAR _WillBeTradedText - db "@" - -TradeCompleted: - db "Trade completed!@" - -TradeCanceled: - db "Too bad! The trade" - next "was canceled!@" - -TradeCenterPointerTable: - dw TradeCenter_SelectMon - dw TradeCenter_Trade - -CableClub_Run: - ld a, [wLinkState] - cp LINK_STATE_START_TRADE - jr z, .doBattleOrTrade - cp LINK_STATE_START_BATTLE - jr z, .doBattleOrTrade - cp LINK_STATE_RESET ; this is never used - ret nz - predef EmptyFunc3 - jp Init -.doBattleOrTrade - call CableClub_DoBattleOrTrade - ld hl, Club_GFX - ld a, h - ld [wTilesetGfxPtr + 1], a - ld a, l - ld [wTilesetGfxPtr], a - ld a, Bank(Club_GFX) - ld [wTilesetBank], a - ld hl, Club_Coll - ld a, h - ld [wTilesetCollisionPtr + 1], a - ld a, l - ld [wTilesetCollisionPtr], a - xor a - ld [wGrassRate], a - inc a ; LINK_STATE_IN_CABLE_CLUB - ld [wLinkState], a - ld [hJoy5], a - ld a, 10 - ld [wAudioFadeOutControl], a - ld a, BANK(Music_Celadon) - ld [wAudioSavedROMBank], a - ld a, MUSIC_CELADON - ld [wNewSoundID], a - jp PlaySound - -EmptyFunc3: - ret - -Diploma_TextBoxBorder: - call GetPredefRegisters - -; b = height -; c = width -CableClub_TextBoxBorder: - push hl - ld a, $78 ; border upper left corner tile - ld [hli], a - inc a ; border top horizontal line tile - call CableClub_DrawHorizontalLine - inc a ; border upper right corner tile - ld [hl], a - pop hl - ld de, 20 - add hl, de -.loop - push hl - ld a, $7b ; border left vertical line tile - ld [hli], a - ld a, " " - call CableClub_DrawHorizontalLine - ld [hl], $77 ; border right vertical line tile - pop hl - ld de, 20 - add hl, de - dec b - jr nz, .loop - ld a, $7c ; border lower left corner tile - ld [hli], a - ld a, $76 ; border bottom horizontal line tile - call CableClub_DrawHorizontalLine - ld [hl], $7d ; border lower right corner tile - ret - -; c = width -CableClub_DrawHorizontalLine: - ld d, c -.loop - ld [hli], a - dec d - jr nz, .loop - ret - -LoadTrainerInfoTextBoxTiles: - ld de, TrainerInfoTextBoxTileGraphics - ld hl, vChars2 + $760 - lb bc, BANK(TrainerInfoTextBoxTileGraphics), (TrainerInfoTextBoxTileGraphicsEnd - TrainerInfoTextBoxTileGraphics) / $10 - jp CopyVideoData |
