Files
poketcg2/src/engine/bank07.asm
T
2024-02-02 17:11:01 +00:00

2591 lines
36 KiB
NASM

; prints decimal digit in a
; to coordinates de
PrintDigit:
push af
push bc
push de
push hl
add SYM_0
ld b, d ; x
ld c, e ; y
call WriteByteToBGMap0
pop hl
pop de
pop bc
pop af
ret
; hl = 16-bit input value
; de = coordinates
; b = FALSE: left-padded with zeroes
; TRUE: left-padded with empty spaces
; a = identation
PrintNumber:
ld c, a
push de
ld de, wDecimalRepresentation
call .CalculateDecimalDigits
pop de
ld a, d
add c
ld d, a
ld hl, wDecimalRepresentation + $4
.loop_digits
ld a, [hld]
cp $ff
jr nz, .print
dec d
push af
push bc
push de
push hl
ld b, d ; x
ld c, e ; y
ld a, SYM_SPACE
call WriteByteToBGMap0
pop hl
pop de
pop bc
pop af
jr .next_digit
.print
dec d
call PrintDigit
.next_digit
dec c
jr nz, .loop_digits
ret
.CalculateDecimalDigits:
push af
push bc
push de
push hl
push bc
push de
ld bc, -10000
call .GetDigit ; ten-thousands digit
ld bc, -1000
call .GetDigit ; thousands digit
ld bc, -100
call .GetDigit ; hundreds digit
ld bc, -10
call .GetDigit ; tens digit
ld bc, -1
call .GetDigit ; ones digit
pop de
pop bc
ld a, b
and a
jr z, .done
; left pad with $ff
ld c, 4
.loop_pad
ld a, [de]
and a
jr nz, .done
ld a, $ff
ld [de], a
inc de
dec c
jr nz, .loop_pad
.done
pop hl
pop de
pop bc
pop af
ret
.GetDigit:
ld a, -1
.loop
inc a
add hl, bc
jr c, .loop
push af
ld a, l
sub c
ld l, a
ld a, h
sbc b
ld h, a
pop af
ld [de], a
inc de
ret
Func_1c08b::
push af
push bc
push de
push hl
xor a
call BankswitchVRAM
ld a, c ; unused
ld hl, v0Tiles1
add hl, bc
inc d
.loop_tiles
ld c, TILE_SIZE / 2
.loop_inner
di
call WaitForLCDOff
ld a, $ff
ld [hli], a
inc hl
ei
dec c
jr nz, .loop_inner
dec e
jr nz, .loop_tiles
dec d
jr nz, .loop_tiles
pop hl
pop de
pop bc
pop af
ret
; 0x1c0b2
SECTION "Bank 7@40ec", ROMX[$40ec], BANK[$7]
Func_1c0ec::
push bc
push de
push hl
ld a, EVENT_PLAYER_GENDER
farcall GetEventValue
jr nz, .female
; male
ld a, $00
jr .asm_1c0fd
.female
ld a, $01
.asm_1c0fd
pop hl
pop de
pop bc
ret
; converts a into PORTRAIT_* constant
Func_1c101::
push bc
push hl
ld c, a
ld b, $00
ld hl, .PortraitIDs
add hl, bc
ld a, [hl]
pop hl
pop bc
ret
.PortraitIDs
db PORTRAIT_00 ; $00
db PORTRAIT_01 ; $01
db PORTRAIT_02 ; $02
db PORTRAIT_03 ; $03
db PORTRAIT_04 ; $04
db PORTRAIT_05 ; $05
db PORTRAIT_06 ; $06
db PORTRAIT_07 ; $07
db PORTRAIT_5E ; $08
db PORTRAIT_5F ; $09
db PORTRAIT_08 ; $0a
db PORTRAIT_09 ; $0b
db PORTRAIT_0A ; $0c
db PORTRAIT_0B ; $0d
db PORTRAIT_0C ; $0e
db PORTRAIT_0D ; $0f
db PORTRAIT_0E ; $10
db PORTRAIT_0F ; $11
db PORTRAIT_10 ; $12
db PORTRAIT_11 ; $13
db PORTRAIT_12 ; $14
db PORTRAIT_13 ; $15
db PORTRAIT_14 ; $16
db PORTRAIT_15 ; $17
db PORTRAIT_16 ; $18
db PORTRAIT_17 ; $19
db PORTRAIT_18 ; $1a
db PORTRAIT_19 ; $1b
db PORTRAIT_1A ; $1c
db PORTRAIT_1B ; $1d
db PORTRAIT_1C ; $1e
db PORTRAIT_1D ; $1f
db PORTRAIT_1E ; $20
db PORTRAIT_1F ; $21
db PORTRAIT_20 ; $22
db PORTRAIT_21 ; $23
db PORTRAIT_22 ; $24
db PORTRAIT_23 ; $25
db PORTRAIT_24 ; $26
db PORTRAIT_25 ; $27
db PORTRAIT_26 ; $28
db PORTRAIT_27 ; $29
db PORTRAIT_28 ; $2a
db PORTRAIT_29 ; $2b
db PORTRAIT_2A ; $2c
db PORTRAIT_2B ; $2d
db PORTRAIT_2C ; $2e
db PORTRAIT_2D ; $2f
db PORTRAIT_2E ; $30
db PORTRAIT_2F ; $31
db PORTRAIT_30 ; $32
db PORTRAIT_31 ; $33
db PORTRAIT_32 ; $34
db PORTRAIT_33 ; $35
db PORTRAIT_34 ; $36
db PORTRAIT_35 ; $37
db PORTRAIT_36 ; $38
db PORTRAIT_37 ; $39
db PORTRAIT_38 ; $3a
db PORTRAIT_39 ; $3b
db PORTRAIT_3A ; $3c
db PORTRAIT_3B ; $3d
db PORTRAIT_3C ; $3e
db PORTRAIT_3D ; $3f
db PORTRAIT_3E ; $40
db PORTRAIT_3F ; $41
db PORTRAIT_40 ; $42
db PORTRAIT_41 ; $43
db PORTRAIT_42 ; $44
db PORTRAIT_43 ; $45
db PORTRAIT_44 ; $46
db PORTRAIT_45 ; $47
db PORTRAIT_46 ; $48
db PORTRAIT_47 ; $49
db PORTRAIT_48 ; $4a
db PORTRAIT_49 ; $4b
db PORTRAIT_4A ; $4c
db PORTRAIT_4B ; $4d
db PORTRAIT_4C ; $4e
db PORTRAIT_4D ; $4f
db PORTRAIT_4E ; $50
db PORTRAIT_4F ; $51
db PORTRAIT_50 ; $52
db PORTRAIT_51 ; $53
db PORTRAIT_52 ; $54
db PORTRAIT_53 ; $55
db PORTRAIT_54 ; $56
db PORTRAIT_55 ; $57
db PORTRAIT_56 ; $58
db PORTRAIT_57 ; $59
db PORTRAIT_58 ; $5a
db PORTRAIT_59 ; $5b
db PORTRAIT_5A ; $5c
db PORTRAIT_5B ; $5d
db PORTRAIT_5C ; $5e
db PORTRAIT_5D ; $5f
; 0x1c116
SECTION "Bank 7@4395", ROMX[$4395], BANK[$7]
Func_1c395:
call EnableSRAM
call Func_1c3a8
call Func_1c3b9
call Func_1c3c7
call Func_1c3ce
call DisableSRAM
ret
Func_1c3a8:
ld a, [sTextSpeed]
ld [wTextSpeed], a
call Func_1c448
ld b, a
ld a, $04
sub b
ld [wd9d5], a
ret
Func_1c3b9:
ld a, [s0a007]
ld [wd9d3], a
srl a
and $01
ld [wdc0f], a
ret
Func_1c3c7:
ld a, [s0a00b]
ld [wd9d4], a
ret
Func_1c3ce:
ld a, [sTextBoxFrameColor]
ld [wTextBoxFrameColor], a
ret
Func_1c3d5:
call EnableSRAM
call Func_1c3e8
call Func_1c3f9
call Func_1c417
call SaveTextBoxFrameColor
call DisableSRAM
ret
Func_1c3e8:
ld a, [wd9d5]
ld b, a
ld a, $04
sub b
call Func_1c438
ld [sTextSpeed], a
ld [wTextSpeed], a
ret
Func_1c3f9:
ld a, [wd9d3]
ld [s0a007], a
push af
srl a
and $01
ld [wdc0f], a
pop af
ld c, a
ld b, $00
ld hl, .data
add hl, bc
ld a, [hl]
ld [s0a009], a
ret
.data
db $00, $01, $01
Func_1c417:
ld a, [wd9d4]
ld [s0a00b], a
ret
SaveTextBoxFrameColor:
ld a, [wTextBoxFrameColor]
ld [sTextBoxFrameColor], a
ret
Func_1c425:
ld a, $02
ld [wd9d5], a
xor a
ld [wd9d4], a
ld [wd9d3], a
ld [wTextBoxFrameColor], a
ld [wd9d0], a
ret
Func_1c438:
push bc
ld c, a
ld b, $00
ld hl, .data
add hl, bc
ld a, [hl]
pop bc
ret
.data
db $00, $01, $02, $04, $06
Func_1c448:
push bc
ld c, a
ld b, $00
ld hl, .data
add hl, bc
ld a, [hl]
pop bc
ret
.data
db $00, $01, $02
; 0x1c456
SECTION "Bank 7@46bb", ROMX[$46bb], BANK[$7]
SetAllPaletteFadeConfigsToEnabled:
call SetAllBGPaletteFadeConfigsToEnabled
call SetAllOBPaletteFadeConfigsToEnabled
ret
FadePalettes::
push af
push bc
push de
push hl
ld a, [wPaletteFadeMode]
and a
jr z, .done
ld a, [wPaletteFadeSpeedMask]
ld b, a
ld a, [wVBlankCounter]
and b
jr nz, .done
ld a, [wPaletteFadeMode]
dec a
jr nz, .asm_1c6e1
; wPaletteFadeMode == 1
call Func_1c7b6
jr .decrement_counter
.asm_1c6e1
; wPaletteFadeMode != 1
call Func_1c799
.decrement_counter
ld hl, wPaletteFadeCounter
ld a, [hl]
and a
jr z, .done
ld a, [hl] ; unnecessary
dec a
ld [hl], a
jr nz, .done
xor a
ld [wPaletteFadeMode], a
.done
pop hl
pop de
pop bc
pop af
ret
FadeBGPalsToWhiteOrBlack:
ld bc, wBGColorFadeConfigList
ld hl, wBackgroundPalettesCGB
ld a, (NUM_BACKGROUND_PALETTES palettes) / 2
.loop_colors
push af
ld e, [hl]
inc hl
ld d, [hl]
dec hl
ld a, [bc]
or a
jr nz, .skip_color
call FadeColorToBlackOrWhite
.skip_color
ld [hl], e
inc hl
ld [hl], d
inc hl
pop af
inc bc
dec a
jr nz, .loop_colors
ret
FadeOBPalsToWhiteOrBlack:
ld bc, wOBColorFadeConfigList
ld hl, wObjectPalettesCGB
ld a, (NUM_OBJECT_PALETTES palettes) / 2
.asm_1c71f
push af
ld e, [hl]
inc hl
ld d, [hl]
dec hl
ld a, [bc]
or a
jr nz, .asm_1c72b
call FadeColorToBlackOrWhite
.asm_1c72b
ld [hl], e
inc hl
ld [hl], d
inc hl
pop af
inc bc
dec a
jr nz, .asm_1c71f
ret
Func_1c735:
ld bc, wBGColorFadeConfigList
ld hl, wTargetBGPalettes
ld de, wBackgroundPalettesCGB
ld a, (NUM_BACKGROUND_PALETTES palettes) / 2
.asm_1c740
push af
push hl
push de
push bc
ld a, [de]
ld b, a
inc de
ld a, [de]
ld d, a
ld e, b
pop bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [bc]
or a
jr nz, .asm_1c755
call FadeColorToTarget
.asm_1c755
ld h, d
ld l, e
pop de
ld a, l
ld [de], a
inc de
ld a, h
ld [de], a
inc de
pop hl
inc hl
inc hl
pop af
inc bc
dec a
jr nz, .asm_1c740
ret
Func_1c767:
ld bc, wOBColorFadeConfigList
ld hl, wTargetOBPalettes
ld de, wObjectPalettesCGB
ld a, (NUM_OBJECT_PALETTES palettes) / 2
.asm_1c772
push af
push hl
push de
push bc
ld a, [de]
ld b, a
inc de
ld a, [de]
ld d, a
ld e, b
pop bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [bc]
or a
jr nz, .asm_1c787
call FadeColorToTarget
.asm_1c787
ld h, d
ld l, e
pop de
ld a, l
ld [de], a
inc de
ld a, h
ld [de], a
inc de
pop hl
inc hl
inc hl
pop af
inc bc
dec a
jr nz, .asm_1c772
ret
Func_1c799:
ld hl, wPaletteFadeFlags
bit 0, [hl]
jr z, .asm_1c7a3
call FadeBGPalsToWhiteOrBlack
.asm_1c7a3
ld hl, wPaletteFadeFlags
bit 7, [hl]
jr z, .asm_1c7ad
call FadeOBPalsToWhiteOrBlack
.asm_1c7ad
call FlushAllPalettes
ld a, $02
ld [wd9de], a
ret
Func_1c7b6:
ld hl, wPaletteFadeFlags
bit 0, [hl]
jr z, .asm_1c7c0
call Func_1c735
.asm_1c7c0
ld hl, wPaletteFadeFlags
bit 7, [hl]
jr z, .asm_1c7ca
call Func_1c767
.asm_1c7ca
call FlushAllPalettes
ld a, $01
ld [wd9de], a
ret
; de = 15-bit palette colors
FadeColorToBlackOrWhite:
push af
push bc
push hl
; blue
ld a, d
and $7c
srl a
srl a
call .FadeColor
sla a
sla a
and $7c
ld b, a
; green
ld a, d
and $03
or b
ld d, a
ld a, e
and $1f
call .FadeColor
and $1f
ld b, a
ld a, e
and $e0
or b
ld e, a
ld a, d
and $03
sla a
sla a
sla a
ld b, a
; red
ld a, e
and $e0
swap a
srl a
or b
call .FadeColor
ld c, a
srl a
srl a
srl a
and $03
ld b, a
ld a, d
and $fc
or b
ld d, a
ld a, c
swap a
sla a
and $e0
ld b, a
ld a, e
and $1f
or b
ld e, a
pop hl
pop bc
pop af
ret
.FadeColor:
push hl
ld hl, wPalFadeDirection
bit 0, [hl]
pop hl
jr nz, .decr_color
; incr color
REPT 4
ld b, a
cp $1f
ld a, b
ret z
inc a
ENDR
ret
.decr_color
and a
REPT 4
ret z
dec a
ENDR
ret
; hl = 15-bit palette colors (target)
; de = 15-bit palette colors (source)
FadeColorToTarget:
push af
push bc
push hl
; blue
ld a, h
and $7c
srl a
srl a
ld c, a
ld a, d
and $7c
srl a
srl a
call .FadeColor
sla a
sla a
and $7c
ld b, a
; green
ld a, d
and $03
or b
ld d, a
ld a, l
and $1f
ld c, a
ld a, e
and $1f
call .FadeColor
and $1f
ld b, a
ld a, e
and $e0
or b
ld e, a
ld a, h
and $03
sla a
sla a
sla a
ld b, a
; red
ld a, l
and $e0
swap a
srl a
or b
ld c, a
ld a, d
and $03
sla a
sla a
sla a
ld b, a
ld a, e
and $e0
swap a
srl a
or b
call .FadeColor
ld c, a
srl a
srl a
srl a
and $03
ld b, a
ld a, d
and $fc
or b
ld d, a
ld a, c
swap a
sla a
and $e0
ld b, a
ld a, e
and $1f
or b
ld e, a
pop hl
pop bc
pop af
ret
.FadeColor:
push hl
ld hl, wPalFadeDirection
bit 0, [hl]
pop hl
jr nz, .incr_color
; decr color
REPT 4
ld b, a
cp c
ld a, b
ret z
dec a
ENDR
ret
.incr_color
REPT 2
ld b, a
cp c
ld a, b
ret z
inc a
ld b, a
cp c
ld a, b
ret nc
inc a
ENDR
ret
; b = mask used on VBlankCounter
; for deciding when to fade color
; if a = 0, fade from white
; if a = 1, fade from black
StartPalFadeFromBlackOrWhite::
push af
ld [wPalFadeDirection], a
ld a, b
ld [wPaletteFadeSpeedMask], a
pop af
and a
ld a, $ff ; white
jr z, .got_fill_color
ld a, $00 ; black
.got_fill_color
call InitFadePalettes
ld a, $01
ld [wPaletteFadeMode], a
ld a, 8
ld [wPaletteFadeCounter], a
ret
; b = mask used on VBlankCounter
; for deciding when to fade color
; if a = 0, fade to white
; if a = 1, fade to black
StartPalFadeToBlackOrWhite:
ld [wPalFadeDirection], a
ld a, b
ld [wPaletteFadeSpeedMask], a
call SaveTargetFadePals
ld a, $02
ld [wPaletteFadeMode], a
ld a, 8
ld [wPaletteFadeCounter], a
ret
; 0x1c93c
SECTION "Bank 7@493c", ROMX[$493c], BANK[$7]
; returns nz if palettes are still fading
CheckPalFading::
ld a, [wPaletteFadeMode]
and a
ret
; 0x1c941
SECTION "Bank 7@494a", ROMX[$494a], BANK[$7]
; fills the pals with fade enabled
; with color in a
; a = $00 for black
; $ff for white
InitFadePalettes:
push af
push bc
push de
push hl
ld e, a
ld hl, wPaletteFadeFlags
bit 0, [hl]
jr z, .asm_1c96d
ld bc, wBGColorFadeConfigList
ld hl, wBackgroundPalettesCGB
ld d, (NUM_BACKGROUND_PALETTES palettes) / 2
.loop_1
ld a, [bc]
or a
jr nz, .asm_1c967
push hl
ld [hl], e
inc hl
ld [hl], e
pop hl
.asm_1c967
inc hl
inc hl
inc bc
dec d
jr nz, .loop_1
.asm_1c96d
ld hl, wPaletteFadeFlags
bit 7, [hl]
jr z, .asm_1c98b
ld bc, wOBColorFadeConfigList
ld hl, wObjectPalettesCGB
ld d, (NUM_OBJECT_PALETTES palettes) / 2
.loop_2
ld a, [bc]
or a
jr nz, .skip_2
push hl
ld [hl], e
inc hl
ld [hl], e
pop hl
.skip_2
inc hl
inc hl
inc bc
dec d
jr nz, .loop_2
.asm_1c98b
pop hl
pop de
pop bc
pop af
ret
; saves the current palettes in
; wBackgroundPalettesCGB/wObjectPalettesCGB
; to wTargetBGPalettes/wTargetOBPalettes
SaveTargetFadePals::
push af
push bc
push de
push hl
ld hl, wPaletteFadeFlags
bit 0, [hl]
jr z, .obpals
ld bc, wBGColorFadeConfigList
ld de, wTargetBGPalettes
ld hl, wBackgroundPalettesCGB
ld a, (NUM_BACKGROUND_PALETTES palettes) / 2
.loop_1
push af
ld a, [bc]
or a
jr nz, .skip_1
ld a, [hli]
ld [de], a
inc de
ld a, [hld]
ld [de], a
dec de
.skip_1
inc de
inc de
inc hl
inc hl
inc bc
pop af
dec a
jr nz, .loop_1
.obpals
ld hl, wPaletteFadeFlags
bit 7, [hl]
jr z, .done
ld bc, wOBColorFadeConfigList
ld de, wTargetOBPalettes
ld hl, wObjectPalettesCGB
ld a, (NUM_OBJECT_PALETTES palettes) / 2
.loop_2
push af
ld a, [bc]
or a
jr nz, .skip_2
ld a, [hli]
ld [de], a
inc de
ld a, [hld]
ld [de], a
dec de
.skip_2
inc de
inc de
inc hl
inc hl
inc bc
pop af
dec a
jr nz, .loop_2
.done
pop hl
pop de
pop bc
pop af
ret
WaitPalFading_Bank07:
push af
.loop_wait
call DoFrame
call CheckPalFading
jr nz, .loop_wait
pop af
ret
StartFadeToWhite:
push af
push bc
xor a
ld b, $00
call StartPalFadeToBlackOrWhite
pop bc
pop af
ret
StartFadeFromWhite:
call SaveTargetFadePals
push af
push bc
xor a
ld b, $00
call StartPalFadeFromBlackOrWhite
pop bc
pop af
ret
; 0x1ca09
SECTION "Bank 7@4a21", ROMX[$4a21], BANK[$7]
EnableBGPFading:
push hl
ld hl, wPaletteFadeFlags
set 0, [hl]
pop hl
ret
; 0x1ca29
SECTION "Bank 7@4a31", ROMX[$4a31], BANK[$7]
EnableOBPFading:
push hl
ld hl, wPaletteFadeFlags
set 7, [hl]
pop hl
ret
DisableOBPFading:
push hl
ld hl, wPaletteFadeFlags
res 7, [hl]
pop hl
ret
SetPaletteFadeConfigToEnabled:
push af
push bc
push de
push hl
add a
add a
ld c, a
ld b, $00
ld hl, wBGColorFadeConfigList
add hl, bc
xor a ; enable fading
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
pop hl
pop de
pop bc
pop af
ret
SetBGPaletteFadeConfigToDisabled:
push af
push bc
push de
push hl
add a
add a
ld c, a
ld b, $00
ld hl, wBGColorFadeConfigList
add hl, bc
ld a, $ff ; disable fading
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
pop hl
pop de
pop bc
pop af
ret
SetOBPaletteFadeConfigToEnabled:
push af
push bc
push de
push hl
add a
add a
ld c, a
ld b, $00
ld hl, wOBColorFadeConfigList
add hl, bc
xor a ; enable fading
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
pop hl
pop de
pop bc
pop af
ret
SetOBPaletteFadeConfigToDisabled:
push af
push bc
push de
push hl
add a
add a
ld c, a
ld b, $00
ld hl, wOBColorFadeConfigList
add hl, bc
ld a, $ff ; disable fading
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
pop hl
pop de
pop bc
pop af
ret
SetAllBGPaletteFadeConfigsToEnabled:
push af
xor a
.loop_pals
call SetPaletteFadeConfigToEnabled
inc a
cp NUM_BACKGROUND_PALETTES
jr c, .loop_pals
pop af
ret
SetAllBGPaletteFadeConfigsToDisabled:
push af
xor a
.loop_pals
call SetBGPaletteFadeConfigToDisabled
inc a
cp NUM_BACKGROUND_PALETTES
jr c, .loop_pals
pop af
ret
SetAllOBPaletteFadeConfigsToEnabled:
push af
xor a
.loop_pals
call SetOBPaletteFadeConfigToEnabled
inc a
cp NUM_OBJECT_PALETTES
jr c, .loop_pals
pop af
ret
; 0x1cac3
SECTION "Bank 7@4acf", ROMX[$4acf], BANK[$7]
Func_1cacf:
push af
push bc
push de
ld a, [wMenuBoxX]
ld d, a
ld a, [wMenuBoxY]
ld e, a
ld a, [wMenuBoxWidth]
ld b, a
ld a, [wMenuBoxHeight]
ld c, a
farcall Func_10abf
call DoFrame
farcall Func_10342
pop de
pop bc
pop af
ret
Func_1caf1:
push af
push bc
push de
farcall Func_103b6
farcall Func_10b18
pop de
pop bc
pop af
ret
; a = default cursor position
DrawMenuBox:
push af
push bc
push de
push hl
push af
ld a, [wMenuBoxX]
ld d, a
ld a, [wMenuBoxY]
ld e, a
ld a, [wMenuBoxWidth]
ld b, a
ld a, [wMenuBoxHeight]
ld c, a
ld a, [wMenuBoxSkipClear]
and a
jr nz, .skip_clear
farcall FillBoxInBGMapWithZero
jr .print_items
.skip_clear
ld a, [wMenuBoxLabelTextID + 0]
ld l, a
ld a, [wMenuBoxLabelTextID + 1]
ld h, a
or l
jr nz, .asm_1cb31
call DrawRegularTextBoxVRAM0
jr .print_items
.asm_1cb31
call Func_38ad
.print_items
ld a, [wMenuBoxNumItems]
ld b, a
ld c, 0
.loop_text_items
push bc
push de
ld b, $00
ld hl, wMenuBoxItemsXPositions
add hl, bc
ld d, [hl]
ld hl, wMenuBoxItemsYPositions
add hl, bc
ld e, [hl]
ld hl, wMenuBoxItemsTextIDs
sla c
rl b
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
call Func_35af
pop de
pop bc
inc c
ld a, c
cp b
jr nz, .loop_text_items
pop af
; place cursor in default position
ld b, $00
ld c, a
ld hl, wMenuBoxItemsXPositions
add hl, bc
ld a, [hl]
ld d, a
ld hl, wMenuBoxItemsYPositions
add hl, bc
ld a, [hl]
ld e, a
ld b, d
dec b
ld c, e
xor a
call BankswitchVRAM
ld a, [wMenuBoxCursorSymbol]
call WriteByteToBGMap0
pop hl
pop de
pop bc
pop af
ret
; handles player input inside a menu box
; that was initialized with LoadMenuBoxParams
; returns carry if a selection was made
; input:
; a = default cursor position
HandleMenuBox:
push bc
push de
push hl
ld c, a
ld [wMenuBoxFocusedItem], a
xor a
ld [wMenuBoxBlinkCounter], a
call .UnfocusItem
ld a, [wMenuBoxDelay]
and a
jr z, .no_delay
.loop_delay
call DoFrame
dec a
jr nz, .loop_delay
.no_delay
call .InitAndUpdateBlinkCounter
.loop_main
call DoFrame
call UpdateRNGSources
ld a, [wMenuBoxNumItems]
ld h, a
ld a, [wMenuBoxFocusedItem]
ld c, a
call .CallUpdateFunction
ld a, [wda37]
and a
jr nz, .asm_1cbc3
call .DownPress
call .UpPress
call .RightPress
call .LeftPress
ld a, c
ld [wMenuBoxFocusedItem], a
.asm_1cbc3
ld a, [wMenuBoxFocusedItem]
ld c, a
xor a
ld [wda37], a
call .CheckKeysPressed
jr nz, .asm_1cbda
call .CheckKeysHeld
jr nz, .asm_1cbda
call .UpdateBlinkCounter
jr .loop_main
.asm_1cbda
call .FocusItem
ld a, c
pop hl
pop de
pop bc
ret
.UpPress:
ldh a, [hDPadHeld]
and D_UP
ret z
ld a, [wMenuBoxHasHorizontalScroll]
ld l, a ; unused
ld a, [wMenuBoxVerticalStep]
and a
ret z
ld b, a
ld a, c
sub b
jr nc, .no_overflow_1
add h ; warp around
.no_overflow_1
push af
ld a, SFX_01
call CallPlaySFX
pop af
call .UnfocusItem
ld c, a
ret
.DownPress:
ldh a, [hDPadHeld]
and D_DOWN
ret z
ld a, [wMenuBoxHasHorizontalScroll]
ld l, a ; unused
ld a, [wMenuBoxVerticalStep]
and a
ret z
ld b, a
ld a, c
add b
cp h
jr c, .no_overflow_2
sub h ; warp around
.no_overflow_2
push af
ld a, SFX_01
call CallPlaySFX
pop af
call .UnfocusItem
ld c, a
ret
.LeftPress:
ldh a, [hDPadHeld]
and D_LEFT
ret z
ld a, [wMenuBoxHasHorizontalScroll]
and a
ret z
ld b, a
ld a, c
sub b
jr nc, .no_overflow_3
add h
.no_overflow_3
push af
ld a, SFX_01
call CallPlaySFX
pop af
call .UnfocusItem
ld c, a
ret
.RightPress:
ldh a, [hDPadHeld]
and D_RIGHT
ret z
ld a, [wMenuBoxHasHorizontalScroll]
and a
ret z
ld b, a
ld a, c
add b
cp h
jr c, .no_overflow_4
sub h
.no_overflow_4
push af
ld a, SFX_01
call CallPlaySFX
pop af
call .UnfocusItem
ld c, a
ret
; returns carry if any of the keys
; in wMenuBoxPressKeys are pressed
.CheckKeysPressed:
ld a, [wMenuBoxPressKeys]
ld b, a
ldh a, [hKeysPressed]
and b
ret z
scf
ccf
ret
; returns carry if any of the keys
; in wMenuBoxHeldKeys are held
.CheckKeysHeld:
ld a, [wMenuBoxHeldKeys]
ld b, a
ldh a, [hDPadHeld]
and b
ret z
scf
ret
.InitAndUpdateBlinkCounter:
xor a
ld [wMenuBoxBlinkCounter], a
; fallthrough
.UpdateBlinkCounter:
push bc
push hl
ld b, $00
ld hl, wMenuBoxItemsXPositions
add hl, bc
ld a, [hl]
ld d, a
ld hl, wMenuBoxItemsYPositions
add hl, bc
ld a, [hl]
ld e, a
ld b, d
dec b
ld c, e
ld a, [wMenuBoxBlinkCounter]
and $10
ld a, [wMenuBoxBlinkSymbol]
jr z, .blink
ld a, [wMenuBoxSpaceSymbol]
.blink
push af
xor a
call BankswitchVRAM
pop af
call WriteByteToBGMap0
ld a, $01
call BankswitchVRAM
ld a, $80 ; priority
call WriteByteToBGMap0
xor a
call BankswitchVRAM
; increment counter
ld hl, wMenuBoxBlinkCounter
inc [hl]
pop hl
pop bc
ret
; c = cursor position
.UnfocusItem:
push af
push bc
push hl
ld b, $00
ld hl, wMenuBoxItemsXPositions
add hl, bc
ld a, [hl]
ld d, a
ld hl, wMenuBoxItemsYPositions
add hl, bc
ld a, [hl]
ld e, a
ld b, d
dec b
ld c, e
ld a, [wMenuBoxSpaceSymbol]
call WriteByteToBGMap0
xor a
ld [wMenuBoxBlinkCounter], a
pop hl
pop bc
pop af
ret
; c = cursor position
; carry = doing selection
.FocusItem:
push af
push bc
push hl
ld a, [wMenuBoxCursorSymbol]
jr nc, .not_selection
ld a, [wMenuBoxSelectionSymbol]
.not_selection
push af
ld b, $00
ld hl, wMenuBoxItemsXPositions
add hl, bc
ld a, [hl]
ld d, a
ld hl, wMenuBoxItemsYPositions
add hl, bc
ld a, [hl]
ld e, a
ld b, d
dec b
ld c, e
pop af
call WriteByteToBGMap0
pop hl
pop bc
pop af
ret
.CallUpdateFunction:
push af
push bc
push de
push hl
ld a, [wMenuBoxUpdateFunction + 0]
ld l, a
ld a, [wMenuBoxUpdateFunction + 1]
ld h, a
or l
jr z, .done
; call hl
ld de, .done
push de
jp hl
.done
pop hl
pop de
pop bc
pop af
ret
GetMenuBoxFocusedItem:
ld a, [wMenuBoxFocusedItem]
ret
; 0x1cd17
SECTION "Bank 7@4d6f", ROMX[$4d6f], BANK[$7]
; outputs in a what option the player chose
ShowStartMenu:
push bc
push de
push hl
ld [wStartMenuConfiguration], a
push af
ld a, MUSIC_PCMAINMENU
call SetMusic
pop af
call .HandleMenu
ld a, [wMenuCursorPosition]
pop hl
pop de
pop bc
ret
.HandleMenu:
farcall ClearSpriteAnimsAndSetInitialGraphicsConfiguration
ld de, $4090
call SetupText
call .DrawMenu
farcall SetFrameFuncAndFadeFromWhite
farcall SetFadePalsFrameFunc
call HandleStartMenuBox
farcall UnsetFadePalsFrameFunc
farcall FadeToWhiteAndUnsetFrameFunc
ret
.DrawMenu:
ld a, [wStartMenuConfiguration]
and a
jr z, .skip_portrait_and_name
; draw player portrait
call Func_1c0ec
add 0
lb bc, 13, 1
ld e, PORTRAITVARIANT_NORMAL
call Func_3ab2
; print player's name
farcall LoadPlayerName
ld b, a
ld a, MAX_PLAYER_NAME_CHARS
sub b
ld d, 13
add d
ld d, a
ld e, 8
ldtx hl, Text05be
call Func_35bf
.skip_portrait_and_name
ld a, [wStartMenuConfiguration]
add a
ld c, a
ld b, $00
ld hl, .MenuBoxParamPointers
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld b, BANK(.MenuBoxParamPointers)
lb de, 0, 0
call LoadMenuBoxParams
ld a, [wStartMenuConfiguration]
ld c, a
ld b, $00
ld hl, .DefaultCursorPositions
add hl, bc
ld a, [hl]
ld [wMenuCursorPosition], a
call DrawMenuBox
lb de, 0, 10
lb bc, 20, 8
call DrawRegularTextBoxVRAM0
ret
.DefaultCursorPositions
db 0 ; STARTMENU_CONFIG_0
db 0 ; STARTMENU_CONFIG_1
db 1 ; STARTMENU_CONFIG_2
db 1 ; STARTMENU_CONFIG_3
db 0 ; STARTMENU_CONFIG_4
.MenuBoxParamPointers:
dw .Config0Params ; STARTMENU_CONFIG_0
dw .Config1Params ; STARTMENU_CONFIG_1
dw .Config2Params ; STARTMENU_CONFIG_2
dw .Config3Params ; STARTMENU_CONFIG_3
dw .Config4Params ; STARTMENU_CONFIG_4
.Config0Params
db TRUE ; ?
db 12, 4 ; width, height
db SYM_CURSOR_R ; blink cursor symbol
db SYM_SPACE ; space symbol
db SYM_CURSOR_R ; default cursor symbol
db SYM_CURSOR_R ; selection cursor symbol
db A_BUTTON ; press keys
db $00 ; held keys
db FALSE ; has horizontal scroll
db 0 ; vertical step
dw StartMenuBoxUpdate ; update function
dw NULL ; label text ID
textitem 2, 2, Text05ce
db $ff ; end
.Config1Params
db TRUE ; ?
db 12, 6 ; width, height
db SYM_CURSOR_R ; blink cursor symbol
db SYM_SPACE ; space symbol
db SYM_CURSOR_R ; default cursor symbol
db SYM_CURSOR_R ; selection cursor symbol
db A_BUTTON ; press keys
db $00 ; held keys
db FALSE ; has horizontal scroll
db 1 ; vertical step
dw StartMenuBoxUpdate ; update function
dw NULL ; label text ID
textitem 2, 2, Text05cf
textitem 2, 4, Text05ce
db $ff ; end
.Config2Params
db TRUE ; ?
db 12, 8 ; width, height
db SYM_CURSOR_R ; blink cursor symbol
db SYM_SPACE ; space symbol
db SYM_CURSOR_R ; default cursor symbol
db SYM_CURSOR_R ; selection cursor symbol
db A_BUTTON ; press keys
db $00 ; held keys
db FALSE ; has horizontal scroll
db 1 ; vertical step
dw StartMenuBoxUpdate ; update function
dw NULL ; label text ID
textitem 2, 2, Text05d0
textitem 2, 4, Text05cf
textitem 2, 6, Text05ce
db $ff ; end
.Config3Params
db TRUE ; ?
db 12, 10 ; width, height
db SYM_CURSOR_R ; blink cursor symbol
db SYM_SPACE ; space symbol
db SYM_CURSOR_R ; default cursor symbol
db SYM_CURSOR_R ; selection cursor symbol
db A_BUTTON ; press keys
db $00 ; held keys
db FALSE ; has horizontal scroll
db 1 ; vertical step
dw StartMenuBoxUpdate ; update function
dw NULL ; label text ID
textitem 2, 2, Text05d0
textitem 2, 4, Text05cf
textitem 2, 6, Text05ce
textitem 2, 8, Text05d1
db $ff ; end
.Config4Params
db TRUE ; ?
db 12, 8 ; width, height
db SYM_CURSOR_R ; blink cursor symbol
db SYM_SPACE ; space symbol
db SYM_CURSOR_R ; default cursor symbol
db SYM_CURSOR_R ; selection cursor symbol
db A_BUTTON ; press keys
db $00 ; held keys
db FALSE ; has horizontal scroll
db 1 ; vertical step
dw StartMenuBoxUpdate ; update function
dw NULL ; label text ID
textitem 2, 2, Text05cf
textitem 2, 4, Text05ce
textitem 2, 6, Text05d1
db $ff ; end
_StartMenuBoxUpdate::
push af
push bc
push de
push hl
call GetMenuBoxFocusedItem
ld b, a
ld a, [wMenuBoxLastFocusedItem]
cp b
jr z, .done
call .DrawTextBox
sla b
ld a, [wStartMenuConfiguration]
sla a
sla a
sla a ; *8
add b
ld c, a
ld b, $00
ld hl, .PointerTables
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
; call hl
ld de, .done
push de
jp hl
.done
call GetMenuBoxFocusedItem
ld [wMenuBoxLastFocusedItem], a
pop hl
pop de
pop bc
pop af
ret
.PointerTables:
; STARTMENU_CONFIG_0
dw .NewGame
dw NULL
dw NULL
dw NULL
; STARTMENU_CONFIG_1
dw .ContinueFromDiary
dw .NewGame
dw NULL
dw NULL
; STARTMENU_CONFIG_2
dw .CardPop
dw .ContinueFromDiary
dw .NewGame
dw NULL
; STARTMENU_CONFIG_3
dw .CardPop
dw .ContinueFromDiary
dw .NewGame
dw .ContinueDuel
; STARTMENU_CONFIG_4
dw .ContinueFromDiary
dw .NewGame
dw .ContinueDuel
dw NULL
.DrawTextBox:
push bc
lb de, 0, 10
lb bc, 20, 8
call DrawRegularTextBoxVRAM0
pop bc
ret
.NewGame:
lb de, 1, 12
ldtx hl, Text05d2
call Func_35af
ret
.ContinueFromDiary:
farcall Func_c53e
call LoadTxRam2
ldtx hl, Text077b
lb de, 1, 10
call Func_2c4b
ld hl, .TextItems
call Func_35cf
; print number of event coins
; obtained by the player
call CountEventCoinsObtained
ld l, a
ld h, $00
lb de, 13, 12
ld a, 2
ld b, TRUE
call PrintNumber
lb de, 10, 16
farcall PrintPlayTime
lb de, 9, 14
farcall PrintCardAlbumProgress
ret
.TextItems:
textitem 3, 12, Text05af
textitem 15, 12, Text05ca
textitem 3, 14, Text05b0
textitem 3, 16, Text05b1
db $ff
.CardPop:
lb de, 1, 12
ldtx hl, Text05d3
call Func_35af
ret
.ContinueDuel:
lb de, 1, 12
ldtx hl, Text05d4
call Func_35af
ret
HandleStartMenuBox:
ld a, -1
ld [wMenuBoxLastFocusedItem], a
ld a, [wMenuCursorPosition]
call HandleMenuBox
ld [wMenuCursorPosition], a
jr c, .selected
push af
ld a, SFX_02
call CallPlaySFX
pop af
ret
.selected
push af
ld a, SFX_03
call CallPlaySFX
pop af
ret
; return carry if "no" selected
AskToOverwriteSaveData:
push bc
push de
push hl
farcall SetFadePalsFrameFunc
farcall ZeroObjectPositionsAndEnableOBPFading
farcall SetInitialGraphicsConfiguration
lb de, 0, 12
lb bc, 20, 6
call DrawRegularTextBoxVRAM0
call StartFadeFromWhite
call WaitPalFading_Bank07
ld hl, .TextIDs
call PrintScrollableTextFromList
ldtx hl, Text0760
ld a, $1 ; "no" selected by default
farcall DrawWideTextBox_PrintTextWithYesOrNoMenu
jr c, .fade_out
farcall Func_e97a
ldtx hl, Text0761
farcall PrintScrollableText_NoTextBoxLabelVRAM0
.fade_out
call StartFadeToWhite
call WaitPalFading_Bank07
farcall UnsetFadePalsFrameFunc
pop hl
pop de
pop bc
ret
.TextIDs:
tx Text075e
tx Text075f
dw $ffff
; return carry if "no" selected
AskToContinueFromDiaryInsteadOfDuel:
push bc
push de
push hl
farcall SetFadePalsFrameFunc
farcall ZeroObjectPositionsAndEnableOBPFading
farcall SetInitialGraphicsConfiguration
lb de, 0, 12
lb bc, 20, 6
call DrawRegularTextBoxVRAM0
call StartFadeFromWhite
call WaitPalFading_Bank07
ld hl, .TextIDs
call PrintScrollableTextFromList
ldtx hl, Text078c
ld a, $1 ; "no" selected by default
farcall DrawWideTextBox_PrintTextWithYesOrNoMenu
jr c, .fade_out ; unnecessary jump
.fade_out
call StartFadeToWhite
call WaitPalFading_Bank07
farcall UnsetFadePalsFrameFunc
pop hl
pop de
pop bc
ret
.TextIDs:
tx Text0788
tx Text0789
tx Text078a
tx Text078b
tx $ffff
ConfirmPlayerNameAndGender:
push bc
push de
push hl
call .ShowInfoAndAskPlayer
pop hl
pop de
pop bc
ret
.ShowInfoAndAskPlayer:
farcall ClearSpriteAnimsAndSetInitialGraphicsConfiguration
call .ShowPlayerInfo
farcall SetFrameFuncAndFadeFromWhite
call .ShowYesOrNoMenu
farcall FadeToWhiteAndUnsetFrameFunc
ret
.ShowPlayerInfo:
lb de, 0, 0
lb bc, 20, 12
call DrawRegularTextBoxVRAM0
lb de, 0, 12
lb bc, 20, 6
call DrawRegularTextBoxVRAM0
ld hl, .TextItems
call Func_35cf
lb bc, 12, 3
call DrawPlayerPortrait
; print name
ldtx hl, Text05be
lb de, 5, 4
call Func_35bf
; print gender
farcall GetPlayerGender
and a
ldtx hl, Text05d5
jr z, .got_gender_text
ldtx hl, Text05d6
.got_gender_text
lb de, 5, 8
call Func_35af
ret
.TextItems:
textitem 2, 2, Text05ad
textitem 2, 6, Text05de
db $ff
.ShowYesOrNoMenu:
ldtx hl, Text05dd
ld a, $1
farcall DrawWideTextBox_PrintTextWithYesOrNoMenu
ret
; 0x1d081
SECTION "Bank 7@5081", ROMX[$5081], BANK[$7]
; a = COIN_* constant
CheckIfCoinWasObtained:
push bc
push hl
ld c, a
ld b, $00
ld hl, .CoinEventIDs
add hl, bc
ld a, [hl]
farcall GetEventValue
pop hl
pop bc
ret
.CoinEventIDs
db EVENT_GOT_CHANSEY_COIN ; COIN_CHANSEY
db EVENT_0B ; COIN_01
db EVENT_05 ; COIN_02
db EVENT_06 ; COIN_03
db EVENT_07 ; COIN_04
db EVENT_08 ; COIN_05
db EVENT_09 ; COIN_06
db EVENT_0A ; COIN_07
db EVENT_10 ; COIN_08
db EVENT_11 ; COIN_09
db EVENT_12 ; COIN_0A
db EVENT_13 ; COIN_0B
db EVENT_14 ; COIN_0C
db EVENT_15 ; COIN_0D
db EVENT_16 ; COIN_0E
db EVENT_17 ; COIN_0F
db EVENT_18 ; COIN_10
db EVENT_19 ; COIN_11
db EVENT_1A ; COIN_12
db EVENT_1B ; COIN_13
db EVENT_1C ; COIN_14
db EVENT_1D ; COIN_15
db EVENT_1E ; COIN_16
db EVENT_1F ; COIN_17
; outputs in a the number of event coins
; that has been obtained by the player
CountEventCoinsObtained:
push bc
push hl
ld c, NUM_COINS
ld b, 0
xor a ; COIN_CHANSEY
.loop
push af
call CheckIfCoinWasObtained
jr z, .next
inc b
.next
pop af
inc a
dec c
jr nz, .loop
ld a, b
and a
pop hl
pop bc
ret
; 0x1d0c2
SECTION "Bank 7@5475", ROMX[$5475], BANK[$7]
; a = $0: initializes values for new save
; a = $1: reads values from SRAM
Func_1d475:
ld hl, .FunctionMap
call CallMappedFunction
ret
.FunctionMap
key_func $0, .Initialize
key_func $1, .Read
db $ff ; end
.Initialize:
ld a, PLAYER_MALE
farcall SetPlayerGender
; give Chansey coin
ld a, EVENT_GOT_CHANSEY_COIN
farcall MaxOutEventValue
farcall Func_1157c
call Func_1eca5
call Func_1d7a1
call Func_1d9f9
call Func_1dcb7
; this is unnecessary since Card Pop list
; was already cleared in InitSaveData
farcall ClearCardPopNameList
call Func_1e419
call Func_1e767
farcall Func_111f0
call Func_1c425
call Func_1c3d5
call Func_1c395
ret
.Read:
call Func_1c395
ld a, $01
farcall Func_108c9
ret
ShowOWMapLocationBox:
push af
push bc
push de
push hl
ldh a, [hWX]
ld [wBackupWX], a
ldh a, [hWY]
ld [wBackupWY], a
ld a, $40
ldh [hWX], a
ld a, $78
ldh [hWY], a
ld bc, TILEMAP_004
lb de, 0, 16
farcall Func_12c0ce
lb de, 1, 33
lb bc, 11, 1
farcall FillBoxInBGMapWithZero
lb de, 0, 32
lb bc, 13, 3
farcall Func_10742
call .LoadPal
call SetWindowOn
pop hl
pop de
pop bc
pop af
ret
.LoadPal:
ld b, BANK(Pals_1d50d)
ld c, $00
ld hl, Pals_1d50d
call Func_3861
ret
Pals_1d50d:
db 2 ; number of palettes
rgb 31, 31, 31
rgb 31, 31, 31
rgb 8, 8, 8
rgb 0, 0, 0
rgb 31, 31, 31
rgb 31, 31, 31
rgb 31, 0, 0
rgb 1, 0, 5
; 0x1d51d
SECTION "Bank 7@551e", ROMX[$551e], BANK[$7]
Func_1d51e:
push af
ld a, [wBackupWX]
ldh [hWX], a
ld a, [wBackupWY]
ldh [hWY], a
call SetWindowOff
pop af
ret
; 0x1d52e
SECTION "Bank 7@57a1", ROMX[$57a1], BANK[$7]
Func_1d7a1:
xor a
ld [wdb1f], a
ret
; 0x1d7a6
SECTION "Bank 7@59f9", ROMX[$59f9], BANK[$7]
Func_1d9f9:
ld a, $04
ld [wdc06], a
ret
; 0x1d9ff
SECTION "Bank 7@5cb7", ROMX[$5cb7], BANK[$7]
Func_1dcb7:
xor a
ld [wdc08 + 0], a
ld [wdc08 + 1], a
ret
; 0x1dcbf
SECTION "Bank 7@5fb9", ROMX[$5fb9], BANK[$7]
Func_1dfb9::
push af
push bc
push de
push hl
ld a, $01 ; unused
farcall ClearSpriteAnims
xor a
farcall Func_108c9
xor a
ld [wdc5e + 0], a
ld [wdc5e + 1], a
ld [wdce2], a
ld [wdc59], a
ld [wdce8], a
ld [wdce5], a
ld [wdcf0], a
ld [wdc57], a
ld a, $ff
ld [wdcea], a
xor a
ld bc, $80
ld hl, wdc60
call WriteBCBytesToHL
pop hl
pop de
pop bc
pop af
ret
; 0x1dff5
SECTION "Bank 7@6419", ROMX[$6419], BANK[$7]
Func_1e419:
push af
xor a
ld [wdc0f], a
pop af
ret
; 0x1e420
SECTION "Bank 7@6767", ROMX[$6767], BANK[$7]
Func_1e767:
xor a
ld [wdd07], a
ret
; 0x1e76c
SECTION "Bank 7@6ca5", ROMX[$6ca5], BANK[$7]
Func_1eca5:
push af
push bc
push de
push hl
xor a
ld [wdd36], a
ld [wdd50], a
ld [wdd5c], a
ld [wdd5d], a
ld [wdd5e], a
ld [wdd5b], a
ld [wdd5a], a
ld [wdd5f], a
ld [wdd60], a
ld [wdd73], a
ld [wdd74], a
xor a
ld hl, wdd37
ld bc, $19
call WriteBCBytesToHL
xor a
ld hl, wdd51
ld bc, $9
call WriteBCBytesToHL
pop hl
pop de
pop bc
pop af
ret
; 0x1ece4
SECTION "Bank 7@7293", ROMX[$7293], BANK[$7]
Func_1f293:
push af
push bc
push de
push hl
ld a, [wdd36]
and a
jr z, .asm_1f2eb
ld a, $ff
ld [wdd5a], a
ld a, [wdd50]
cp $08
jr z, .asm_1f2eb
ld de, wdd51
ld hl, wdd37
ld a, [wdd50]
ld b, a
ld a, $08
sub b
ld b, a
ld c, $00
.asm_1f2b9
ld a, [hli]
and a
jr z, .asm_1f2c6
res 7, a
call .Func_1f2f6
inc c
dec b
jr nz, .asm_1f2b9
.asm_1f2c6
ld a, [wdd50]
add c
ld [wdd50], a
ld a, [wdd36]
sub c
ld [wdd36], a
ld hl, wdd37
ld b, $00
add hl, bc
ld de, wdd37
ld a, $18
sub c
ld c, a
ld a, [hli]
.asm_1f2e2
ld [de], a
inc de
ld b, [hl]
xor a
ld [hli], a
ld a, b
dec c
jr nz, .asm_1f2e2
.asm_1f2eb
ld a, [wdd36]
ld [wdd5b], a
pop hl
pop de
pop bc
pop af
ret
; shift data in de 1 byte right
.Func_1f2f6:
push bc
push de
push hl
ld c, $08
.loop
ld l, a
ld a, [de]
ld h, a
ld a, l
ld [de], a
inc de
ld a, h
dec c
jr nz, .loop
pop hl
pop de
pop bc
ret
; 0x1f309
SECTION "Bank 7@757b", ROMX[$757b], BANK[$7]
Func_1f57b::
push af
push bc
push de
push hl
ld a, [wdd75]
and a
jr z, .asm_1f588
call .Func_1f58d
.asm_1f588
pop hl
pop de
pop bc
pop af
ret
.Func_1f58d:
dec a
add a ; *2
ld c, a
ld b, $00
ld hl, .OffsetPointers
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wdd76]
add a ; *2
ld c, a
add hl, bc
ld a, [hl]
cp $80
jr z, .asm_1f5b6
ld c, [hl]
ldh a, [hSCX]
sub c
ldh [hSCX], a
inc hl
ld c, [hl]
ldh a, [hSCY]
sub c
ldh [hSCY], a
ld hl, wdd76
inc [hl]
ret
.asm_1f5b6
xor a
ld [wdd76], a
ld a, [wdd77]
and a
jr z, .asm_1f5c5
dec a
ld [wdd77], a
ret nz
.asm_1f5c5
xor a
ld [wdd75], a
ret
.OffsetPointers:
dw .offsets1 ; $1
dw .offsets2 ; $2
dw .offsets3 ; $3
dw .offsets4 ; $4
dw .offsets5 ; $5
dw .offsets6 ; $6
.offsets1
db -1, 0
db 1, 0
db 1, 0
db -1, 0
db $80 ; end
.offsets2
db 0, -1
db 0, 1
db 0, 1
db 0, -1
db $80 ; end
.offsets3
db -1, -1
db 1, 1
db 1, 1
db -1, -1
db $80 ; end
.offsets4
db -2, 0
db 2, 0
db 2, 0
db -2, 0
db $80 ; end
.offsets5
db 0, -2
db 0, 2
db 0, 2
db 0, -2
db $80 ; end
.offsets6
db -2, 2
db 2, -2
db 2, -2
db -2, 2
db $80 ; end
; 0x1f60c
SECTION "Bank 7@78bd", ROMX[$78bd], BANK[$7]
PlayerGenderAndNameSelection::
push af
push bc
push de
push hl
.start
farcall SetFadePalsFrameFunc
call StartFadeToWhite
call WaitPalFading_Bank07
farcall UnsetFadePalsFrameFunc
push af
ld a, MUSIC_PCMAINMENU
call SetMusic
pop af
farcall PlayerGenderSelection
farcall PlayerNameSelection
call ConfirmPlayerNameAndGender
jr c, .start ; player selected no
call SetNoMusic
pop hl
pop de
pop bc
pop af
ret
; 0x1f8eb