pokeyellow/engine/menu/options.asm
2015-12-13 17:15:07 -05:00

443 lines
6.7 KiB
NASM

DisplayOptionMenu_: ; 41c70 (10:5c70)
call Func_41f06
.optionMenuLoop
call JoypadLowSensitivity
ld a, [hJoy5]
and START | B_BUTTON
jr nz, .exitOptionMenu
call Func_41eb7
jr c, .asm_41c86
call Func_41c95
jr c, .exitOptionMenu
.asm_41c86
call Func_41ee9
call DelayFrame
call DelayFrame
call DelayFrame
jr .optionMenuLoop
.exitOptionMenu
ret
Func_41c95: ; 41c95 (10:5c95)
ld a, [wOptionsCursorLocation]
ld e, a
ld d, $0
ld hl, OptionMenuJumpTable
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
OptionMenuJumpTable: ; 41ca4 (10:5ca4)
dw OptionsMenu_TextSpeed
dw OptionsMenu_BattleAnimations
dw OptionsMenu_BattleStyle
dw OptionsMenu_SpeakerSettings
dw OptionsMenu_GBPrinterBrightness
dw OptionsMenu_Dummy
dw OptionsMenu_Dummy
dw OptionsMenu_Cancel
OptionsMenu_TextSpeed: ; 41cb4 (10:5cb4)
call Func_41d07
ld a, [hJoy5]
bit 4, a ; right
jr nz, .pressedRight
bit 5, a
jr nz, .pressedLeft
jr .asm_41ce0
.pressedRight
ld a, c
cp $2
jr c, .asm_41cca
ld c, $ff
.asm_41cca
inc c
ld a, e
jr .asm_41cd6
.pressedLeft
ld a, c
and a
jr nz, .asm_41cd4
ld c, $3
.asm_41cd4
dec c
ld a, d
.asm_41cd6
ld b, a
ld a, [wOptions]
and $f0
or b
ld [wOptions], a
.asm_41ce0
ld b, $0
ld hl, TextSpeedStringsPointerTable
add hl, bc
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
coord hl, 14, 2
call PlaceString
and a
ret
TextSpeedStringsPointerTable: ; 41cf2 (10:5cf2)
dw FastText
dw MidText
dw SlowText
FastText: ; 41cf9 (10:5cf9)
db "FAST@"
MidText: ; 41cfd (10:5cfd)
db "MID @"
SlowText: ; 41d02 (10:5d02)
db "SLOW@"
Func_41d07: ; 41d07 (10:5d07)
ld a, [wOptions]
and $f
cp $5
jr z, .slowTextOption
cp $1
jr z, .fastTextOption
; mid text option
ld c, $1
lb de, 1, 5
ret
.slowTextOption
ld c, $2
lb de, 3, 1
ret
.fastTextOption
ld c, $0
lb de, 5, 3
ret
OptionsMenu_BattleAnimations: ; 41d26 (10:5d26)
ld a, [hJoy5]
and D_RIGHT | D_LEFT
jr nz, .asm_41d33
ld a, [wOptions]
and $80 ; mask other bits
jr .asm_41d3b
.asm_41d33
ld a, [wOptions]
xor $80
ld [wOptions], a
.asm_41d3b
ld bc, $0
sla a
rl c
ld hl, AnimationOptionStringsPointerTable
add hl, bc
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
coord hl, 14, 4
call PlaceString
and a
ret
AnimationOptionStringsPointerTable: ; 41d52 (10:5d52)
dw AnimationOnText
dw AnimationOffText
AnimationOnText: ; 41d56 (10:5d56)
db "ON @"
AnimationOffText: ; 41d5a (10:5d5a)
db "OFF@"
OptionsMenu_BattleStyle: ; 41d5e (10:5d5e)
ld a, [hJoy5]
and D_LEFT | D_RIGHT
jr nz, .asm_41d6b
ld a, [wOptions]
and $40 ; mask other bits
jr .asm_41d73
.asm_41d6b
ld a, [wOptions]
xor $40
ld [wOptions], a
.asm_41d73
ld bc, $0
sla a
sla a
rl c
ld hl, BattleStyleOptionStringsPointerTable
add hl, bc
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
coord hl, 14, 6
call PlaceString
and a
ret
BattleStyleOptionStringsPointerTable: ; 41d8c (10:5d8c)
dw BattleStyleShiftText
dw BattleStyleSetText
BattleStyleShiftText: ; 41d90 (10:5d90)
db "SHIFT@"
BattleStyleSetText: ; 41d96 (10:5d96)
db "SET @"
OptionsMenu_SpeakerSettings: ; 41d9c (10:5d9c)
ld a, [wOptions]
and $30
swap a
ld c, a
ld a, [hJoy5]
bit 4, a
jr nz, .pressedRight
bit 5, a
jr nz, .pressedLeft
jr .asm_41dca
.pressedRight
ld a, c
inc a
and $3
jr .asm_41dba
.pressedLeft
ld a, c
dec a
and $3
.asm_41dba
ld c, a
swap a
ld b, a
xor a
ld [rNR51], a
ld a, [wOptions]
and $cf
or b
ld [wOptions], a
.asm_41dca
ld b, $0
ld hl, SpeakerOptionStringsPointerTable
add hl, bc
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
coord hl, 8, 8
call PlaceString
and a
ret
SpeakerOptionStringsPointerTable: ; 41ddc (10:5ddc)
dw MonoSoundText
dw Earphone1SoundText
dw Earphone2SoundText
dw Earphone3SoundText
MonoSoundText: ; 41de4 (10:5de4)
db "MONO @"
Earphone1SoundText: ; 41dee (10:5dee)
db "EARPHONE1@"
Earphone2SoundText: ; 41df8 (10:5df8)
db "EARPHONE2@"
Earphone3SoundText: ; 41e02 (10:5e02)
db "EARPHONE3@"
OptionsMenu_GBPrinterBrightness: ; 41e0c (10:5e0c)
call Func_41e7b
ld a, [hJoy5]
bit 4, a
jr nz, .pressedRight
bit 5, a
jr nz, .pressedLeft
jr .asm_41e32
.pressedRight
ld a, c
cp $4
jr c, .asm_41e22
ld c, $ff
.asm_41e22
inc c
ld a, e
jr .asm_41e2e
.pressedLeft
ld a, c
and a
jr nz, .asm_41e2c
ld c, $5
.asm_41e2c
dec c
ld a, d
.asm_41e2e
ld b, a
ld [wd498], a
.asm_41e32
ld b, $0
ld hl, GBPrinterOptionStringsPointerTable
add hl, bc
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
coord hl, 8, 10
call PlaceString
and a
ret
GBPrinterOptionStringsPointerTable: ; 41e44 (10:5e44)
dw LightestPrintText
dw LighterPrintText
dw NormalPrintText
dw DarkerPrintText
dw DarkestPrintText
LightestPrintText: ; 41e4e (10:5e4e)
db "LIGHTEST@"
LighterPrintText: ; 41e57 (10:5e57)
db "LIGHTER @"
NormalPrintText: ; 41e60 (10:5e60)
db "NORMAL @"
DarkerPrintText: ; 41e69 (10:5e69)
db "DARKER @"
DarkestPrintText: ; 41e72 (10:5e72)
db "DARKEST @"
Func_41e7b: ; 41e7b (10:5e7b)
ld a, [wd498]
and a
jr z, .asm_41e93
cp $20
jr z, .asm_41e99
cp $60
jr z, .asm_41e9f
cp $7f
jr z, .asm_41ea5
ld c, $2
lb de, $20, $60
ret
.asm_41e93
ld c, $0
lb de, $7f, $20
ret
.asm_41e99
ld c, $1
lb de, $0, $40
ret
.asm_41e9f
ld c, $3
lb de, $40, $7f
ret
.asm_41ea5
ld c, $4
lb de, $60, $0
ret
OptionsMenu_Dummy: ; 41eab (10:5eab)
and a
ret
OptionsMenu_Cancel: ; 41ead (10:5ead)
ld a, [hJoy5]
and A_BUTTON
jr nz, .pressedCancel
and a
ret
.pressedCancel
scf
ret
Func_41eb7: ; 41eb7 (10:5eb7)
ld hl, wOptionsCursorLocation
ld a, [hJoy5]
cp D_DOWN
jr z, .pressedDown
cp D_UP
jr z, .pressedUp
and a
ret
.pressedDown
ld a, [hl]
cp $7
jr nz, .doNotWrapAround
ld [hl], $0
scf
ret
.doNotWrapAround
cp $4
jr c, .regularIncrement
ld [hl], $6
.regularIncrement
inc [hl]
scf
ret
.pressedUp
ld a, [hl]
cp $7
jr nz, .doNotMoveCursorToPrintOption
ld [hl], $4
scf
ret
.doNotMoveCursorToPrintOption
and a
jr nz, .regularDecrement
ld [hl], $8
.regularDecrement
dec [hl]
scf
ret
Func_41ee9: ; 41ee9 (10:5ee9)
coord hl, 1, 1
ld de, SCREEN_WIDTH
ld c, 16
.loop
ld [hl], " "
add hl, de
dec c
jr nz, .loop
coord hl, 1, 2
ld bc, SCREEN_WIDTH * 2
ld a, [wOptionsCursorLocation]
call AddNTimes
ld [hl], "▶"
ret
Func_41f06: ; 41f06 (10:5f06)
coord hl, 0, 0
lb bc, SCREEN_HEIGHT - 2, SCREEN_WIDTH - 2
call TextBoxBorder
coord hl, 2, 2
ld de, AllOptionsText
call PlaceString
coord hl, 2, 16
ld de, OptionMenuCancelText
call PlaceString
xor a
ld [wOptionsCursorLocation], a
ld c, 5
.loop
push bc
call Func_41c95
pop bc
ld hl, wOptionsCursorLocation
inc [hl]
dec c
jr nz, .loop
xor a
ld [wOptionsCursorLocation], a
inc a
ld [H_AUTOBGTRANSFERENABLED], a
call Delay3
ret
AllOptionsText: ; 41f3e (10:5f3e)
db "TEXT SPEED :"
next "ANIMATION :"
next "BATTLESTYLE:"
next "SOUND:"
next "PRINT:@"
OptionMenuCancelText: ; 41f73 (10:5f73)
db "CANCEL@"