pokecrystal-board/engine/pokemon/switchpartymons.asm

146 lines
2.3 KiB
NASM
Raw Normal View History

_SwitchPartyMons:
2018-07-28 22:27:33 -07:00
ld a, [wSwitchMon]
dec a
2020-11-03 16:53:07 -08:00
ld [wSwitchMonFrom], a
ld b, a
ld a, [wMenuCursorY]
dec a
2020-11-03 16:53:07 -08:00
ld [wSwitchMonTo], a
cp b
jr z, .skip
call .SwapMonAndMail
2020-11-03 16:53:07 -08:00
ld a, [wSwitchMonFrom]
call .ClearSprite
2020-11-03 16:53:07 -08:00
ld a, [wSwitchMonTo]
call .ClearSprite
.skip
ret
2018-06-24 07:09:41 -07:00
.ClearSprite:
push af
hlcoord 0, 1
ld bc, 2 * SCREEN_WIDTH
call AddNTimes
ld bc, 2 * SCREEN_WIDTH
ld a, " "
call ByteFill
pop af
2018-01-30 11:52:46 -08:00
ld hl, wVirtualOAMSprite00
2018-01-10 10:47:57 -08:00
ld bc, 4 * SPRITEOAMSTRUCT_LENGTH
call AddNTimes
2018-01-10 10:47:57 -08:00
ld de, SPRITEOAMSTRUCT_LENGTH
ld c, 4
.gfx_loop
2018-01-10 10:47:57 -08:00
ld [hl], SCREEN_WIDTH_PX ; y (off-screen)
add hl, de
dec c
jr nz, .gfx_loop
ld de, SFX_SWITCH_POKEMON
call WaitPlaySFX
ret
2018-06-24 07:09:41 -07:00
.SwapMonAndMail:
push hl
push de
push bc
2018-01-23 14:39:09 -08:00
ld bc, wPartySpecies
2020-11-03 16:53:07 -08:00
ld a, [wSwitchMonTo]
ld l, a
ld h, 0
add hl, bc
ld d, h
ld e, l
2020-11-03 16:53:07 -08:00
ld a, [wSwitchMonFrom]
ld l, a
ld h, 0
add hl, bc
ld a, [hl]
push af
ld a, [de]
ld [hl], a
pop af
ld [de], a
2020-11-03 16:53:07 -08:00
ld a, [wSwitchMonTo]
2018-01-23 14:39:09 -08:00
ld hl, wPartyMon1Species
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
push hl
ld de, wSwitchMonBuffer
ld bc, PARTYMON_STRUCT_LENGTH
call CopyBytes
2020-11-03 16:53:07 -08:00
ld a, [wSwitchMonFrom]
2018-01-23 14:39:09 -08:00
ld hl, wPartyMon1
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
pop de
push hl
ld bc, PARTYMON_STRUCT_LENGTH
call CopyBytes
pop de
ld hl, wSwitchMonBuffer
ld bc, PARTYMON_STRUCT_LENGTH
call CopyBytes
2020-11-03 16:53:07 -08:00
ld a, [wSwitchMonTo]
ld hl, wPartyMonOTs
call SkipNames
push hl
call .CopyNameToSwitchMonBuffer
2020-11-03 16:53:07 -08:00
ld a, [wSwitchMonFrom]
ld hl, wPartyMonOTs
call SkipNames
pop de
push hl
call .CopyName
pop de
ld hl, wSwitchMonBuffer
call .CopyName
2018-01-23 14:39:09 -08:00
ld hl, wPartyMonNicknames
2020-11-03 16:53:07 -08:00
ld a, [wSwitchMonTo]
call SkipNames
push hl
call .CopyNameToSwitchMonBuffer
2018-01-23 14:39:09 -08:00
ld hl, wPartyMonNicknames
2020-11-03 16:53:07 -08:00
ld a, [wSwitchMonFrom]
call SkipNames
pop de
push hl
call .CopyName
pop de
ld hl, wSwitchMonBuffer
call .CopyName
ld hl, sPartyMail
2020-11-03 16:53:07 -08:00
ld a, [wSwitchMonTo]
ld bc, MAIL_STRUCT_LENGTH
call AddNTimes
push hl
ld de, wSwitchMonBuffer
ld bc, MAIL_STRUCT_LENGTH
ld a, BANK(sPartyMail)
call OpenSRAM
call CopyBytes
ld hl, sPartyMail
2020-11-03 16:53:07 -08:00
ld a, [wSwitchMonFrom]
ld bc, MAIL_STRUCT_LENGTH
call AddNTimes
pop de
push hl
ld bc, MAIL_STRUCT_LENGTH
call CopyBytes
pop de
ld hl, wSwitchMonBuffer
ld bc, MAIL_STRUCT_LENGTH
call CopyBytes
call CloseSRAM
pop bc
pop de
pop hl
ret
.CopyNameToSwitchMonBuffer:
ld de, wSwitchMonBuffer
2018-06-24 07:09:41 -07:00
.CopyName:
ld bc, NAME_LENGTH
call CopyBytes
ret