summaryrefslogtreecommitdiff
path: root/engine/link/link_trade.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/link/link_trade.asm')
-rw-r--r--engine/link/link_trade.asm339
1 files changed, 339 insertions, 0 deletions
diff --git a/engine/link/link_trade.asm b/engine/link/link_trade.asm
new file mode 100644
index 000000000..a3c596bfe
--- /dev/null
+++ b/engine/link/link_trade.asm
@@ -0,0 +1,339 @@
+LinkCommsBorderGFX:
+INCBIN "gfx/trade/border_tiles.2bpp"
+
+__LoadTradeScreenBorder:
+ ld de, LinkCommsBorderGFX
+ ld hl, vTiles2
+ lb bc, BANK(LinkCommsBorderGFX), 70
+ call Get2bpp
+ ret
+
+Function16d42e:
+ ld hl, Tilemap_MobileTradeBorderFullscreen
+ decoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ call CopyBytes
+ ret
+
+Function16d43b:
+ call LoadStandardMenuHeader
+ call ClearBGPalettes
+ call ClearTileMap
+ call ClearSprites
+ farcall __LoadTradeScreenBorder ; useless to farcall
+ farcall Function16d42e ; useless to farcall
+ ld b, SCGB_DIPLOMA
+ call GetSGBLayout
+ call SetPalettes
+ call WaitBGMap
+ call JoyWaitAorB
+ call Call_ExitMenu
+ ret
+
+Tilemap_MobileTradeBorderFullscreen:
+INCBIN "gfx/trade/border_mobile_fullscreen.tilemap"
+
+Tilemap_CableTradeBorderTop:
+INCBIN "gfx/trade/border_cable_top.tilemap"
+
+Tilemap_CableTradeBorderBottom:
+INCBIN "gfx/trade/border_cable_bottom.tilemap"
+
+_LinkTextbox:
+ ld h, d
+ ld l, e
+ push bc
+ push hl
+ call .PlaceBorder
+ pop hl
+ pop bc
+
+ ld de, wAttrMap - wTileMap
+ add hl, de
+ inc b
+ inc b
+ inc c
+ inc c
+ ld a, PAL_BG_TEXT
+.row
+ push bc
+ push hl
+.col
+ ld [hli], a
+ dec c
+ jr nz, .col
+ pop hl
+ ld de, SCREEN_WIDTH
+ add hl, de
+ pop bc
+ dec b
+ jr nz, .row
+ ret
+
+.PlaceBorder
+ push hl
+ ld a, $30
+ ld [hli], a
+ inc a
+ call .PlaceRow
+ inc a
+ ld [hl], a
+ pop hl
+ ld de, SCREEN_WIDTH
+ add hl, de
+.loop
+ push hl
+ ld a, $33
+ ld [hli], a
+ ld a, " "
+ call .PlaceRow
+ ld [hl], $34
+ pop hl
+ ld de, SCREEN_WIDTH
+ add hl, de
+ dec b
+ jr nz, .loop
+
+ ld a, $35
+ ld [hli], a
+ ld a, $36
+ call .PlaceRow
+ ld [hl], $37
+ ret
+
+.PlaceRow
+ ld d, c
+.row_loop
+ ld [hli], a
+ dec d
+ jr nz, .row_loop
+ ret
+
+InitTradeSpeciesList:
+ call _LoadTradeScreenBorder
+ call Function16d6ae
+ farcall InitMG_Mobile_LinkTradePalMap
+ farcall PlaceTradePartnerNamesAndParty
+ hlcoord 10, 17
+ ld de, .CANCEL
+ call PlaceString
+ ret
+
+.CANCEL:
+ db "CANCEL@"
+
+_LoadTradeScreenBorder:
+ call __LoadTradeScreenBorder
+ ret
+
+LinkComms_LoadPleaseWaitTextboxBorderGFX:
+ ld de, LinkCommsBorderGFX + $30 tiles
+ ld hl, vTiles2 tile $76
+ lb bc, BANK(LinkCommsBorderGFX), 8
+ call Get2bpp
+ ret
+
+LoadTradeRoomBGPals_:
+ farcall LoadTradeRoomBGPals
+ ret
+
+Function16d6ae:
+ call Function16d42e
+ ld hl, Tilemap_CableTradeBorderTop
+ decoord 0, 0
+ ld bc, 2 * SCREEN_WIDTH
+ call CopyBytes
+ ld hl, Tilemap_CableTradeBorderBottom
+ decoord 0, 16
+ ld bc, 2 * SCREEN_WIDTH
+ call CopyBytes
+ ret
+
+LinkTextbox:
+ call _LinkTextbox
+ ret
+
+Function16d6ce:
+ call LoadStandardMenuHeader
+ call Function16d6e1
+ farcall WaitLinkTransfer
+ call Call_ExitMenu
+ call WaitBGMap2
+ ret
+
+Function16d6e1:
+ hlcoord 4, 10
+ ld b, 1
+ ld c, 10
+ predef LinkTextboxAtHL
+ hlcoord 5, 11
+ ld de, .Waiting
+ call PlaceString
+ call WaitBGMap
+ call WaitBGMap2
+ ld c, 50
+ jp DelayFrames
+
+.Waiting:
+ db "WAITING..!@"
+
+LinkTradeMenu:
+ call .MenuAction
+ call .GetJoypad
+ ret
+
+.GetJoypad:
+ push bc
+ push af
+ ld a, [hJoyLast]
+ and D_PAD
+ ld b, a
+ ld a, [hJoyPressed]
+ and BUTTONS
+ or b
+ ld b, a
+ pop af
+ ld a, b
+ pop bc
+ ld d, a
+ ret
+
+.MenuAction:
+ ld hl, w2DMenuFlags2
+ res 7, [hl]
+ ld a, [hBGMapMode]
+ push af
+ call .loop
+ pop af
+ ld [hBGMapMode], a
+ ret
+
+.loop
+ call .UpdateCursor
+ call .UpdateBGMapAndOAM
+ call .loop2
+ jr nc, .done
+ farcall _2DMenuInterpretJoypad
+ jr c, .done
+ ld a, [w2DMenuFlags1]
+ bit 7, a
+ jr nz, .done
+ call .GetJoypad
+ ld b, a
+ ld a, [wMenuJoypadFilter]
+ and b
+ jr z, .loop
+
+.done
+ ret
+
+.UpdateBGMapAndOAM:
+ ld a, [hOAMUpdate]
+ push af
+ ld a, $1
+ ld [hOAMUpdate], a
+ call WaitBGMap
+ pop af
+ ld [hOAMUpdate], a
+ xor a
+ ld [hBGMapMode], a
+ ret
+
+.loop2
+ call RTC
+ call .TryAnims
+ ret c
+ ld a, [w2DMenuFlags1]
+ bit 7, a
+ jr z, .loop2
+ and a
+ ret
+
+.UpdateCursor:
+ ld hl, wCursorCurrentTile
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [hl]
+ cp $1f
+ jr nz, .not_currently_selected
+ ld a, [wCursorOffCharacter]
+ ld [hl], a
+ push hl
+ push bc
+ ld bc, MON_NAME_LENGTH
+ add hl, bc
+ ld [hl], a
+ pop bc
+ pop hl
+
+.not_currently_selected
+ ld a, [w2DMenuCursorInitY]
+ ld b, a
+ ld a, [w2DMenuCursorInitX]
+ ld c, a
+ call Coord2Tile
+ ld a, [w2DMenuCursorOffsets]
+ swap a
+ and $f
+ ld c, a
+ ld a, [wMenuCursorY]
+ ld b, a
+ xor a
+ dec b
+ jr z, .skip
+.loop3
+ add c
+ dec b
+ jr nz, .loop3
+
+.skip
+ ld c, SCREEN_WIDTH
+ call AddNTimes
+ ld a, [w2DMenuCursorOffsets]
+ and $f
+ ld c, a
+ ld a, [wMenuCursorX]
+ ld b, a
+ xor a
+ dec b
+ jr z, .skip2
+.loop4
+ add c
+ dec b
+ jr nz, .loop4
+
+.skip2
+ ld c, a
+ add hl, bc
+ ld a, [hl]
+ cp $1f
+ jr z, .cursor_already_there
+ ld [wCursorOffCharacter], a
+ ld [hl], $1f
+ push hl
+ push bc
+ ld bc, MON_NAME_LENGTH
+ add hl, bc
+ ld [hl], $1f
+ pop bc
+ pop hl
+.cursor_already_there
+ ld a, l
+ ld [wCursorCurrentTile], a
+ ld a, h
+ ld [wCursorCurrentTile + 1], a
+ ret
+
+.TryAnims:
+ ld a, [w2DMenuFlags1]
+ bit 6, a
+ jr z, .skip_anims
+ farcall PlaySpriteAnimationsAndDelayFrame
+.skip_anims
+ call JoyTextDelay
+ call .GetJoypad
+ and a
+ ret z
+ scf
+ ret