mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-09-09 09:51:34 -07:00
31cce83e9b
(This is not expected to be their final location, but it makes them easier to relocate when necessary, and easier for users to edit until the whole project's file structure is finalized.)
584 lines
8.3 KiB
NASM
Executable File
584 lines
8.3 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
|
|
|
|
|
|
const_def
|
|
const TEXT_SPEED_FAST ; 0
|
|
const TEXT_SPEED_MED ; 1
|
|
const TEXT_SPEED_SLOW ; 2
|
|
|
|
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 TEXT_SPEED_SLOW
|
|
jr c, .Increase
|
|
ld c, TEXT_SPEED_FAST +- 1
|
|
|
|
.Increase:
|
|
inc c
|
|
ld a, e
|
|
jr .Save
|
|
|
|
.LeftPressed:
|
|
ld a, c
|
|
and a
|
|
jr nz, .Decrease
|
|
ld c, TEXT_SPEED_SLOW + 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:
|
|
; entries correspond to TEXT_SPEED_* constants
|
|
dw .Fast
|
|
dw .Mid
|
|
dw .Slow
|
|
|
|
.Fast: db "FAST@"
|
|
.Mid: db "MID @"
|
|
.Slow: db "SLOW@"
|
|
; e4346
|
|
|
|
|
|
GetTextSpeed: ; e4346
|
|
; converts TEXT_DELAY_* value in a to TEXT_SPEED_* value in c,
|
|
; with previous/next TEXT_DELAY_* values in d/e
|
|
ld a, [Options]
|
|
and $7
|
|
cp TEXT_DELAY_SLOW
|
|
jr z, .slow
|
|
cp TEXT_DELAY_FAST
|
|
jr z, .fast
|
|
; none of the above
|
|
ld c, TEXT_SPEED_MED
|
|
lb de, TEXT_DELAY_FAST, TEXT_DELAY_SLOW
|
|
ret
|
|
|
|
.slow
|
|
ld c, TEXT_SPEED_SLOW
|
|
lb de, TEXT_DELAY_MED, TEXT_DELAY_FAST
|
|
ret
|
|
|
|
.fast
|
|
ld c, TEXT_SPEED_FAST
|
|
lb de, TEXT_DELAY_SLOW, TEXT_DELAY_MED
|
|
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
|
|
|
|
|
|
const_def
|
|
const PRINT_LIGHTEST ; 0
|
|
const PRINT_LIGHTER ; 1
|
|
const PRINT_NORMAL ; 2
|
|
const PRINT_DARKER ; 3
|
|
const PRINT_DARKEST ; 4
|
|
|
|
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 PRINT_DARKEST
|
|
jr c, .Increase
|
|
ld c, PRINT_LIGHTEST - 1
|
|
|
|
.Increase:
|
|
inc c
|
|
ld a, e
|
|
jr .Save
|
|
|
|
.LeftPressed:
|
|
ld a, c
|
|
and a
|
|
jr nz, .Decrease
|
|
ld c, PRINT_DARKEST + 1
|
|
|
|
.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:
|
|
; entries correspond to PRINT_* constants
|
|
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
|
|
; converts GBPRINTER_* value in a to PRINT_* value in c,
|
|
; with previous/next GBPRINTER_* values in d/e
|
|
ld a, [GBPrinter]
|
|
and a
|
|
jr z, .IsLightest
|
|
cp GBPRINTER_LIGHTER
|
|
jr z, .IsLight
|
|
cp GBPRINTER_DARKER
|
|
jr z, .IsDark
|
|
cp GBPRINTER_DARKEST
|
|
jr z, .IsDarkest
|
|
; none of the above
|
|
ld c, PRINT_NORMAL
|
|
lb de, GBPRINTER_LIGHTER, GBPRINTER_DARKER
|
|
ret
|
|
|
|
.IsLightest:
|
|
ld c, PRINT_LIGHTEST
|
|
lb de, GBPRINTER_DARKEST, GBPRINTER_LIGHTER
|
|
ret
|
|
|
|
.IsLight:
|
|
ld c, PRINT_LIGHTER
|
|
lb de, GBPRINTER_LIGHTEST, GBPRINTER_NORMAL
|
|
ret
|
|
|
|
.IsDark:
|
|
ld c, PRINT_DARKER
|
|
lb de, GBPRINTER_NORMAL, GBPRINTER_DARKEST
|
|
ret
|
|
|
|
.IsDarkest:
|
|
ld c, PRINT_DARKEST
|
|
lb de, GBPRINTER_DARKER, GBPRINTER_LIGHTEST
|
|
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
|