diff options
Diffstat (limited to 'engine/link/link_trade.asm')
-rw-r--r-- | engine/link/link_trade.asm | 339 |
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 |