pokecrystal-board/engine/switch_items.asm

276 lines
4.0 KiB
NASM
Raw Normal View History

2015-12-13 11:15:16 -08:00
SwitchItemsInBag: ; 2490c (9:490c)
ld a, [wSwitchItem]
and a
jr z, .init
ld b, a
2015-12-17 14:51:32 -08:00
ld a, [wScrollingMenuCursorPosition]
2015-12-13 11:15:16 -08:00
inc a
cp b
jr z, .trivial
2015-12-17 14:51:32 -08:00
ld a, [wScrollingMenuCursorPosition]
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
ld a, [hl]
2015-12-23 11:00:29 -08:00
cp -1
2015-12-13 11:15:16 -08:00
ret z
ld a, [wSwitchItem]
dec a
ld [wSwitchItem], a
call Function249a7
jp c, Function249d1
2015-12-17 14:51:32 -08:00
ld a, [wScrollingMenuCursorPosition]
2015-12-13 11:15:16 -08:00
ld c, a
ld a, [wSwitchItem]
cp c
jr c, .asm_2497a
jr .asm_2494a
.init
2015-12-17 14:51:32 -08:00
ld a, [wScrollingMenuCursorPosition]
2015-12-13 11:15:16 -08:00
inc a
ld [wSwitchItem], a
ret
.trivial
xor a
ld [wSwitchItem], a
ret
.asm_2494a
ld a, [wSwitchItem]
call Function24a40
2015-12-17 14:51:32 -08:00
ld a, [wScrollingMenuCursorPosition]
2015-12-13 11:15:16 -08:00
ld d, a
ld a, [wSwitchItem]
ld e, a
call Function24a6c
push bc
ld a, [wSwitchItem]
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
dec hl
push hl
2015-12-23 11:00:29 -08:00
call ItemSwitch_ConvertSpacingToDW
2015-12-13 11:15:16 -08:00
add hl, bc
ld d, h
ld e, l
pop hl
pop bc
call Function24aab
2015-12-17 14:51:32 -08:00
ld a, [wScrollingMenuCursorPosition]
2015-12-13 11:15:16 -08:00
call Function24a4d
xor a
ld [wSwitchItem], a
ret
.asm_2497a
ld a, [wSwitchItem]
call Function24a40
2015-12-17 14:51:32 -08:00
ld a, [wScrollingMenuCursorPosition]
2015-12-13 11:15:16 -08:00
ld d, a
ld a, [wSwitchItem]
ld e, a
call Function24a6c
push bc
ld a, [wSwitchItem]
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
ld d, h
ld e, l
2015-12-23 11:00:29 -08:00
call ItemSwitch_ConvertSpacingToDW
2015-12-13 11:15:16 -08:00
add hl, bc
pop bc
call CopyBytes
2015-12-17 14:51:32 -08:00
ld a, [wScrollingMenuCursorPosition]
2015-12-13 11:15:16 -08:00
call Function24a4d
xor a
ld [wSwitchItem], a
ret
Function249a7: ; 249a7 (9:49a7)
ld a, [wSwitchItem]
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
ld d, h
ld e, l
2015-12-17 14:51:32 -08:00
ld a, [wScrollingMenuCursorPosition]
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
ld a, [de]
cp [hl]
jr nz, .asm_249cd
2015-12-17 14:51:32 -08:00
ld a, [wScrollingMenuCursorPosition]
2015-12-13 11:15:16 -08:00
call Function24a97
cp 99
jr z, .asm_249cd
ld a, [wSwitchItem]
call Function24a97
cp 99
jr nz, .asm_249cf
.asm_249cd
and a
ret
.asm_249cf
scf
ret
Function249d1: ; 249d1 (9:49d1)
ld a, [wSwitchItem]
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
inc hl
push hl
2015-12-17 14:51:32 -08:00
ld a, [wScrollingMenuCursorPosition]
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
inc hl
ld a, [hl]
pop hl
add [hl]
cp 100
jr c, .asm_24a01
sub 99
push af
2015-12-17 14:51:32 -08:00
ld a, [wScrollingMenuCursorPosition]
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
inc hl
ld [hl], 99
ld a, [wSwitchItem]
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
inc hl
pop af
ld [hl], a
xor a
ld [wSwitchItem], a
ret
.asm_24a01
push af
2015-12-17 14:51:32 -08:00
ld a, [wScrollingMenuCursorPosition]
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
inc hl
pop af
ld [hl], a
2015-12-17 19:31:16 -08:00
ld hl, wMenuData2_ItemsPointerAddr
2015-12-13 11:15:16 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wSwitchItem]
cp [hl]
jr nz, .asm_24a25
dec [hl]
ld a, [wSwitchItem]
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
ld [hl], $ff
xor a
ld [wSwitchItem], a
ret
.asm_24a25
dec [hl]
2015-12-23 11:00:29 -08:00
call ItemSwitch_ConvertSpacingToDW
2015-12-13 11:15:16 -08:00
push bc
ld a, [wSwitchItem]
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
pop bc
push hl
add hl, bc
pop de
.asm_24a34
ld a, [hli]
ld [de], a
inc de
cp $ff
jr nz, .asm_24a34
xor a
ld [wSwitchItem], a
ret
Function24a40: ; 24a40 (9:4a40)
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
ld de, wd002
2015-12-23 11:00:29 -08:00
call ItemSwitch_ConvertSpacingToDW
2015-12-13 11:15:16 -08:00
call CopyBytes
ret
Function24a4d: ; 24a4d (9:4a4d)
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
ld d, h
ld e, l
ld hl, wd002
2015-12-23 11:00:29 -08:00
call ItemSwitch_ConvertSpacingToDW
2015-12-13 11:15:16 -08:00
call CopyBytes
ret
2015-12-23 11:00:29 -08:00
ItemSwitch_GetNthItem: ; 24a5c (9:4a5c)
2015-12-13 11:15:16 -08:00
push af
2015-12-23 11:00:29 -08:00
call ItemSwitch_ConvertSpacingToDW
2015-12-17 19:31:16 -08:00
ld hl, wMenuData2_ItemsPointerAddr
2015-12-13 11:15:16 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
inc hl
pop af
call AddNTimes
ret
Function24a6c: ; 24a6c (9:4a6c)
push hl
2015-12-23 11:00:29 -08:00
call ItemSwitch_ConvertSpacingToDW
2015-12-13 11:15:16 -08:00
ld a, d
sub e
2015-12-23 11:00:29 -08:00
jr nc, .dont_negate
2015-12-13 11:15:16 -08:00
dec a
cpl
2015-12-23 11:00:29 -08:00
.dont_negate
2015-12-13 11:15:16 -08:00
ld hl, 0
call AddNTimes
ld b, h
ld c, l
pop hl
ret
2015-12-23 11:00:29 -08:00
ItemSwitch_ConvertSpacingToDW: ; 24a80 (9:4a80)
; This function is absolutely idiotic.
2015-12-13 11:15:16 -08:00
push hl
2015-12-23 11:00:29 -08:00
ld a, [wMenuData2_ScrollingMenuSpacing]
2015-12-13 11:15:16 -08:00
ld c, a
ld b, 0
2015-12-23 11:00:29 -08:00
ld hl, .spacing_dws
2015-12-13 11:15:16 -08:00
rept 2
add hl, bc
endr
ld c, [hl]
inc hl
ld b, [hl]
pop hl
ret
; 24a91 (9:4a91)
2015-12-23 11:00:29 -08:00
.spacing_dws: ; 24a91
2015-12-13 11:15:16 -08:00
dw 0, 1, 2
; 24a97
Function24a97: ; 24a97 (9:4a97)
push af
2015-12-23 11:00:29 -08:00
call ItemSwitch_ConvertSpacingToDW
2015-12-13 11:15:16 -08:00
ld a, c
2015-12-23 11:00:29 -08:00
cp 2
jr nz, .not_2
2015-12-13 11:15:16 -08:00
pop af
2015-12-23 11:00:29 -08:00
call ItemSwitch_GetNthItem
2015-12-13 11:15:16 -08:00
inc hl
ld a, [hl]
ret
2015-12-23 11:00:29 -08:00
.not_2
2015-12-13 11:15:16 -08:00
pop af
ld a, $1
ret
Function24aab: ; 24aab (9:4aab)
.loop
ld a, [hld]
ld [de], a
dec de
dec bc
ld a, b
or c
jr nz, .loop
ret