pokecrystal-board/engine/options_menu.asm
Ben10do e6ea1889fb
Replace ‘jp [hl]’ with ‘jp hl’
The former is arguably misleading (as you don’t access the memory location in hl to retrieve the jump location), and is consequently deprecated in newer versions of rgbds.

This fix silences these deprecation warnings.
2017-06-09 22:01:10 +01:00

580 lines
7.9 KiB
NASM
Executable File

_OptionsMenu: ; e41d0
ld hl, hInMenu
ld a, [hl]
push af
ld [hl], $1
call ClearBGPalettes
hlcoord 0, 0
ld b, 16
ld c, 18
call TextBox
hlcoord 2, 2
ld de, StringOptions
call PlaceString
xor a
ld [wJumptableIndex], a
ld c, $6 ; number of items on the menu minus 1 (for cancel)
.print_text_loop ; this next will display the settings of each option when the menu is opened
push bc
xor a
ld [hJoyLast], a
call GetOptionPointer
pop bc
ld hl, wJumptableIndex
inc [hl]
dec c
jr nz, .print_text_loop
call UpdateFrame
xor a
ld [wJumptableIndex], a
inc a
ld [hBGMapMode], a
call WaitBGMap
ld b, SCGB_DIPLOMA
call GetSGBLayout
call SetPalettes
.joypad_loop
call JoyTextDelay
ld a, [hJoyPressed]
and START | B_BUTTON
jr nz, .ExitOptions
call OptionsControl
jr c, .dpad
call GetOptionPointer
jr c, .ExitOptions
.dpad
call Options_UpdateCursorPosition
ld c, 3
call DelayFrames
jr .joypad_loop
.ExitOptions:
ld de, SFX_TRANSACTION
call PlaySFX
call WaitSFX
pop af
ld [hInMenu], a
ret
; e4241
StringOptions: ; e4241
db "TEXT SPEED<LNBRK>"
db " :<LNBRK>"
db "BATTLE SCENE<LNBRK>"
db " :<LNBRK>"
db "BATTLE STYLE<LNBRK>"
db " :<LNBRK>"
db "SOUND<LNBRK>"
db " :<LNBRK>"
db "PRINT<LNBRK>"
db " :<LNBRK>"
db "MENU ACCOUNT<LNBRK>"
db " :<LNBRK>"
db "FRAME<LNBRK>"
db " :TYPE<LNBRK>"
db "CANCEL@"
; e42d6
GetOptionPointer: ; e42d6
ld a, [wJumptableIndex] ; load the cursor position to a
ld e, a ; copy it to de
ld d, 0
ld hl, .Pointers
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl ; jump to the code of the current highlighted item
; e42e5
.Pointers:
dw Options_TextSpeed
dw Options_BattleScene
dw Options_BattleStyle
dw Options_Sound
dw Options_Print
dw Options_MenuAccount
dw Options_Frame
dw Options_Cancel
; e42f5
Options_TextSpeed: ; e42f5
call GetTextSpeed
ld a, [hJoyPressed]
bit D_LEFT_F, a
jr nz, .LeftPressed
bit D_RIGHT_F, a
jr z, .NonePressed
ld a, c ; right pressed
cp SLOW_TEXT
jr c, .Increase
ld c, FAST_TEXT +- 1
.Increase:
inc c
ld a, e
jr .Save
.LeftPressed:
ld a, c
and a
jr nz, .Decrease
ld c, SLOW_TEXT + 1
.Decrease:
dec c
ld a, d
.Save:
ld b, a
ld a, [Options]
and $f0
or b
ld [Options], a
.NonePressed:
ld b, 0
ld hl, .Strings
add hl, bc
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
hlcoord 11, 3
call PlaceString
and a
ret
; e4331
.Strings:
dw .Fast
dw .Mid
dw .Slow
.Fast:
db "FAST@"
.Mid:
db "MID @"
.Slow:
db "SLOW@"
; e4346
GetTextSpeed: ; e4346
ld a, [Options] ; This converts the number of frames, to 0, 1, 2 representing speed
and 7
cp 5 ; 5 frames of delay is slow
jr z, .slow
cp 1 ; 1 frame of delay is fast
jr z, .fast
ld c, MED_TEXT ; set it to mid if not one of the above
lb de, 1, 5
ret
.slow
ld c, SLOW_TEXT
lb de, 3, 1
ret
.fast
ld c, FAST_TEXT
lb de, 5, 3
ret
; e4365
Options_BattleScene: ; e4365
ld hl, Options
ld a, [hJoyPressed]
bit D_LEFT_F, a
jr nz, .LeftPressed
bit D_RIGHT_F, a
jr z, .NonePressed
bit BATTLE_SCENE, [hl]
jr nz, .ToggleOn
jr .ToggleOff
.LeftPressed:
bit BATTLE_SCENE, [hl]
jr z, .ToggleOff
jr .ToggleOn
.NonePressed:
bit BATTLE_SCENE, [hl]
jr z, .ToggleOn
jr .ToggleOff
.ToggleOn:
res BATTLE_SCENE, [hl]
ld de, .On
jr .Display
.ToggleOff:
set BATTLE_SCENE, [hl]
ld de, .Off
.Display:
hlcoord 11, 5
call PlaceString
and a
ret
; e4398
.On:
db "ON @"
.Off:
db "OFF@"
; e43a0
Options_BattleStyle: ; e43a0
ld hl, Options
ld a, [hJoyPressed]
bit D_LEFT_F, a
jr nz, .LeftPressed
bit D_RIGHT_F, a
jr z, .NonePressed
bit BATTLE_SHIFT, [hl]
jr nz, .ToggleShift
jr .ToggleSet
.LeftPressed:
bit BATTLE_SHIFT, [hl]
jr z, .ToggleSet
jr .ToggleShift
.NonePressed:
bit BATTLE_SHIFT, [hl]
jr nz, .ToggleSet
.ToggleShift:
res BATTLE_SHIFT, [hl]
ld de, .Shift
jr .Display
.ToggleSet:
set BATTLE_SHIFT, [hl]
ld de, .Set
.Display:
hlcoord 11, 7
call PlaceString
and a
ret
; e43d1
.Shift:
db "SHIFT@"
.Set:
db "SET @"
; e43dd
Options_Sound: ; e43dd
ld hl, Options
ld a, [hJoyPressed]
bit D_LEFT_F, a
jr nz, .LeftPressed
bit D_RIGHT_F, a
jr z, .NonePressed
bit STEREO, [hl]
jr nz, .SetMono
jr .SetStereo
.LeftPressed:
bit STEREO, [hl]
jr z, .SetStereo
jr .SetMono
.NonePressed:
bit STEREO, [hl]
jr nz, .ToggleStereo
jr .ToggleMono
.SetMono:
res STEREO, [hl]
call RestartMapMusic
.ToggleMono:
ld de, .Mono
jr .Display
.SetStereo:
set STEREO, [hl]
call RestartMapMusic
.ToggleStereo:
ld de, .Stereo
.Display:
hlcoord 11, 9
call PlaceString
and a
ret
; e4416
.Mono:
db "MONO @"
.Stereo:
db "STEREO@"
; e4424
Options_Print: ; e4424
call GetPrinterSetting
ld a, [hJoyPressed]
bit D_LEFT_F, a
jr nz, .LeftPressed
bit D_RIGHT_F, a
jr z, .NonePressed
ld a, c
cp 4
jr c, .Increase
ld c, -1
.Increase:
inc c
ld a, e
jr .Save
.LeftPressed:
ld a, c
and a
jr nz, .Decrease
ld c, 5
.Decrease:
dec c
ld a, d
.Save:
ld b, a
ld [GBPrinter], a
.NonePressed:
ld b, $0
ld hl, .Strings
add hl, bc
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
hlcoord 11, 11
call PlaceString
and a
ret
; e445a
.Strings:
dw .Lightest
dw .Lighter
dw .Normal
dw .Darker
dw .Darkest
.Lightest:
db "LIGHTEST@"
.Lighter:
db "LIGHTER @"
.Normal:
db "NORMAL @"
.Darker:
db "DARKER @"
.Darkest:
db "DARKEST @"
; e4491
GetPrinterSetting: ; e4491
ld a, [GBPrinter] ; converts from the stored printer setting to 0,1,2,3,4
and a
jr z, .IsLightest
cp PRINT_LIGHTER
jr z, .IsLight
cp PRINT_DARKER
jr z, .IsDark
cp PRINT_DARKEST
jr z, .IsDarkest
ld c, 2 ; normal if none of the above
lb de, PRINT_LIGHTER, PRINT_DARKER ; the 2 values next to this setting
ret
.IsLightest:
ld c, 0
lb de, PRINT_DARKEST, PRINT_LIGHTER ; the 2 values next to this setting
ret
.IsLight:
ld c, 1
lb de, PRINT_LIGHTEST, PRINT_NORMAL ; the 2 values next to this setting
ret
.IsDark:
ld c, 3
lb de, PRINT_NORMAL, PRINT_DARKEST ; the 2 values next to this setting
ret
.IsDarkest:
ld c, 4
lb de, PRINT_DARKER, PRINT_LIGHTEST ; the 2 values next to this setting
ret
; e44c1
Options_MenuAccount: ; e44c1
ld hl, Options2
ld a, [hJoyPressed]
bit D_LEFT_F, a
jr nz, .LeftPressed
bit D_RIGHT_F, a
jr z, .NonePressed
bit MENU_ACCOUNT, [hl]
jr nz, .ToggleOff
jr .ToggleOn
.LeftPressed:
bit MENU_ACCOUNT, [hl]
jr z, .ToggleOn
jr .ToggleOff
.NonePressed:
bit MENU_ACCOUNT, [hl]
jr nz, .ToggleOn
.ToggleOff:
res MENU_ACCOUNT, [hl]
ld de, .Off
jr .Display
.ToggleOn:
set MENU_ACCOUNT, [hl]
ld de, .On
.Display:
hlcoord 11, 13
call PlaceString
and a
ret
; e44f2
.Off:
db "OFF@"
.On:
db "ON @"
; e44fa
Options_Frame: ; e44fa
ld hl, TextBoxFrame
ld a, [hJoyPressed]
bit D_LEFT_F, a
jr nz, .LeftPressed
bit D_RIGHT_F, a
jr nz, .RightPressed
and a
ret
.RightPressed:
ld a, [hl]
inc a
jr .Save
.LeftPressed:
ld a, [hl]
dec a
.Save:
and $7
ld [hl], a
UpdateFrame: ; e4512
ld a, [TextBoxFrame]
hlcoord 16, 15 ; where on the screen the number is drawn
add "1"
ld [hl], a
call LoadFontsExtra
and a
ret
; e4520
Options_Cancel: ; e4520
ld a, [hJoyPressed]
and A_BUTTON
jr nz, .Exit
and a
ret
.Exit:
scf
ret
; e452a
OptionsControl: ; e452a
ld hl, wJumptableIndex
ld a, [hJoyLast]
cp D_DOWN
jr z, .DownPressed
cp D_UP
jr z, .UpPressed
and a
ret
.DownPressed:
ld a, [hl] ; load the cursor position to a
cp $7 ; maximum number of items in option menu
jr nz, .CheckFive
ld [hl], $0
scf
ret
.CheckFive: ; I have no idea why this exists...
cp $5
jr nz, .Increase
ld [hl], $5
.Increase:
inc [hl]
scf
ret
.UpPressed:
ld a, [hl]
cp $6
jr nz, .NotSix
ld [hl], $5 ; Another thing where I'm not sure why it exists
scf
ret
.NotSix:
and a
jr nz, .Decrease
ld [hl], $8 ; number of option items +1
.Decrease:
dec [hl]
scf
ret
; e455c
Options_UpdateCursorPosition: ; e455c
hlcoord 1, 1
ld de, SCREEN_WIDTH
ld c, $10
.loop
ld [hl], " "
add hl, de
dec c
jr nz, .loop
hlcoord 1, 2
ld bc, 2 * SCREEN_WIDTH
ld a, [wJumptableIndex]
call AddNTimes
ld [hl], "▶"
ret
; e4579