mirror of
https://github.com/open-goal/jak-project
synced 2026-05-26 23:47:57 -04:00
806 lines
39 KiB
Common Lisp
806 lines
39 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
#|@file
|
|
Additional PC port specific file for overriding/expanding the progress menu
|
|
This gives us more freedom to write code how we want.
|
|
|#
|
|
|
|
(set! (-> *main-options-debug* options 9) (new 'static 'menu-main-menu-option :name (text-id progress-music-player) :scale #t :next-state 'music-player))
|
|
|
|
;; in jak 2, the options dont have to be all-caps anymore!
|
|
;; encode controller/display names - current bug waiting to happen
|
|
|
|
(define *title-pc*
|
|
(new 'static 'menu-option-list
|
|
:y-center #xc6
|
|
:y-space 30
|
|
:scale 0.82
|
|
:options (new 'static 'boxed-array :type menu-option
|
|
(new 'static 'menu-sub-menu-option
|
|
:name (text-id progress-title-new-game)
|
|
:scale #t
|
|
:next-state 'select-save-title
|
|
)
|
|
(new 'static 'menu-sub-menu-option :name (text-id progress-load-game) :scale #t :next-state 'select-load)
|
|
(new 'static 'menu-sub-menu-option
|
|
:name (text-id progress-title-options)
|
|
:scale #t
|
|
:next-state 'title-options
|
|
)
|
|
(new 'static 'menu-sub-menu-option
|
|
:name (text-id progress-root-secrets)
|
|
:scale #t
|
|
:next-state 'unlocked-secrets
|
|
)
|
|
(new 'static 'menu-exit-game-option
|
|
:name (text-id progress-quit)
|
|
:scale #f
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(define *options-pc* (new 'static 'menu-option-list
|
|
:y-center #xc6
|
|
:y-space 30
|
|
:scale 0.82
|
|
:options (new 'static 'boxed-array :type menu-option
|
|
(new 'static 'menu-sub-menu-option
|
|
:name (text-id progress-root-game-options)
|
|
:scale #t
|
|
:next-state 'game-options-title
|
|
)
|
|
(new 'static 'menu-sub-menu-option
|
|
:name (text-id progress-root-graphic-options)
|
|
:scale #t
|
|
:next-state 'graphic-options
|
|
)
|
|
(new 'static 'menu-sub-menu-option
|
|
:name (text-id progress-root-sound-options)
|
|
:scale #t
|
|
:next-state 'sound-options
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; TODO - there is a bug where if you restore default binds and that changes your `X` bind,
|
|
;; the next X input is ignored, figure this out eventually / make an issue for it.
|
|
(defmacro progress-new-generic-keybinds-page-link ()
|
|
`(progress-new-generic-link-to-scrolling-page (text-id progress-menu-reassign-binds)
|
|
(progress-new-generic-link-to-keybind-details-page (text-id progress-reassign-binds-controller)
|
|
:should-disable? (lambda () (<= (pc-get-controller-count) 0))
|
|
:device-type controller
|
|
:entries (select l3 r3 start dpad-up dpad-right dpad-down dpad-left l2 r2 l1 r1 triangle circle cross square)
|
|
:confirm ((text-id progress-restore-defaults) (lambda () (pc-reset-bindings-to-defaults! 0 0))))
|
|
(progress-new-generic-link-to-keybind-details-page (text-id progress-reassign-binds-keyboard)
|
|
:should-disable? (lambda () (not (-> *pc-settings* keyboard-enabled?)))
|
|
:device-type keyboard
|
|
:entries (l-analog-up l-analog-down l-analog-left l-analog-right r-analog-up r-analog-down r-analog-left r-analog-left r-analog-right select l3 r3 start dpad-up dpad-right dpad-down dpad-left l2 r2 l1 r1 triangle circle cross square)
|
|
:confirm ((text-id progress-restore-defaults) (lambda () (pc-reset-bindings-to-defaults! 0 1))))
|
|
(progress-new-generic-link-to-keybind-details-page (text-id progress-reassign-binds-mouse)
|
|
:should-disable? (lambda () (not (-> *pc-settings* mouse-enabled?)))
|
|
:device-type mouse
|
|
:entries (select l3 r3 start dpad-up dpad-right dpad-down dpad-left l2 r2 l1 r1 triangle circle cross square)
|
|
:confirm ((text-id progress-restore-defaults) (lambda () (pc-reset-bindings-to-defaults! 0 2))))))
|
|
|
|
(define *game-options-pc*
|
|
(progress-new-generic-scrolling-page (text-id progress-root-game-options)
|
|
(progress-new-generic-link-to-scrolling-page (text-id progress-menu-input-options)
|
|
(progress-new-generic-link-to-scrolling-page (text-id progress-camera-options)
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-camera-options-first-horz)
|
|
:truthy-text (text-id progress-normal)
|
|
:falsey-text (text-id progress-inverted)
|
|
:get-value-fn (lambda () (-> *pc-settings* first-camera-h-inverted?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* first-camera-h-inverted?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-camera-options-first-vert)
|
|
:truthy-text (text-id progress-normal)
|
|
:falsey-text (text-id progress-inverted)
|
|
:get-value-fn (lambda () (-> *pc-settings* first-camera-v-inverted?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* first-camera-v-inverted?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-camera-options-third-horz)
|
|
:truthy-text (text-id progress-normal)
|
|
:falsey-text (text-id progress-inverted)
|
|
:get-value-fn (lambda () (-> *pc-settings* third-camera-h-inverted?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* third-camera-h-inverted?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-camera-options-third-vert)
|
|
:truthy-text (text-id progress-normal)
|
|
:falsey-text (text-id progress-inverted)
|
|
:get-value-fn (lambda () (-> *pc-settings* third-camera-v-inverted?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* third-camera-v-inverted?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-confirm-option
|
|
:name (text-id progress-restore-defaults)
|
|
:on-confirm (lambda ((val symbol))
|
|
(reset-camera *pc-settings* #t)
|
|
(commit-to-file *pc-settings*))))
|
|
(progress-new-generic-link-to-scrolling-page (text-id progress-menu-controller-options) :should-disable? (lambda () (<= (pc-get-controller-count) 0))
|
|
(new 'static 'menu-generic-carousel-option
|
|
:name (text-id progress-controller-options-select-controller)
|
|
:get-max-size-fn (lambda () (pc-get-controller-count))
|
|
:get-item-label-fn (lambda ((index int))
|
|
(pc-get-controller-name index *pc-cpp-temp-string*)
|
|
*pc-cpp-temp-string*)
|
|
:get-item-index-fn (lambda () 0)
|
|
:on-confirm (lambda ((index int)) (pc-set-controller! 0 index)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-vibration)
|
|
:should-disable? (lambda () (not (pc-current-controller-has-rumble?)))
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *setting-control* user-default vibration))
|
|
:on-confirm (lambda ((val symbol)) (set! (-> *setting-control* user-default vibration) val)))
|
|
(new 'static 'menu-generic-slider-option
|
|
:name (text-id progress-controller-options-analog-deadzone)
|
|
:min-value 0.0
|
|
:max-value 1.0
|
|
:step 0.01
|
|
:show-decimal? #t
|
|
:get-value-fn (lambda () (-> *pc-settings* stick-deadzone))
|
|
:on-confirm (lambda ((val float))
|
|
(set! (-> *pc-settings* stick-deadzone) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-controller-options-ignore-if-unfocused)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* ignore-controller-win-unfocused?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* ignore-controller-win-unfocused?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-controller-options-led-hp)
|
|
:should-disable? (lambda () (not (pc-current-controller-has-led?)))
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* controller-led-hp?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* controller-led-hp?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-controller-options-led-state)
|
|
:should-disable? (lambda () (not (pc-current-controller-has-led?)))
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* controller-led-eco?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* controller-led-eco?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-confirm-option
|
|
:name (text-id progress-restore-defaults)
|
|
:on-confirm (lambda ((val symbol))
|
|
(reset-input *pc-settings* 'controller #t)
|
|
(set-ignore-controller-in-bg! *pc-settings* (-> *pc-settings* ignore-controller-win-unfocused?))
|
|
(commit-to-file *pc-settings*))))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-input-options-enable-keyboard)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* keyboard-enabled?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* keyboard-enabled?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-input-options-enable-mouse)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* mouse-enabled?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* mouse-enabled?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(progress-new-generic-link-to-scrolling-page (text-id progress-menu-mouse-options) :should-disable? (lambda () (not (-> *pc-settings* mouse-enabled?)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-mouse-options-track-camera)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* mouse-camera?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* mouse-camera?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-slider-option
|
|
:name (text-id progress-mouse-options-horz-sens)
|
|
:should-disable? (lambda () (not (-> *pc-settings* mouse-camera?)))
|
|
:min-value -30.0
|
|
:max-value 30.0
|
|
:step 0.10
|
|
:show-decimal? #t
|
|
:get-value-fn (lambda () (-> *pc-settings* mouse-xsens))
|
|
:on-confirm (lambda ((val float))
|
|
(set! (-> *pc-settings* mouse-xsens) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-slider-option
|
|
:name (text-id progress-mouse-options-vert-sens)
|
|
:should-disable? (lambda () (not (-> *pc-settings* mouse-camera?)))
|
|
:min-value -30.0
|
|
:max-value 30.0
|
|
:step 0.10
|
|
:show-decimal? #t
|
|
:get-value-fn (lambda () (-> *pc-settings* mouse-ysens))
|
|
:on-confirm (lambda ((val float))
|
|
(set! (-> *pc-settings* mouse-ysens) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-mouse-options-player-movement)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* mouse-movement?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* mouse-movement?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-confirm-option
|
|
:name (text-id progress-restore-defaults)
|
|
:on-confirm (lambda ((val symbol))
|
|
(reset-input *pc-settings* 'mouse #t)
|
|
(update-mouse-controls! *pc-settings*)
|
|
(commit-to-file *pc-settings*))))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-input-options-auto-hide-cursor)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* auto-hide-cursor?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* auto-hide-cursor?) val)
|
|
(update-mouse-controls! *pc-settings*)
|
|
(commit-to-file *pc-settings*)))
|
|
(progress-new-generic-keybinds-page-link)
|
|
(new 'static 'menu-generic-confirm-option
|
|
:name (text-id progress-restore-defaults)
|
|
:on-confirm (lambda ((val symbol))
|
|
(reset-input *pc-settings* 'input #t)
|
|
(set-enable-keyboard! *pc-settings* (-> *pc-settings* keyboard-enabled?))
|
|
(update-mouse-controls! *pc-settings*)
|
|
(commit-to-file *pc-settings*))))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-subtitles)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *setting-control* user-default subtitle))
|
|
:on-confirm (lambda ((val symbol)) (set! (-> *setting-control* user-default subtitle) val)))
|
|
(new 'static 'menu-generic-carousel-option
|
|
:name (text-id progress-sound-subtitle-language)
|
|
:items (new 'static 'boxed-array :type text-id
|
|
(text-id language-name-english)
|
|
(text-id language-name-french)
|
|
(text-id language-name-german)
|
|
(text-id language-name-spanish)
|
|
(text-id language-name-italian)
|
|
(text-id language-name-japanese)
|
|
(text-id language-name-korean)
|
|
(text-id language-name-english-uk))
|
|
:get-item-index-fn (lambda () (-> *setting-control* user-default subtitle-language))
|
|
:on-confirm (lambda ((index int)) (set! (-> *setting-control* user-default subtitle-language)
|
|
(the-as language-enum index))))
|
|
(new 'static 'menu-generic-carousel-option
|
|
:name (text-id progress-sound-language)
|
|
:items (new 'static 'boxed-array :type text-id
|
|
(text-id language-name-english)
|
|
(text-id language-name-french)
|
|
(text-id language-name-german)
|
|
(text-id language-name-spanish)
|
|
(text-id language-name-italian)
|
|
(text-id language-name-japanese)
|
|
(text-id language-name-korean)
|
|
(text-id language-name-english-uk))
|
|
:get-item-index-fn (lambda () (-> *setting-control* user-default language))
|
|
:on-confirm (lambda ((index int)) (set! (-> *setting-control* user-default language) (the-as language-enum index))
|
|
;; NOTE - this doesn't actually work (naughty dog tried it too in their progress code)
|
|
;; fix it eventually
|
|
(load-level-text-files (the-as int (-> *setting-control* user-default language)))))
|
|
(progress-new-generic-link-to-scrolling-page (text-id progress-misc-game-options)
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-discord-rpc)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* discord-rpc?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* discord-rpc?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-speedrunner-mode)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* speedrunner-mode?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* speedrunner-mode?) val)
|
|
;; store and restore pc-settings cheats
|
|
;; TODO - when cheats menus are actually added, update the backup whenever one is changed
|
|
(if (-> *pc-settings* speedrunner-mode?)
|
|
(set! (-> *pc-settings* cheats-backup) (-> *pc-settings* cheats))
|
|
(set! (-> *pc-settings* cheats) (-> *pc-settings* cheats-backup)))
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-fast-progress)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* fast-progress?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* fast-progress?) val)
|
|
(commit-to-file *pc-settings*))))))
|
|
|
|
(define *game-options-title-pc*
|
|
(progress-new-generic-scrolling-page (text-id progress-root-game-options)
|
|
(progress-new-generic-link-to-scrolling-page (text-id progress-menu-input-options)
|
|
(progress-new-generic-link-to-scrolling-page (text-id progress-camera-options)
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-camera-options-first-horz)
|
|
:truthy-text (text-id progress-normal)
|
|
:falsey-text (text-id progress-inverted)
|
|
:get-value-fn (lambda () (-> *pc-settings* first-camera-h-inverted?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* first-camera-h-inverted?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-camera-options-first-vert)
|
|
:truthy-text (text-id progress-normal)
|
|
:falsey-text (text-id progress-inverted)
|
|
:get-value-fn (lambda () (-> *pc-settings* first-camera-v-inverted?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* first-camera-v-inverted?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-camera-options-third-horz)
|
|
:truthy-text (text-id progress-normal)
|
|
:falsey-text (text-id progress-inverted)
|
|
:get-value-fn (lambda () (-> *pc-settings* third-camera-h-inverted?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* third-camera-h-inverted?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-camera-options-third-vert)
|
|
:truthy-text (text-id progress-normal)
|
|
:falsey-text (text-id progress-inverted)
|
|
:get-value-fn (lambda () (-> *pc-settings* third-camera-v-inverted?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* third-camera-v-inverted?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-confirm-option
|
|
:name (text-id progress-restore-defaults)
|
|
:on-confirm (lambda ((val symbol))
|
|
(reset-camera *pc-settings* #t)
|
|
(commit-to-file *pc-settings*))))
|
|
(progress-new-generic-link-to-scrolling-page (text-id progress-menu-controller-options) :should-disable? (lambda () (<= (pc-get-controller-count) 0))
|
|
(new 'static 'menu-generic-carousel-option
|
|
:name (text-id progress-controller-options-select-controller)
|
|
:get-max-size-fn (lambda () (pc-get-controller-count))
|
|
:get-item-label-fn (lambda ((index int))
|
|
(pc-get-controller-name index *pc-cpp-temp-string*)
|
|
*pc-cpp-temp-string*)
|
|
:get-item-index-fn (lambda () 0)
|
|
:on-confirm (lambda ((index int)) (pc-set-controller! 0 index)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-vibration)
|
|
:should-disable? (lambda () (not (pc-current-controller-has-rumble?)))
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *setting-control* user-default vibration))
|
|
:on-confirm (lambda ((val symbol)) (set! (-> *setting-control* user-default vibration) val)))
|
|
(new 'static 'menu-generic-slider-option
|
|
:name (text-id progress-controller-options-analog-deadzone)
|
|
:min-value 0.0
|
|
:max-value 1.0
|
|
:step 0.01
|
|
:show-decimal? #t
|
|
:get-value-fn (lambda () (-> *pc-settings* stick-deadzone))
|
|
:on-confirm (lambda ((val float))
|
|
(set! (-> *pc-settings* stick-deadzone) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-controller-options-ignore-if-unfocused)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* ignore-controller-win-unfocused?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* ignore-controller-win-unfocused?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-controller-options-led-hp)
|
|
:should-disable? (lambda () (not (pc-current-controller-has-led?)))
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* controller-led-hp?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* controller-led-hp?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-controller-options-led-state)
|
|
:should-disable? (lambda () (not (pc-current-controller-has-led?)))
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* controller-led-eco?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* controller-led-eco?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-confirm-option
|
|
:name (text-id progress-restore-defaults)
|
|
:on-confirm (lambda ((val symbol))
|
|
(reset-input *pc-settings* 'controller #t)
|
|
(set-ignore-controller-in-bg! *pc-settings* (-> *pc-settings* ignore-controller-win-unfocused?))
|
|
(commit-to-file *pc-settings*))))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-input-options-enable-keyboard)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* keyboard-enabled?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* keyboard-enabled?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-input-options-enable-mouse)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* mouse-enabled?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* mouse-enabled?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(progress-new-generic-link-to-scrolling-page (text-id progress-menu-mouse-options) :should-disable? (lambda () (not (-> *pc-settings* mouse-enabled?)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-mouse-options-track-camera)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* mouse-camera?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* mouse-camera?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-slider-option
|
|
:name (text-id progress-mouse-options-horz-sens)
|
|
:should-disable? (lambda () (not (-> *pc-settings* mouse-camera?)))
|
|
:min-value -30.0
|
|
:max-value 30.0
|
|
:step 0.10
|
|
:show-decimal? #t
|
|
:get-value-fn (lambda () (-> *pc-settings* mouse-xsens))
|
|
:on-confirm (lambda ((val float))
|
|
(set! (-> *pc-settings* mouse-xsens) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-slider-option
|
|
:name (text-id progress-mouse-options-vert-sens)
|
|
:should-disable? (lambda () (not (-> *pc-settings* mouse-camera?)))
|
|
:min-value -30.0
|
|
:max-value 30.0
|
|
:step 0.10
|
|
:show-decimal? #t
|
|
:get-value-fn (lambda () (-> *pc-settings* mouse-ysens))
|
|
:on-confirm (lambda ((val float))
|
|
(set! (-> *pc-settings* mouse-ysens) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-mouse-options-player-movement)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* mouse-movement?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* mouse-movement?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-confirm-option
|
|
:name (text-id progress-restore-defaults)
|
|
:on-confirm (lambda ((val symbol))
|
|
(reset-input *pc-settings* 'mouse #t)
|
|
(update-mouse-controls! *pc-settings*)
|
|
(commit-to-file *pc-settings*))))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-input-options-auto-hide-cursor)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* auto-hide-cursor?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* auto-hide-cursor?) val)
|
|
(update-mouse-controls! *pc-settings*)
|
|
(commit-to-file *pc-settings*)))
|
|
(progress-new-generic-keybinds-page-link)
|
|
(new 'static 'menu-generic-confirm-option
|
|
:name (text-id progress-restore-defaults)
|
|
:on-confirm (lambda ((val symbol))
|
|
(reset-input *pc-settings* 'input #t)
|
|
(set-enable-keyboard! *pc-settings* (-> *pc-settings* keyboard-enabled?))
|
|
(update-mouse-controls! *pc-settings*)
|
|
(commit-to-file *pc-settings*))))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-subtitles)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *setting-control* user-default subtitle))
|
|
:on-confirm (lambda ((val symbol)) (set! (-> *setting-control* user-default subtitle) val)))
|
|
(new 'static 'menu-generic-carousel-option
|
|
:name (text-id progress-sound-subtitle-language)
|
|
:items (new 'static 'boxed-array :type text-id
|
|
(text-id language-name-english)
|
|
(text-id language-name-french)
|
|
(text-id language-name-german)
|
|
(text-id language-name-spanish)
|
|
(text-id language-name-italian)
|
|
(text-id language-name-japanese)
|
|
(text-id language-name-korean)
|
|
(text-id language-name-english-uk))
|
|
:get-item-index-fn (lambda () (-> *setting-control* user-default subtitle-language))
|
|
:on-confirm (lambda ((index int)) (set! (-> *setting-control* user-default subtitle-language)
|
|
(the-as language-enum index))))
|
|
(new 'static 'menu-generic-carousel-option
|
|
:name (text-id progress-sound-language)
|
|
:items (new 'static 'boxed-array :type text-id
|
|
(text-id language-name-english)
|
|
(text-id language-name-french)
|
|
(text-id language-name-german)
|
|
(text-id language-name-spanish)
|
|
(text-id language-name-italian)
|
|
(text-id language-name-japanese)
|
|
(text-id language-name-korean)
|
|
(text-id language-name-english-uk))
|
|
:get-item-index-fn (lambda () (-> *setting-control* user-default language))
|
|
:on-confirm (lambda ((index int)) (set! (-> *setting-control* user-default language) (the-as language-enum index))
|
|
;; NOTE - this doesn't actually work (naughty dog tried it too in their progress code)
|
|
;; fix it eventually
|
|
(load-level-text-files (the-as int (-> *setting-control* user-default language)))))
|
|
(progress-new-generic-link-to-scrolling-page (text-id progress-misc-game-options)
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-discord-rpc)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* discord-rpc?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* discord-rpc?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-speedrunner-mode)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* speedrunner-mode?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* speedrunner-mode?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-fast-airlock)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* fast-airlock?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* fast-airlock?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-fast-elevator)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* fast-elevator?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* fast-elevator?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-fast-progress)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* fast-progress?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* fast-progress?) val)
|
|
(commit-to-file *pc-settings*))))))
|
|
|
|
|
|
;; TODO - migrate this menu as well
|
|
;; graphic options
|
|
;; resolution
|
|
|
|
(define *msaa-options* (new 'static 'boxed-array :type int16 1 2 4 8 16))
|
|
(define *frame-rate-options* (new 'static 'boxed-array :type int16 60 75 120 144 165 240))
|
|
(define *frame-rate-disclaimer-seen?* #f)
|
|
|
|
(define *graphic-options-pc*
|
|
(progress-new-generic-scrolling-page (text-id progress-root-graphic-options)
|
|
(progress-new-generic-link-to-scrolling-page (text-id progress-graphics-ps2)
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-lod-bg)
|
|
:truthy-text (text-id progress-lod-low)
|
|
:falsey-text (text-id progress-lod-high)
|
|
:get-value-fn (lambda () (> (-> *pc-settings* lod-force-tfrag) 0))
|
|
:on-confirm (lambda ((val symbol))
|
|
(cond
|
|
(val
|
|
(set! (-> *pc-settings* lod-force-tfrag) 2)
|
|
(set! (-> *pc-settings* lod-force-tie) 2)
|
|
)
|
|
(else
|
|
(set! (-> *pc-settings* lod-force-tfrag) 0)
|
|
(set! (-> *pc-settings* lod-force-tie) 0)
|
|
))
|
|
(commit-to-file *pc-settings*)))
|
|
(static-progress-generic-pc-settings-lod-default-high-boolean (text-id progress-lod-fg) (-> *pc-settings* ps2-lod-dist?))
|
|
(static-progress-generic-pc-settings-on-off-boolean (text-id progress-ps2-parts) (-> *pc-settings* ps2-parts?))
|
|
(static-progress-generic-pc-settings-shadows-normal-extended-boolean (text-id progress-shadows) (-> *pc-settings* ps2-shadow?))
|
|
(static-progress-generic-pc-settings-on-off-boolean (text-id progress-hires-sky) (-> *pc-settings* hires-clouds?))
|
|
)
|
|
(new 'static 'menu-generic-carousel-option
|
|
:name (text-id progress-graphics-display)
|
|
:get-item-index-fn (lambda () (-> *pc-settings* monitor))
|
|
:get-max-size-fn (lambda () (pc-get-display-count))
|
|
:get-item-label-fn (lambda ((index int))
|
|
(let ((name (pc-get-display-name index *pc-cpp-temp-string*)))
|
|
(if name
|
|
(string-format "(~D) ~S" index *pc-cpp-temp-string*)
|
|
(string-format "Display ~D" index)
|
|
)
|
|
)
|
|
)
|
|
:on-confirm (lambda ((index int))
|
|
(set-monitor! *pc-settings* index)
|
|
(commit-to-file *pc-settings*)
|
|
)
|
|
:should-disable? (lambda () (nmember (the basic (-> *pc-settings* display-mode)) '(windowed #f)))
|
|
)
|
|
(new 'static 'menu-generic-carousel-option
|
|
:name (text-id progress-display-mode)
|
|
:items (new 'static 'boxed-array :type text-id
|
|
(text-id progress-windowed)
|
|
(text-id progress-fullscreen)
|
|
(text-id progress-borderless)
|
|
)
|
|
:get-item-index-fn (lambda ()
|
|
(case (-> *pc-settings* display-mode)
|
|
(('windowed #f) 0)
|
|
(('fullscreen) 1)
|
|
(('borderless) 2)
|
|
)
|
|
)
|
|
:on-confirm (lambda ((index int))
|
|
(case index
|
|
((0) (set-display-mode! *pc-settings* 'windowed #t))
|
|
((1) (set-display-mode! *pc-settings* 'fullscreen #t))
|
|
((2) (set-display-mode! *pc-settings* 'borderless #t))
|
|
)
|
|
(commit-to-file *pc-settings*)
|
|
)
|
|
)
|
|
(new 'static 'menu-generic-carousel-option
|
|
:name (text-id progress-aspect-ratio)
|
|
:items (new 'static 'boxed-array :type text-id
|
|
(text-id progress-aspect-ratio-4x3)
|
|
(text-id progress-aspect-ratio-16x9)
|
|
(text-id progress-aspect-ratio-auto)
|
|
(text-id progress-aspect-ratio-custom)
|
|
)
|
|
:get-item-index-fn (lambda ()
|
|
(cond
|
|
((not (-> *pc-settings* use-vis?))
|
|
(if (-> *pc-settings* aspect-ratio-auto?) 2 3)
|
|
)
|
|
(else
|
|
(case (get-aspect-ratio)
|
|
(('aspect16x9) 1)
|
|
(else 0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:on-confirm (lambda ((index int))
|
|
(case index
|
|
((0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(false! (-> *setting-control* user-current aspect-ratio))
|
|
)
|
|
(set! (-> *setting-control* user-default aspect-ratio) 'aspect4x3)
|
|
(true! (-> *pc-settings* use-vis?))
|
|
(commit-to-file *pc-settings*)
|
|
)
|
|
((1)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(false! (-> *setting-control* user-current aspect-ratio))
|
|
)
|
|
(set! (-> *setting-control* user-default aspect-ratio) 'aspect16x9)
|
|
(true! (-> *pc-settings* use-vis?))
|
|
(commit-to-file *pc-settings*)
|
|
)
|
|
((2)
|
|
(set! (-> *setting-control* user-default aspect-ratio) 'aspect4x3)
|
|
(true! (-> *pc-settings* aspect-ratio-auto?))
|
|
(false! (-> *pc-settings* use-vis?))
|
|
(commit-to-file *pc-settings*)
|
|
)
|
|
((3)
|
|
(push-and-set-state (-> *progress-process* 0) 'aspect-ratio-custom)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(new 'static 'menu-generic-carousel-option
|
|
:name (text-id progress-frame-rate)
|
|
:get-item-index-fn (lambda ()
|
|
(case (-> *pc-settings* target-fps)
|
|
((60) 0)
|
|
((75) 1)
|
|
((120) 2)
|
|
((144) 3)
|
|
((165) 4)
|
|
((240) 5)
|
|
)
|
|
)
|
|
:get-max-size-fn (lambda () (-> *frame-rate-options* length))
|
|
:get-item-label-fn (lambda ((index int)) (string-format "~D" (-> *frame-rate-options* index)))
|
|
:on-confirm (lambda ((index int))
|
|
(cond
|
|
((or (zero? index) (= (-> *frame-rate-options* index) (-> *pc-settings* target-fps)) *frame-rate-disclaimer-seen?*)
|
|
(set-frame-rate! *pc-settings* (-> *frame-rate-options* index) #t)
|
|
(commit-to-file *pc-settings*)
|
|
)
|
|
(else
|
|
(defun-extern set-progress-frame-rate-index int int)
|
|
(set-progress-frame-rate-index index)
|
|
(push-and-set-state (-> *progress-process* 0) 'fps-disclaimer)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(new 'static 'menu-generic-boolean-option
|
|
:name (text-id progress-vsync)
|
|
:truthy-text (text-id progress-on)
|
|
:falsey-text (text-id progress-off)
|
|
:get-value-fn (lambda () (-> *pc-settings* vsync?))
|
|
:on-confirm (lambda ((val symbol))
|
|
(set! (-> *pc-settings* vsync?) val)
|
|
(commit-to-file *pc-settings*)))
|
|
(new 'static 'menu-generic-carousel-option
|
|
:name (text-id progress-msaa)
|
|
:get-item-index-fn (lambda ()
|
|
(case (-> *pc-settings* gfx-msaa)
|
|
((1) 0)
|
|
((2) 1)
|
|
((4) 2)
|
|
((8) 3)
|
|
((16) 4)
|
|
)
|
|
)
|
|
:get-max-size-fn (lambda () (-> *msaa-options* length))
|
|
:get-item-label-fn (lambda ((index int))
|
|
(if (zero? index)
|
|
(lookup-text! *common-text* (text-id progress-graphics-msaa-off) #f)
|
|
(string-format (lookup-text! *common-text* (text-id progress-msaa-x) #f) (-> *msaa-options* index)))
|
|
)
|
|
:on-confirm (lambda ((index int))
|
|
(set! (-> *pc-settings* gfx-msaa) (the int (pow 2.0 (the float index))))
|
|
(commit-to-file *pc-settings*)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(define *frame-rate-disclaimer-options*
|
|
(new 'static 'menu-option-list
|
|
:y-center 198
|
|
:y-space 34
|
|
:scale 0.82
|
|
:options (new 'static 'boxed-array :type menu-option (new 'static 'menu-frame-rate-disclaimer-option))
|
|
)
|
|
)
|
|
|
|
(define *aspect-ratio-custom-options*
|
|
(new 'static 'menu-option-list
|
|
:y-center 198
|
|
:y-space 34
|
|
:scale 0.82
|
|
:options (new 'static 'boxed-array :type menu-option
|
|
(new 'static 'menu-aspect-ratio-custom-option :name (text-id progress-aspect-ratio-custom-title))
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
(define *music-player-options*
|
|
(new 'static 'menu-option-list
|
|
:y-center 198
|
|
:y-space 34
|
|
:scale 0.82
|
|
:options (new 'static 'boxed-array :type menu-option
|
|
(new 'static 'menu-music-player-option :name (text-id progress-music-player))
|
|
)
|
|
)
|
|
)
|
|
|
|
|