jak2: add missing pc options to progress menu (#3167)

This commit is contained in:
Hat Kid
2023-11-09 17:24:50 +01:00
committed by GitHub
parent a80b4f1b97
commit b2453fe23b
21 changed files with 1122 additions and 670 deletions
+16 -1
View File
@@ -62,6 +62,14 @@
(uk-english)
)
(defenum runtime-exit-status
:type uint32
(running)
(restart-runtime)
(exit)
(restart-in-debug)
)
(define-extern *debug-segment* symbol)
(define-extern nothing (function none))
(define-extern _format (function _varargs_ object))
@@ -92,7 +100,7 @@
(define-extern file-stream-write (function file-stream pointer uint uint))
(define-extern file-stream-close (function file-stream file-stream))
(define-extern new-dynamic-structure (function symbol type int structure))
(define-extern kernel-shutdown (function none))
(define-extern kernel-shutdown (function runtime-exit-status none))
(define-extern scf-get-timeout (function int))
(define-extern scf-get-inactive-timeout (function int))
(define-extern syncv (function int int))
@@ -7445,6 +7453,13 @@
(trick-darkjak-bomb0 #x1330)
(trick-darkjak-bomb1 #x1331)
(trick-darkjak-giant #x1332)
(progress-graphics-ps2 #x1333)
(progress-graphics-actor-culling #x1334)
(progress-graphics-force-envmap #x1335)
(progress-fast-progress #x1336)
(progress-graphics-ps2-lod-dist #x1337)
(progress-graphics-msaa-off #x1338)
(progress-graphics-display #x1339)
)
;; ---text-id-h:text-id
@@ -81,7 +81,7 @@
"1246": "Japan (SCEI)",
"1247": "Korea (SCEK)",
"1248": "MSAA",
"1249": "~DX",
"1249": "~Dx",
"124a": "Controller LED Options",
"124b": "Show Player State",
"124c": "Show Amount of Health",
@@ -179,5 +179,12 @@
"132f": "Dark Jak",
"1330": "Dark Bomb",
"1331": "Dark Blast",
"1332": "Dark Giant"
"1332": "Dark Giant",
"1333": "PS2 Options",
"1334": "Actor Culling",
"1335": "Force Environment Mapping",
"1336": "Fast Progress Menu",
"1337": "PS2 LOD Distance",
"1338": "Off",
"1339": "Display"
}
@@ -340,8 +340,9 @@
(when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG)))
(let ((f28-14 (analog-input (the-as int (-> *cpad-list* cpads arg3 leftx)) 128.0 48.0 110.0 -1.0))
(f30-14 (analog-input (the-as int (-> *cpad-list* cpads arg3 lefty)) 128.0 48.0 110.0 -1.0))
(f26-0 (analog-input (the-as int (-> *cpad-list* cpads arg3 rightx)) 128.0 48.0 110.0 -1.0))
(f0-60 (analog-input (the-as int (-> *cpad-list* cpads arg3 righty)) 128.0 48.0 110.0 -1.0))
;; og:preserve-this
(f26-0 (analog-input-horizontal-first (the-as int (-> *cpad-list* cpads arg3 rightx)) 128.0 48.0 110.0 -1.0))
(f0-60 (analog-input-vertical-first (the-as int (-> *cpad-list* cpads arg3 righty)) 128.0 48.0 110.0 -1.0))
)
(cond
((and (not s3-0) (cpad-hold? arg3 r2))
+32 -19
View File
@@ -500,7 +500,8 @@
(s5-0 (new-stack-matrix0))
)
(when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG)))
(let ((f30-0 (analog-input
;; og:preserve-this
(let ((f30-0 (analog-input-horizontal-first
(the-as int (+ (-> *cpad-list* cpads 0 rightx) -256 (-> *cpad-list* cpads 0 leftx)))
0.0
48.0
@@ -508,7 +509,7 @@
-1.0
)
)
(f0-0 (analog-input
(f0-0 (analog-input-vertical-first
(the-as int (+ (-> *cpad-list* cpads 0 righty) -256 (-> *cpad-list* cpads 0 lefty)))
0.0
48.0
@@ -517,24 +518,27 @@
)
)
)
(set! (-> s4-0 y) (- (-> s4-0 y) (* (- f30-0) (-> *CAM_EYE-bank* rot-speed))))
(set! (-> s4-0 x) (- (-> s4-0 x) (* (- f0-0) (-> *CAM_EYE-bank* rot-speed))))
;; og:preserve-this changed for high fps
(set! (-> s4-0 y) (- (-> s4-0 y) (* (- f30-0) (* (-> *display* base-clock time-adjust-ratio) (-> *CAM_EYE-bank* rot-speed)))))
(set! (-> s4-0 x) (- (-> s4-0 x) (* (- f0-0) (* (-> *display* base-clock time-adjust-ratio) (-> *CAM_EYE-bank* rot-speed)))))
)
)
;; og:preserve-this changed for high fps
(cond
((< (-> *CAM_EYE-bank* rot-speed) (-> s4-0 x))
(set! (-> s4-0 x) (-> *CAM_EYE-bank* rot-speed))
((< (* (-> *display* base-clock time-adjust-ratio) (-> *CAM_EYE-bank* rot-speed)) (-> s4-0 x))
(set! (-> s4-0 x) (* (-> *display* base-clock time-adjust-ratio) (-> *CAM_EYE-bank* rot-speed)))
)
((< (-> s4-0 x) (- (-> *CAM_EYE-bank* rot-speed)))
(set! (-> s4-0 x) (- (-> *CAM_EYE-bank* rot-speed)))
((< (-> s4-0 x) (- (* (-> *display* base-clock time-adjust-ratio) (-> *CAM_EYE-bank* rot-speed))))
(set! (-> s4-0 x) (- (* (-> *display* base-clock time-adjust-ratio) (-> *CAM_EYE-bank* rot-speed))))
)
)
;; og:preserve-this changed for high fps
(cond
((< (-> *CAM_EYE-bank* rot-speed) (-> s4-0 y))
(set! (-> s4-0 y) (-> *CAM_EYE-bank* rot-speed))
((< (* (-> *display* base-clock time-adjust-ratio) (-> *CAM_EYE-bank* rot-speed)) (-> s4-0 y))
(set! (-> s4-0 y) (* (-> *display* base-clock time-adjust-ratio) (-> *CAM_EYE-bank* rot-speed)))
)
((< (-> s4-0 y) (- (-> *CAM_EYE-bank* rot-speed)))
(set! (-> s4-0 y) (- (-> *CAM_EYE-bank* rot-speed)))
((< (-> s4-0 y) (- (* (-> *display* base-clock time-adjust-ratio) (-> *CAM_EYE-bank* rot-speed))))
(set! (-> s4-0 y) (- (* (-> *display* base-clock time-adjust-ratio) (-> *CAM_EYE-bank* rot-speed))))
)
)
(cond
@@ -821,11 +825,12 @@
(s4-0 (new 'stack-no-clear 'matrix))
)
(when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG)))
;; og:preserve-this
(let ((f24-0
(analog-input (the-as int (-> *cpad-list* cpads 0 rightx)) 128.0 32.0 110.0 (* 8192.0 (seconds-per-frame)))
(analog-input-horizontal-third (the-as int (-> *cpad-list* cpads 0 rightx)) 128.0 32.0 110.0 (* 8192.0 (seconds-per-frame)))
)
(f1-2
(analog-input (the-as int (-> *cpad-list* cpads 0 righty)) 128.0 32.0 110.0 (* 8192.0 (seconds-per-frame)))
(analog-input-vertical-third (the-as int (-> *cpad-list* cpads 0 righty)) 128.0 32.0 110.0 (* 8192.0 (seconds-per-frame)))
)
(s2-0 (new-stack-matrix0))
)
@@ -2221,7 +2226,8 @@
)
(defun cam-dist-analog-input ((arg0 int) (arg1 float))
(let ((f0-0 (the-as number 0.0)))
;; og:preserve-this
(let ((f0-0 0.0))
(cond
((< arg0 28)
(set! f0-0 (- (fmin arg1 (* 0.083333336 (- 28.0 (the float arg0)) arg1))))
@@ -2230,7 +2236,11 @@
(set! f0-0 (fmin arg1 (* 0.0125 (+ -160.0 (the float arg0)) arg1)))
)
)
(the-as float f0-0)
;; og:preserve-this
(#if PC_PORT
(* (if (-> *pc-settings* third-camera-v-inverted?) 1.0 -1.0) f0-0)
f0-0
)
)
)
@@ -2411,7 +2421,8 @@
)
)
(when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG)))
(let ((f30-2 (analog-input
;; og:preserve-this
(let ((f30-2 (analog-input-horizontal-third
(the-as int (-> *cpad-list* cpads 0 rightx))
128.0
32.0
@@ -3317,7 +3328,8 @@
)
(when (not (paused?))
(when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG)))
(let ((f0-0 (analog-input (the-as int (-> *cpad-list* cpads 0 righty)) 128.0 32.0 110.0 0.05)))
;; og:preserve-this
(let ((f0-0 (analog-input-vertical-third (the-as int (-> *cpad-list* cpads 0 righty)) 128.0 32.0 110.0 0.05)))
(cond
((< (* 0.05 (- 1.0 (-> self view-off-param))) f0-0)
(+! (-> self view-off-param) (* 0.05 (- 1.0 (-> self view-off-param))))
@@ -3338,8 +3350,9 @@
(lerp (-> *CAM_STICK-bank* min-z) (-> *CAM_STICK-bank* max-z) (-> self view-off-param))
)
(when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG)))
;; og:preserve-this
(let ((f0-16
(analog-input (the-as int (-> *cpad-list* cpads 0 rightx)) 128.0 32.0 110.0 (* 21845.334 (seconds-per-frame)))
(analog-input-horizontal-third (the-as int (-> *cpad-list* cpads 0 rightx)) 128.0 32.0 110.0 (* 21845.334 (seconds-per-frame)))
)
(gp-0 (new-stack-matrix0))
(s3-0 (new-stack-vector0))
@@ -2137,7 +2137,8 @@ This commonly includes things such as:
(let ((s5-0 (new-stack-matrix0))
(gp-0 (vector-reset! (new 'stack-no-clear 'vector)))
)
(let* ((f0-0 (analog-input (the-as int (+ (-> *cpad-list* cpads 0 rightx) -128)) 0.0 48.0 110.0 -1.0))
;; og:preserve-this
(let* ((f0-0 (analog-input-horizontal-third (the-as int (+ (-> *cpad-list* cpads 0 rightx) -128)) 0.0 48.0 110.0 -1.0))
(f0-1 (* -546.13336 f0-0))
(f0-3 (fmin 546.13336 (fmax -546.13336 f0-1)))
)
@@ -2206,7 +2207,8 @@ This commonly includes things such as:
(defbehavior cam-launcher-long-joystick camera-slave ()
(when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG)))
(let ((gp-0 (new-stack-matrix0)))
(let* ((f0-0 (analog-input (the-as int (+ (-> *cpad-list* cpads 0 rightx) -128)) 0.0 48.0 110.0 -1.0))
;; og:preserve-this
(let* ((f0-0 (analog-input-horizontal-third (the-as int (+ (-> *cpad-list* cpads 0 rightx) -128)) 0.0 48.0 110.0 -1.0))
(f0-1 (* -546.13336 f0-0))
(f0-3 (fmin 546.13336 (fmax -546.13336 f0-1)))
)
+2 -1
View File
@@ -611,7 +611,8 @@
(suspend)
)
)
(kernel-shutdown)
;; og:preserve-this
(kernel-shutdown (runtime-exit-status exit))
(none)
)
(if (= *master-exit* 'movie)
+37
View File
@@ -254,6 +254,43 @@ The cpad-set-buzz! function can be used for vibration.
)
)
;; og:preserve-this macros
(defmacro analog-input-horizontal-first (in offset center-val max-val out-range)
"Same as analog-input but respects First-Person Horizontal camera control setting."
`(#if PC_PORT ;; first-person horizontal is NOT inverted in original game
(* (if (-> *pc-settings* first-camera-h-inverted?) -1.0 1.0)
(analog-input ,in ,offset ,center-val ,max-val ,out-range))
(analog-input ,in ,offset ,center-val ,max-val ,out-range)
)
)
(defmacro analog-input-vertical-first (in offset center-val max-val out-range)
"Same as analog-input but respects First-Person Vertical camera control setting."
`(#if PC_PORT ;; first-person vertical is already inverted in original game
(* (if (-> *pc-settings* first-camera-v-inverted?) 1.0 -1.0)
(analog-input ,in ,offset ,center-val ,max-val ,out-range))
(analog-input ,in ,offset ,center-val ,max-val ,out-range)
)
)
(defmacro analog-input-horizontal-third (in offset center-val max-val out-range)
"Same as analog-input but respects Third-Person Horizontal camera control setting."
`(#if PC_PORT ;; third-person horizontal is already inverted in original game
(* (if (-> *pc-settings* third-camera-h-inverted?) 1.0 -1.0)
(analog-input ,in ,offset ,center-val ,max-val ,out-range))
(analog-input ,in ,offset ,center-val ,max-val ,out-range)
)
)
(defmacro analog-input-vertical-third (in offset center-val max-val out-range)
"Same as analog-input but respects Third-Person Vertical camera control setting."
`(#if PC_PORT ;; third-person vertical is already inverted in original game
(* (if (-> *pc-settings* third-camera-v-inverted?) 1.0 -1.0)
(analog-input ,in ,offset ,center-val ,max-val ,out-range))
(analog-input ,in ,offset ,center-val ,max-val ,out-range)
)
)
(defun cpad-set-buzz! ((arg0 cpad-info) (arg1 int) (arg2 int) (arg3 time-frame))
"Turn on vibration motor 'buzz-idx' for duration, at magnitude buzz-amount."
(cond
+4 -3
View File
@@ -1301,8 +1301,9 @@
(if sv-156
(begin-scan sv-152 self)
)
(if (or (= (-> self current-options) *title*) (= (-> self current-options) *options*))
(+! s5-0 20)
;; og:preserve-this
(if (or (= (-> self current-options) *title-pc*) (= (-> self current-options) *options-pc*))
(+! s5-0 10)
)
(dotimes (s4-1 (length gp-0))
(let ((v1-24 sv-144))
@@ -1324,7 +1325,7 @@
)
)
)
;; added for proper aspect ratio-ing
;; og:preserve-this added for proper aspect ratio-ing
(#when PC_PORT
(when (not (-> *pc-settings* use-vis?))
(set! (-> sv-144 origin x) (the float (the int (adjust-game-x (-> sv-144 origin x)))))
+7
View File
@@ -770,6 +770,13 @@
(trick-darkjak-bomb0 #x1330)
(trick-darkjak-bomb1 #x1331)
(trick-darkjak-giant #x1332)
(progress-graphics-ps2 #x1333)
(progress-graphics-actor-culling #x1334)
(progress-graphics-force-envmap #x1335)
(progress-fast-progress #x1336)
(progress-graphics-ps2-lod-dist #x1337)
(progress-graphics-msaa-off #x1338)
(progress-graphics-display #x1339)
)
;; ---text-id
+12 -2
View File
@@ -38,6 +38,14 @@
(uk-english)
)
(defenum runtime-exit-status
:type uint32
(running)
(restart-runtime)
(exit)
(restart-in-debug)
)
;; fixed symbols
(define-extern #f symbol)
(define-extern #t symbol)
@@ -124,7 +132,7 @@
(define-extern scf-get-aspect "Defined in the kernel" (function uint))
(define-extern scf-get-timeout (function int))
(define-extern scf-get-inactive-timeout (function int))
(define-extern kernel-shutdown (function none))
(define-extern kernel-shutdown (function runtime-exit-status none))
(define-extern *boot-video-mode* "Defined in the kernel" int)
(define-extern *kernel-boot-message* symbol)
@@ -189,13 +197,15 @@
(define-extern pc-get-active-display-size (function (pointer int32) (pointer int32) none))
(define-extern pc-get-active-display-refresh-rate (function int))
(define-extern pc-get-display-count (function int))
(define-extern pc-get-display-name (function int string))
(define-extern pc-get-display-name (function int string symbol))
(define-extern pc-get-os (function symbol))
(define-extern pc-get-window-size (function (pointer int32) (pointer int32) none))
(define-extern pc-get-window-scale (function (pointer float) (pointer float) none))
(define-extern pc-set-window-size (function int int none))
(define-extern pc-set-fullscreen-display (function int none))
(define-extern pc-set-display-mode (function symbol none))
(define-extern pc-get-num-resolutions (function int))
(define-extern pc-get-resolution (function int (pointer int64) (pointer int64) none))
(define-extern pc-set-frame-rate (function int none))
(define-extern pc-set-vsync (function symbol none))
+8
View File
@@ -814,6 +814,14 @@
)
)
(defmacro temp-string-format (buf &rest args)
"Like [[string-format]], but takes a string as an argument."
`(begin
(format (clear ,buf) ,@args)
,buf
)
)
(define *pc-encoded-temp-string* (new 'global 'string 2048 (the-as string #f)))
(kmemclose)
+1 -1
View File
@@ -920,7 +920,7 @@
(flag "144" 144 dm-frame-rate-pick-func)
(flag "165" 165 dm-frame-rate-pick-func)
(flag "240" 240 dm-frame-rate-pick-func)
(flag "disclaimer" #f ,(dm-lambda-boolean-flag (-> *progress-state-pc* frame-rate-disclaimer-seen?)))
(flag "disclaimer" #f ,(dm-lambda-boolean-flag *frame-rate-disclaimer-seen?*))
)
(menu "MSAA"
(flag "Off" 1 dm-msaa-pick-func)
+1 -1
View File
@@ -141,7 +141,7 @@
(true! (-> obj fast-elevator?))
(false! (-> obj fast-progress?))
(true! (-> obj smooth-minimap?))
(true! (-> obj hires-clouds?))
(false! (-> obj hires-clouds?))
0)
(defmethod reset-extra ((obj pc-settings-jak2) (call-handlers symbol))
+146 -291
View File
@@ -1734,91 +1734,89 @@
)
(defmethod draw-option ((obj menu-sub-menu-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(let ((f30-0 (* 2.0 (- 0.5 (-> arg0 menu-transition))))
(s2-0 (the int (+ -1.0 (-> arg1 origin y))))
(s1-0 22)
(defmethod draw-option ((this menu-sub-menu-option) (arg0 progress) (fnt font-context) (arg2 int) (arg3 symbol))
(let ((alpha (* 2.0 (- 0.5 (-> arg0 menu-transition))))
(y (the int (+ -1.0 (-> fnt origin y))))
(height 22)
)
(if (< f30-0 0.0)
(set! f30-0 0.0)
(if (< alpha 0.0)
(set! alpha 0.0)
)
(set! (-> arg1 alpha) f30-0)
(set-scale! arg1 0.6)
(set! (-> fnt alpha) alpha)
(set-scale! fnt 0.6)
(cond
((= *title* (-> arg0 current-options))
(set-scale! arg1 0.85)
(set! (-> arg1 height) 40.0)
(set! s1-0 36)
(+! s2-0 -8)
((= *title-pc* (-> arg0 current-options))
(set-scale! fnt 0.65)
(set! (-> fnt height) 25.0)
(set! height 28)
(-! y 4)
(when (memcard-unlocked-secrets? #f)
(+! (-> arg1 origin y) -35.0)
(set! s1-0 36)
(+! s2-0 -34)
(-! (-> fnt origin y) 30.0)
(set! height 28)
(-! y 31)
)
)
((= *options* (-> arg0 current-options))
(+! (-> arg1 origin y) -20.0)
(set-scale! arg1 0.85)
(set! (-> arg1 height) 40.0)
(set! s1-0 37)
(+! s2-0 -28)
((= *options-pc* (-> arg0 current-options))
(-! (-> fnt origin y) 20.0)
(set-scale! fnt 0.85)
(set! (-> fnt height) 40.0)
(set! height 37)
(-! y 28)
)
)
(when (nonzero? (-> obj name))
(let ((s0-0 arg1))
(set! (-> s0-0 color) (if (= arg2 (-> arg0 option-index))
(the-as font-color (the-as int (progress-selected 0)))
(font-color progress)
)
)
)
(when (nonzero? (-> this name))
(set-color! fnt (if (= arg2 (-> arg0 option-index))
(the font-color (the int (progress-selected 0)))
(font-color progress)
)
)
(cond
((= arg2 (-> arg0 option-index))
(set-color! arg1 (progress-selected 0))
(set-color! fnt (progress-selected 0))
)
(else
(set-color! arg1 (font-color progress))
(set-color! fnt (font-color progress))
)
)
(if (and (and (= arg2 (-> arg0 option-index)) (!= 298 (-> obj name)))
(not (and (= (-> obj name) (text-id progress-root-secrets))
(= *title* (-> arg0 current-options))
(if (and (and (= arg2 (-> arg0 option-index)) (!= 298 (-> this name)))
(not (and (= (-> this name) (text-id progress-root-secrets))
(= *title-pc* (-> arg0 current-options))
(not (memcard-unlocked-secrets? #f))
(= (-> arg0 option-index) 3)
)
)
)
(draw-highlight s2-0 s1-0 f30-0)
(draw-highlight y height alpha)
)
(cond
((= *save-options-title* (-> arg0 current-options))
(cond
((= (-> obj name) (text-id progress-continue-without-saving))
((= (-> this name) (text-id progress-continue-without-saving))
(cond
((= arg2 (-> arg0 option-index))
(set-scale! arg1 0.5)
(set-scale! fnt 0.5)
)
(else
(set-scale! arg1 0.45)
(set-scale! fnt 0.45)
)
)
(+! (-> arg1 origin y) -120.0)
(+! (-> fnt origin y) -120.0)
(if (not (-> *pc-settings* use-vis?))
(-! (-> arg1 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 10))
(-! (-> arg1 origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
(-! (-> fnt origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 10))
(-! (-> fnt origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
10
5
))))
(set! (-> arg1 width) (the float (if (= (get-aspect-ratio) 'aspect4x3)
(set! (-> fnt width) (the float (if (= (get-aspect-ratio) 'aspect4x3)
180
170
)
)
)
(set! (-> arg1 height) 260.0)
(set! (-> fnt height) 260.0)
(if (not (-> *pc-settings* use-vis?))
(*! (-> arg1 width) (-> *pc-settings* aspect-ratio-reciprocal)))
(print-game-text (lookup-text! *common-text* (-> obj name) #f) arg1 #f 44 (bucket-id progress))
(*! (-> fnt width) (-> *pc-settings* aspect-ratio-reciprocal)))
(print-game-text (lookup-text! *common-text* (-> this name) #f) fnt #f 44 (bucket-id progress))
(when (= arg2 (-> arg0 option-index))
(let ((s4-1 69)
(s2-4 110)
@@ -1840,7 +1838,7 @@
(+ (* s1-1 arg2) 8 s1-1 s2-4)
s3-1
(+ s1-1 -8)
(new 'static 'rgba :r #x40 :g #x40 :b #x40 :a (the int (* 64.0 f30-0)))
(new 'static 'rgba :r #x40 :g #x40 :b #x40 :a (the int (* 64.0 alpha)))
)
)
)
@@ -1849,16 +1847,16 @@
(set! s4-1 (adjust-game-x (the float s4-1)))
(set! s3-1 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) s3-1)))
)
(set-vector! (-> obj box 0 color) 64 128 128 (the int (* 128.0 f30-0)))
(set-vector! (-> this box 0 color) 64 128 128 (the int (* 128.0 alpha)))
(draw-savegame-box
obj
this
(the float s4-1)
(the float (+ s4-1 s3-1))
(the float (+ s2-4 (* s1-1 arg2)))
(the float (+ s2-4 (* s1-1 arg2)))
)
(draw-savegame-box
obj
this
(the float (+ s4-1 s3-1))
(the float (+ s4-1 s3-1))
(the float s2-4)
@@ -1873,7 +1871,7 @@
(+ s2-4 (* s1-1 arg2))
s3-1
(+ s1-1 8)
(new 'static 'rgba :r #x40 :g #x40 :b #x40 :a (the int (* 64.0 f30-0)))
(new 'static 'rgba :r #x40 :g #x40 :b #x40 :a (the int (* 64.0 alpha)))
)
)
)
@@ -1881,25 +1879,25 @@
)
(else
(if (not (-> *pc-settings* use-vis?))
(+! (-> arg1 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) -100.0))
(+! (-> arg1 origin x) -100.0))
(set! (-> arg1 origin y) (+ -35.0 (-> arg1 origin y)))
(+! (-> fnt origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) -100.0))
(+! (-> fnt origin x) -100.0))
(set! (-> fnt origin y) (+ -35.0 (-> fnt origin y)))
)
)
)
((= *load-save-options* (-> arg0 current-options))
(+! (-> arg1 origin x) -100.0)
(+! (-> arg1 origin y) -25.0)
(print-menu-text (lookup-text! *common-text* (-> obj name) #f) (-> obj scale) arg1 arg0)
(+! (-> fnt origin x) -100.0)
(+! (-> fnt origin y) -25.0)
(print-menu-text (lookup-text! *common-text* (-> this name) #f) (-> this scale) fnt arg0)
)
((and (= *title* (-> arg0 current-options))
(= (text-id progress-root-secrets) (-> obj name))
((and (= *title-pc* (-> arg0 current-options))
(= (text-id progress-root-secrets) (-> this name))
(memcard-unlocked-secrets? #f)
)
(print-game-text (lookup-text! *common-text* (-> obj name) #f) arg1 #f 44 (bucket-id progress))
(print-game-text (lookup-text! *common-text* (-> this name) #f) fnt #f 44 (bucket-id progress))
)
((!= (-> obj name) (text-id progress-root-secrets))
(print-game-text (lookup-text! *common-text* (-> obj name) #f) arg1 #f 44 (bucket-id progress))
((!= (-> this name) (text-id progress-root-secrets))
(print-game-text (lookup-text! *common-text* (-> this name) #f) fnt #f 44 (bucket-id progress))
)
)
)
@@ -1979,190 +1977,6 @@
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmethod draw-option ((obj menu-aspect-ratio-pc-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(let ((alpha (* 2.0 (- 0.5 (-> arg0 menu-transition)))))
(max! alpha 0.0)
(set! (-> arg1 alpha) alpha)
(set-flags! arg1 (font-flags kerning middle large))
(set-scale! arg1 0.65)
(+! (-> arg1 origin y) 15.0)
(+! (-> arg1 origin y) -8.0)
(let ((ar-names (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)
)))
(cond
(arg3
(set-color! arg1 (font-color progress-force-selected))
(draw-highlight (the int (+ -1.0 (-> arg1 origin y))) 41 alpha)
(print-game-text (lookup-text! *common-text* (-> obj name) #f) arg1 #f 44 (bucket-id progress))
(+! (-> arg1 origin y) 23.0)
(set! *temp-string* (clear *temp-string*))
(dotimes (i (-> ar-names length))
(if (> i 0)
(format *temp-string* " "))
(if (= i (-> *progress-state-pc* aspect-ratio-choice-index))
(format *temp-string* "~33L~S" (lookup-text! *common-text* (-> ar-names i) #f))
(format *temp-string* "~35L~S" (lookup-text! *common-text* (-> ar-names i) #f)))
)
(format *temp-string* "~1L")
)
(else
(cond
((= arg2 (-> arg0 option-index))
(set-color! arg1 (progress-selected 0))
(draw-highlight (the int (+ -1.0 (-> arg1 origin y))) 22 alpha)
)
(else
(set-color! arg1 (font-color progress))
)
)
(print-game-text (lookup-text! *common-text* (-> obj name) #f) arg1 #f 44 (bucket-id progress))
(+! (-> arg1 origin y) 23.0)
(set! *temp-string* (clear *temp-string*))
(dotimes (i (-> ar-names length))
(if (> i 0)
(format *temp-string* " "))
(if (= i (-> *progress-state-pc* aspect-ratio-choice-index))
(format *temp-string* "~1L~S" (lookup-text! *common-text* (-> ar-names i) #f))
(format *temp-string* "~35L~S" (lookup-text! *common-text* (-> ar-names i) #f)))
)
(format *temp-string* "~1L")
)
)
)
(set-scale! arg1 0.45)
(print-game-text *temp-string* arg1 #f 44 (bucket-id progress))
(when-not-drawn-decoration
(draw-decoration obj arg1 alpha (text-id progress-root-graphic-options) #f 0.95))
)
0
(none)
)
(defmethod draw-option ((obj menu-display-mode-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(let ((alpha (* 2.0 (- 0.5 (-> arg0 menu-transition)))))
(max! alpha 0.0)
(set! (-> arg1 alpha) alpha)
(set-flags! arg1 (font-flags kerning middle large))
(set-scale! arg1 0.65)
(+! (-> arg1 origin y) 15.0)
(+! (-> arg1 origin y) -8.0)
(let ((names (new 'static 'boxed-array :type text-id
(text-id progress-windowed)
(text-id progress-fullscreen)
(text-id progress-borderless)
)))
(cond
(arg3
(set-color! arg1 (font-color progress-force-selected))
(draw-highlight (the int (+ -1.0 (-> arg1 origin y))) 41 alpha)
(print-game-text (lookup-text! *common-text* (-> obj name) #f) arg1 #f 44 (bucket-id progress))
(+! (-> arg1 origin y) 23.0)
(set! *temp-string* (clear *temp-string*))
(dotimes (i (-> names length))
(if (> i 0)
(format *temp-string* " "))
(if (= i (-> *progress-state-pc* display-mode-choice-index))
(format *temp-string* "~33L~S" (lookup-text! *common-text* (-> names i) #f))
(format *temp-string* "~35L~S" (lookup-text! *common-text* (-> names i) #f)))
)
(format *temp-string* "~1L")
)
(else
(cond
((= arg2 (-> arg0 option-index))
(set-color! arg1 (progress-selected 0))
(draw-highlight (the int (+ -1.0 (-> arg1 origin y))) 22 alpha)
)
(else
(set-color! arg1 (font-color progress))
)
)
(print-game-text (lookup-text! *common-text* (-> obj name) #f) arg1 #f 44 (bucket-id progress))
(+! (-> arg1 origin y) 23.0)
(set! *temp-string* (clear *temp-string*))
(dotimes (i (-> names length))
(if (> i 0)
(format *temp-string* " "))
(if (= i (-> *progress-state-pc* display-mode-choice-index))
(format *temp-string* "~1L~S" (lookup-text! *common-text* (-> names i) #f))
(format *temp-string* "~35L~S" (lookup-text! *common-text* (-> names i) #f)))
)
(format *temp-string* "~1L")
)
)
)
(set-scale! arg1 0.5)
(print-game-text *temp-string* arg1 #f 44 (bucket-id progress))
(when-not-drawn-decoration
(draw-decoration obj arg1 alpha (text-id progress-root-graphic-options) #f 0.95))
)
0
(none)
)
(defmethod draw-option ((obj menu-on-off-vsync-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(let ((alpha (* 2.0 (- 0.5 (-> arg0 menu-transition)))))
(max! alpha 0.0)
(set! (-> arg1 alpha) alpha)
(set-flags! arg1 (font-flags kerning middle large))
(set-scale! arg1 0.65)
(+! (-> arg1 origin y) 15.0)
(+! (-> arg1 origin y) -8.0)
(let ((names (new 'static 'boxed-array :type text-id
(text-id progress-windowed)
(text-id progress-fullscreen)
(text-id progress-borderless)
)))
(cond
(arg3
(set-color! arg1 (font-color progress-force-selected))
(draw-highlight (the int (+ -1.0 (-> arg1 origin y))) 41 alpha)
(print-game-text (lookup-text! *common-text* (-> obj name) #f) arg1 #f 44 (bucket-id progress))
(+! (-> arg1 origin y) 23.0)
(set! *temp-string* (clear *temp-string*))
(if (-> *progress-state* on-off-choice)
(format *temp-string* "~33L~S~35L ~S" (lookup-text! *common-text* (text-id progress-on) #f) (lookup-text! *common-text* (text-id progress-off) #f))
(format *temp-string* "~35L~S ~33L~S~1L" (lookup-text! *common-text* (text-id progress-on) #f) (lookup-text! *common-text* (text-id progress-off) #f)))
)
(else
(cond
((= arg2 (-> arg0 option-index))
(set-color! arg1 (progress-selected 0))
(draw-highlight (the int (+ -1.0 (-> arg1 origin y))) 22 alpha)
)
(else
(set-color! arg1 (font-color progress))
)
)
(print-game-text (lookup-text! *common-text* (-> obj name) #f) arg1 #f 44 (bucket-id progress))
(+! (-> arg1 origin y) 23.0)
(set! *temp-string* (clear *temp-string*))
(if (-> *progress-state* on-off-choice)
(format *temp-string* "~1L~S~35L ~S" (lookup-text! *common-text* (text-id progress-on) #f) (lookup-text! *common-text* (text-id progress-off) #f))
(format *temp-string* "~35L~S ~1L~S~1L" (lookup-text! *common-text* (text-id progress-on) #f) (lookup-text! *common-text* (text-id progress-off) #f)))
)
)
)
(set-scale! arg1 0.5)
(print-game-text *temp-string* arg1 #f 44 (bucket-id progress))
(when-not-drawn-decoration
(draw-decoration obj arg1 alpha (text-id progress-root-graphic-options) #f 0.95))
)
0
(none)
)
(defun draw-decoration-aspect-ratio-custom ((arg0 menu-option) (arg1 font-context) (arg2 float) (arg3 text-id) (arg5 float))
(let ((gp-0 70)
(s5-0 120)
@@ -2364,51 +2178,7 @@
(none)
)
(defmethod draw-option ((obj menu-frame-rate-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(let ((alpha (* 2.0 (- 0.5 (-> arg0 menu-transition)))))
(set-scale! arg1 0.65)
(max! alpha 0.0)
(set! (-> arg1 alpha) alpha)
(set-flags! arg1 (font-flags kerning middle large))
(+! (-> arg1 origin y) 8.0)
(cond
(arg3
(set-color! arg1 (font-color progress-force-selected))
(draw-highlight (the int (+ -1.0 (-> arg1 origin y))) 42 alpha)
(print-game-text (lookup-text! *common-text* (-> obj name) #f) arg1 #f 44 (bucket-id progress))
(+! (-> arg1 origin y) 22.0)
(set-color! arg1 (font-color progress))
(set-scale! arg1 0.5)
(set-color! arg1 (font-color progress))
(+! (-> arg1 origin x) -25.0)
(print-game-text (string-format "~33L~C" 163) arg1 #f 44 (bucket-id progress))
(+! (-> arg1 origin x) 50.0)
(print-game-text (string-format "~33L~C" 161) arg1 #f 44 (bucket-id progress))
(+! (-> arg1 origin x) -25.0)
(set-color! arg1 (progress-selected 0))
(set-flags! arg1 (font-flags kerning middle large))
(print-game-text (string-format "~D" (-> *frame-rate-options* (-> *progress-state-pc* frame-rate-choice-index))) arg1 #f 44 (bucket-id progress))
)
(else
(if (= (-> arg0 option-index) arg2)
(draw-highlight (the int (-> arg1 origin y)) 21 alpha)
)
(set-scale! arg1 0.65)
(print-game-text (lookup-text! *common-text* (-> obj name) #f) arg1 #f 44 (bucket-id progress))
(set-scale! arg1 0.5)
(set-color! arg1 (font-color progress))
(+! (-> arg1 origin y) 22.0)
(set-flags! arg1 (font-flags kerning middle large))
(print-game-text (string-format "~D" (-> *frame-rate-options* (-> *progress-state-pc* frame-rate-choice-index))) arg1 #f 44 (bucket-id progress))
)
)
(when-not-drawn-decoration
(draw-decoration obj arg1 alpha (text-id progress-root-graphic-options) #f 0.95))
)
(none)
)
(defmethod draw-option menu-frame-rate-disclaimer-option ((obj menu-frame-rate-disclaimer-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(defmethod draw-option ((obj menu-frame-rate-disclaimer-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(set! (-> arg1 alpha) (- 1.0 (-> arg0 menu-transition)))
(set-color! arg1 (font-color red))
(set-scale! arg1 0.8)
@@ -2446,6 +2216,91 @@
(none)
)
(defmethod draw-option ((this menu-exit-game-option) (progress progress) (fnt font-context) (arg2 int) (selected symbol))
(let ((alpha (* 2.0 (- 0.5 (-> progress menu-transition))))
(y (the int (+ -1.0 (-> fnt origin y))))
(height 22)
)
(if (< alpha 0.0)
(set! alpha 0.0)
)
(set! (-> fnt alpha) alpha)
(set-scale! fnt 0.65)
(set! (-> fnt height) 25.0)
(set! height 28)
(when (not (memcard-unlocked-secrets? #f))
(-! (-> fnt origin y) 45.0)
(-! y 49)
)
(when (memcard-unlocked-secrets? #f)
(-! (-> fnt origin y) 35.0)
(-! y 38)
)
(when (nonzero? (-> this name))
(set-color! fnt (if (= arg2 (-> progress option-index))
(the font-color (the int (progress-selected 0)))
(font-color progress)
)
)
(cond
((= arg2 (-> progress option-index))
(set-color! fnt (progress-selected 0))
(draw-highlight y height alpha)
)
(else
(set-color! fnt (font-color progress))
)
)
(if selected (set-color! fnt (font-color progress-force-selected)))
(print-game-text (lookup-text! *common-text* (-> this name) #f) fnt #f 44 (bucket-id progress))
(let ((choice (&-> *progress-state* yes-no-choice)) (str (the string #f)))
(set! str
(cond
(selected
(set-color! fnt (font-color progress-force-selected))
(when (memcard-unlocked-secrets? #f)
(draw-highlight (the int (+ 24.0 (-> fnt origin y))) 24 (-> fnt alpha))
(+! (-> fnt origin y) 24.0)
(set-scale! fnt 0.55)
)
(when (not (memcard-unlocked-secrets? #f))
(draw-highlight (the int (+ 23.0 (-> fnt origin y))) 23 (-> fnt alpha))
(+! (-> fnt origin y) 23.0)
(set-scale! fnt 0.60)
)
(cond
((-> choice 0)
(format
(clear *temp-string*)
"~33L~S~32L ~S"
(lookup-text! *common-text* (text-id progress-yes) #f)
(lookup-text! *common-text* (text-id progress-no) #f)
)
(set! str *temp-string*)
)
(else
(format
(clear *temp-string*)
"~32L~S ~33L~S~1L"
(lookup-text! *common-text* (text-id progress-yes) #f)
(lookup-text! *common-text* (text-id progress-no) #f)
)
(set! str *temp-string*)
)
)
str
)
(else
(clear *temp-string*)
)
)
)
(print-game-text str fnt #f 44 (bucket-id progress))
)
)
)
(none)
)
(defun begin-scissor-music-player ((box hud-box))
@@ -87,14 +87,14 @@
(set! (-> font-ctx origin x) (the float new-x-pos))
(set! (-> font-ctx origin y) (the float new-y-pos-up))
(let ((print-text-fn print-game-text))
(format (clear *temp-string*) "~33L~C" 160)
(print-text-fn *temp-string* font-ctx #f 44 (bucket-id progress))))
(format (clear *progress-generic-temp-string*) "~33L~C" 160)
(print-text-fn *progress-generic-temp-string* font-ctx #f 44 (bucket-id progress))))
(when draw-down?
(set! (-> font-ctx origin x) (the float new-x-pos))
(set! (-> font-ctx origin y) (the float (+ new-y-pos-up new-y-pos-down)))
(let ((print-text-fn-1 print-game-text))
(format (clear *temp-string*) "~33L~C" 162)
(print-text-fn-1 *temp-string* font-ctx #f 44 (bucket-id progress))))
(format (clear *progress-generic-temp-string*) "~33L~C" 162)
(print-text-fn-1 *progress-generic-temp-string* font-ctx #f 44 (bucket-id progress))))
(set! (-> font-ctx origin x) old-x-pos)
(set! (-> font-ctx origin y) old-y-pos)
(set! (-> font-ctx scale) old-scale))
@@ -222,10 +222,10 @@
(draw-generic-highlight (the int (- (-> font-ctx origin y) 2.0)) 32 alpha)
(print-game-text (lookup-text! *common-text* (-> obj name) #f) font-ctx #f 44 (bucket-id progress))
(+! (-> font-ctx origin y) line-height)
(set! *temp-string* (clear *temp-string*))
(set! *progress-generic-temp-string* (clear *progress-generic-temp-string*))
(if (-> obj value)
(format *temp-string* "~33L~S~35L ~S" (lookup-text! *common-text* (-> obj truthy-text) #f) (lookup-text! *common-text* (-> obj falsey-text) #f))
(format *temp-string* "~35L~S ~33L~S~1L" (lookup-text! *common-text* (-> obj truthy-text) #f) (lookup-text! *common-text* (-> obj falsey-text) #f))))
(format *progress-generic-temp-string* "~33L~S~35L ~S" (lookup-text! *common-text* (-> obj truthy-text) #f) (lookup-text! *common-text* (-> obj falsey-text) #f))
(format *progress-generic-temp-string* "~35L~S ~33L~S~1L" (lookup-text! *common-text* (-> obj truthy-text) #f) (lookup-text! *common-text* (-> obj falsey-text) #f))))
;; hover case
(else
(cond
@@ -242,13 +242,13 @@
(set-color! font-ctx (font-color progress))))
(print-game-text (lookup-text! *common-text* (-> obj name) #f) font-ctx #f 44 (bucket-id progress))
(+! (-> font-ctx origin y) line-height)
(set! *temp-string* (clear *temp-string*))
(set! *progress-generic-temp-string* (clear *progress-generic-temp-string*))
(let ((actual-value (call-get-value-fn obj)))
(if actual-value
(format *temp-string* "~1L~S~35L ~S" (lookup-text! *common-text* (-> obj truthy-text) #f) (lookup-text! *common-text* (-> obj falsey-text) #f))
(format *temp-string* "~35L~S ~1L~S~1L" (lookup-text! *common-text* (-> obj truthy-text) #f) (lookup-text! *common-text* (-> obj falsey-text) #f))))))
(format *progress-generic-temp-string* "~1L~S~35L ~S" (lookup-text! *common-text* (-> obj truthy-text) #f) (lookup-text! *common-text* (-> obj falsey-text) #f))
(format *progress-generic-temp-string* "~35L~S ~1L~S~1L" (lookup-text! *common-text* (-> obj truthy-text) #f) (lookup-text! *common-text* (-> obj falsey-text) #f))))))
(set-scale! font-ctx 0.35)
(print-game-text *temp-string* font-ctx #f 44 (bucket-id progress)))
(print-game-text *progress-generic-temp-string* font-ctx #f 44 (bucket-id progress)))
(none))
(defmethod draw-option ((obj menu-generic-carousel-option)
@@ -286,8 +286,8 @@
((or (< (-> obj item-index) 0) (> (-> obj item-index) (num-items obj)))
(print-game-text (lookup-text! *common-text* (text-id progress-multiselect-no-items-found) #f) font-ctx #f 44 (bucket-id progress)))
((and selected? (>= (-> obj item-index) 0) (< (-> obj item-index) (num-items obj)))
(format (clear *temp-string*) "~33L~C ~S ~33L~C" 163 (get-item-label obj (-> obj item-index)) 161)
(print-game-text *temp-string* font-ctx #f 44 (bucket-id progress)))
(format (clear *progress-generic-temp-string*) "~33L~C ~S ~33L~C" 163 (get-item-label obj (-> obj item-index)) 161)
(print-game-text *progress-generic-temp-string* font-ctx #f 44 (bucket-id progress)))
(else
(let ((actual-index (call-get-item-index-fn obj)))
(print-game-text (get-item-label obj actual-index) font-ctx #f 44 (bucket-id progress))))))
@@ -342,10 +342,10 @@
(draw-generic-highlight (the int (- (-> font-ctx origin y) 2.0)) 32 alpha)
(print-game-text (lookup-text! *common-text* (-> obj name) #f) font-ctx #f 44 (bucket-id progress))
(+! (-> font-ctx origin y) line-height)
(set! *temp-string* (clear *temp-string*))
(set! *progress-generic-temp-string* (clear *progress-generic-temp-string*))
(if (-> obj confirmed?)
(format *temp-string* "~33L~S~35L ~S" (lookup-text! *common-text* (text-id progress-yes) #f) (lookup-text! *common-text* (text-id progress-no) #f))
(format *temp-string* "~35L~S ~33L~S~1L" (lookup-text! *common-text* (text-id progress-yes) #f) (lookup-text! *common-text* (text-id progress-no) #f))))
(format *progress-generic-temp-string* "~33L~S~35L ~S" (lookup-text! *common-text* (text-id progress-yes) #f) (lookup-text! *common-text* (text-id progress-no) #f))
(format *progress-generic-temp-string* "~35L~S ~33L~S~1L" (lookup-text! *common-text* (text-id progress-yes) #f) (lookup-text! *common-text* (text-id progress-no) #f))))
;; hover case
(else
(cond
@@ -362,12 +362,12 @@
(set-color! font-ctx (font-color progress))))
(print-game-text (lookup-text! *common-text* (-> obj name) #f) font-ctx #f 44 (bucket-id progress))
(+! (-> font-ctx origin y) line-height)
(set! *temp-string* (clear *temp-string*))
(set! *progress-generic-temp-string* (clear *progress-generic-temp-string*))
(if (-> obj confirmed?)
(format *temp-string* "~1L~S~35L ~S" (lookup-text! *common-text* (text-id progress-yes) #f) (lookup-text! *common-text* (text-id progress-no) #f))
(format *temp-string* "~35L~S ~1L~S~1L" (lookup-text! *common-text* (text-id progress-yes) #f) (lookup-text! *common-text* (text-id progress-no) #f)))))
(format *progress-generic-temp-string* "~1L~S~35L ~S" (lookup-text! *common-text* (text-id progress-yes) #f) (lookup-text! *common-text* (text-id progress-no) #f))
(format *progress-generic-temp-string* "~35L~S ~1L~S~1L" (lookup-text! *common-text* (text-id progress-yes) #f) (lookup-text! *common-text* (text-id progress-no) #f)))))
(set-scale! font-ctx 0.35)
(print-game-text *temp-string* font-ctx #f 44 (bucket-id progress))))
(print-game-text *progress-generic-temp-string* font-ctx #f 44 (bucket-id progress))))
(else
(draw-generic-simple-string-option obj progress font-ctx option-index (lookup-text! *common-text* (-> obj name) #f))))
(none))
@@ -580,9 +580,9 @@
(set! (-> font-ctx origin x) (the float (adjust-game-x (if (= (get-aspect-ratio) 'aspect16x9) 430.0 438.0))))
(+! (-> font-ctx origin y) 6.0)
(set-flags! font-ctx (font-flags kerning right large))
(clear *temp-string*)
(clear *progress-generic-temp-string*)
(if (-> obj confirmed?)
(format *temp-string* "~33L~S~35L ~S" (lookup-text! *common-text* (text-id progress-yes) #f) (lookup-text! *common-text* (text-id progress-no) #f))
(format *temp-string* "~35L~S ~33L~S~1L" (lookup-text! *common-text* (text-id progress-yes) #f) (lookup-text! *common-text* (text-id progress-no) #f)))
(print-game-text *temp-string* font-ctx #f 44 (bucket-id progress))))
(format *progress-generic-temp-string* "~33L~S~35L ~S" (lookup-text! *common-text* (text-id progress-yes) #f) (lookup-text! *common-text* (text-id progress-no) #f))
(format *progress-generic-temp-string* "~35L~S ~33L~S~1L" (lookup-text! *common-text* (text-id progress-yes) #f) (lookup-text! *common-text* (text-id progress-no) #f)))
(print-game-text *progress-generic-temp-string* font-ctx #f 44 (bucket-id progress))))
(none))
@@ -222,3 +222,5 @@
:name ,title
:entries (new 'static 'boxed-array :type menu-generic-details-entry
,@entries))))))
(define *progress-generic-temp-string* (new 'global 'string 512 (the string #f)))
+110 -108
View File
@@ -164,15 +164,15 @@
;; Progress Code Overrides
(defmethod respond-to-cpad ((obj progress))
(defmethod respond-to-cpad ((this progress))
(mc-get-slot-info 0 *progress-save-info*)
;; ND originally did this...called this every frame in the game options, looked like a hack
;; there's probably a way to consistently do it synchronously
(load-level-text-files (the-as int (-> *setting-control* user-current language)))
(when (-> obj current-options)
(let ((option-array (-> obj current-options options))
(when (-> this current-options)
(let ((option-array (-> this current-options options))
(has-generic-history? (has-history? *progress-pc-generic-store*)))
(when (and option-array (= (-> obj menu-transition) 0.0))
(when (and option-array (= (-> this menu-transition) 0.0))
(let ((in-generic-page? (and (= (-> option-array length) 1)
(or (type? (-> option-array 0) menu-generic-scrolling-page)
(type? (-> option-array 0) menu-generic-details-page)))))
@@ -182,92 +182,94 @@
;; update the scrolling list
(respond-progress
(the-as menu-option (-> option-array 0))
obj
(and (= (-> obj menu-transition) 0.0) (-> obj selected-option))))
this
(and (= (-> this menu-transition) 0.0) (-> this selected-option))))
;; Do a bounds check to avoid crashing
((>= (-> obj option-index) (-> option-array length))
(format 0 "respond-to-cpad:progress: Option index ~D out of bounds~%" (-> obj option-index)))
((>= (-> this option-index) (-> option-array length))
(format 0 "respond-to-cpad:progress: Option index ~D out of bounds~%" (-> this option-index)))
(else
(respond-progress
(the-as menu-option (-> option-array (-> obj option-index)))
obj
(and (= (-> obj menu-transition) 0.0) (-> obj selected-option)))))
(the-as menu-option (-> option-array (-> this option-index)))
this
(and (= (-> this menu-transition) 0.0) (-> this selected-option)))))
(cond
((-> obj selected-option)
((-> this selected-option)
(cond
((cpad-pressed? 0 confirm)
(set! (-> obj selected-option) #f)
(set! (-> this selected-option) #f)
)
((cpad-pressed? 0 triangle)
(when (not in-generic-page?)
(if (= (-> obj current-options) *main-options*)
(if (= (-> this current-options) *main-options*)
(sound-play "window-contract")
(sound-play "generic-beep")))
(set! (-> obj selected-option) #f))))
(set! (-> this selected-option) #f))))
(else
(cond
((cpad-pressed? 0 up l-analog-up)
(cond
((= (-> obj current-options) *main-options*)
((= (-> this current-options) *main-options*)
(sound-play "ring-select"))
((!= (length option-array) 1)
(sound-play "roll-over")))
(if (and (= *title* (-> obj current-options)) (not (memcard-unlocked-secrets? #f)) (zero? (-> obj option-index)))
(set! (-> obj option-index) 3))
;; skip over hidden secrets menu
(if (and (= *title-pc* (-> this current-options)) (not (memcard-unlocked-secrets? #f)) (= (-> this option-index) 4))
(set! (-> this option-index) 3))
(cond
((> (-> obj want-option-index) 0)
(set! (-> obj want-option-index) -1))
((< -2 (-> obj want-option-index))
(+! (-> obj want-option-index) -1))))
((> (-> this want-option-index) 0)
(set! (-> this want-option-index) -1))
((< -2 (-> this want-option-index))
(+! (-> this want-option-index) -1))))
((cpad-pressed? 0 down l-analog-down)
(cond
((= (-> obj current-options) *main-options*)
((= (-> this current-options) *main-options*)
(sound-play "ring-select"))
((!= (length option-array) 1)
(sound-play "roll-over")))
;; skip over hidden secrets menu
(if (and (= *title-pc* (-> this current-options)) (not (memcard-unlocked-secrets? #f)) (= (-> this option-index) 2))
(set! (-> this option-index) 3))
(cond
((< (-> obj want-option-index) 0)
(set! (-> obj want-option-index) 1))
((< (-> obj want-option-index) 2)
(+! (-> obj want-option-index) 1))))
((< (-> this want-option-index) 0)
(set! (-> this want-option-index) 1))
((< (-> this want-option-index) 2)
(+! (-> this want-option-index) 1))))
((cpad-pressed? 0 confirm)
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
(cpad-clear! 0 confirm)
(when (and (not in-generic-page?)
(not (-> *progress-state* clear-screen)))
(sound-play "generic-beep"))
;; don't "select" the page link
(when (!= (-> obj next) 'generic-menu)
(set! (-> obj selected-option) #t)))
(when (!= (-> this next) 'generic-menu)
(set! (-> this selected-option) #t)))
((cpad-pressed? 0 triangle)
;; if we are within a generic managed menu option, handle the stack elsewhere
;; TODO - this likely has issues if we have a nested-non-generic menu, but deal with that use-case if it's ever
;; actually employed
(when (and (not has-generic-history?) (can-go-back? obj))
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
(if (and (= (-> *progress-state* starting-state) 'main) (!= (-> obj current-options) *main-options*))
(when (and (not has-generic-history?) (can-go-back? this))
(cpad-clear! 0 triangle)
(if (and (= (-> *progress-state* starting-state) 'main) (!= (-> this current-options) *main-options*))
(sound-play "window-contract")
(sound-play "generic-beep"))
(clear-history-if-empty! *progress-pc-generic-store*)
(pop-state obj))))))))))
(pop-state this))))))))))
(none))
;; Component implementation
;; - input handling
(defmethod respond-progress ((obj menu-generic-scrolling-page) (progress progress) (selected? symbol))
(defmethod respond-progress ((this menu-generic-scrolling-page) (progress progress) (selected? symbol))
"Handle progress menu navigation logic."
(let ((selected-item? #f))
(if (= (-> obj selected-option-index) -1)
(if (= (-> this selected-option-index) -1)
(cond
((or (cpad-pressed? 0 down l-analog-down)
(and (cpad-hold? 0 down l-analog-down)
(>= (- (current-time) (the-as int (-> obj last-move))) (seconds 0.5))))
(set! (-> obj last-move) (current-time))
(>= (- (current-time) (the-as int (-> this last-move))) (seconds 0.5))))
(set! (-> this last-move) (current-time))
(cond
((< (-> *progress-pc-generic-store* current-menu-hover-index) (dec (-> obj menu-options length)))
((< (-> *progress-pc-generic-store* current-menu-hover-index) (dec (-> this menu-options length)))
(+! (-> *progress-pc-generic-store* current-menu-hover-index) 1)
(sound-play "roll-over"))
(else
@@ -275,15 +277,15 @@
(sound-play "roll-over"))))
((or (cpad-pressed? 0 up l-analog-up)
(and (cpad-hold? 0 up l-analog-up)
(>= (- (current-time) (the-as int (-> obj last-move))) (seconds 0.5))))
(set! (-> obj last-move) (current-time))
(>= (- (current-time) (the-as int (-> this last-move))) (seconds 0.5))))
(set! (-> this last-move) (current-time))
(+! (-> *progress-pc-generic-store* current-menu-hover-index) -1)
(sound-play "roll-over")
(when (< (-> *progress-pc-generic-store* current-menu-hover-index) 0)
(set! (-> *progress-pc-generic-store* current-menu-hover-index) (dec (-> obj menu-options length)))))
(set! (-> *progress-pc-generic-store* current-menu-hover-index) (dec (-> this menu-options length)))))
((cpad-pressed? 0 confirm)
(when (< (-> *progress-pc-generic-store* current-menu-hover-index) (-> obj menu-options length))
(let ((menu-option (-> obj menu-options (-> *progress-pc-generic-store* current-menu-hover-index))))
(when (< (-> *progress-pc-generic-store* current-menu-hover-index) (-> this menu-options length))
(let ((menu-option (-> this menu-options (-> *progress-pc-generic-store* current-menu-hover-index))))
;; if the option is disabled, return early
(when (and (type? menu-option menu-generic-option)
(nonzero? (-> (the-as menu-generic-option menu-option) should-disable?))
@@ -298,7 +300,7 @@
((type? menu-option menu-generic-link-option)
(set! selected-item? #t))
(else
(set! (-> obj selected-option-index) (-> *progress-pc-generic-store* current-menu-hover-index))
(set! (-> this selected-option-index) (-> *progress-pc-generic-store* current-menu-hover-index))
(sound-play "generic-beep"))))))
((cpad-pressed? 0 triangle)
;; we are in a sub-page, time to go back
@@ -308,114 +310,114 @@
;; menu option already selected
(cond
((cpad-pressed? 0 confirm)
(set! (-> obj selected-option-index) -1))
(set! (-> this selected-option-index) -1))
((cpad-pressed? 0 triangle)
(set! (-> obj selected-option-index) -1))))
(set! (-> this selected-option-index) -1))))
;; propagate event to menu-option
(when (< (-> *progress-pc-generic-store* current-menu-hover-index) (-> obj menu-options length))
(respond-progress (-> obj menu-options (-> *progress-pc-generic-store* current-menu-hover-index)) progress (or selected? selected-item?))))
(when (< (-> *progress-pc-generic-store* current-menu-hover-index) (-> this menu-options length))
(respond-progress (-> this menu-options (-> *progress-pc-generic-store* current-menu-hover-index)) progress (or selected? selected-item?))))
0)
(defmethod respond-progress ((obj menu-generic-boolean-option) (progress progress) (selected? symbol))
(defmethod respond-progress ((this menu-generic-boolean-option) (progress progress) (selected? symbol))
(if selected?
(cond
((cpad-pressed? 0 left l-analog-left right l-analog-right)
(if (-> obj value)
(set! (-> obj value) #f)
(set! (-> obj value) #t))
(if (-> this value)
(set! (-> this value) #f)
(set! (-> this value) #t))
(sound-play "generic-beep"))
((cpad-pressed? 0 confirm)
(call-on-confirm obj (-> obj value))
(call-on-confirm this (-> this value))
(sound-play "generic-beep")))
(cond
((cpad-pressed? 0 confirm)
;; set the value, this is so we edit the component's state and not the actual underlying value
;; in other words, don't change the setting until the user has actually confirmed the change!
(set! (-> obj value) (call-get-value-fn obj)))))
(set! (-> this value) (call-get-value-fn this)))))
0)
(defmethod respond-progress ((obj menu-generic-carousel-option) (progress progress) (selected? symbol))
(defmethod respond-progress ((this menu-generic-carousel-option) (progress progress) (selected? symbol))
(if selected?
(cond
((cpad-pressed? 0 left l-analog-left)
(dec! (-> obj item-index))
(when (< (-> obj item-index) 0)
(set! (-> obj item-index) (dec (num-items obj))))
(dec! (-> this item-index))
(when (< (-> this item-index) 0)
(set! (-> this item-index) (dec (num-items this))))
(sound-play "generic-beep"))
((cpad-pressed? 0 right l-analog-right)
(inc! (-> obj item-index))
(when (>= (-> obj item-index) (num-items obj))
(set! (-> obj item-index) 0))
(inc! (-> this item-index))
(when (>= (-> this item-index) (num-items this))
(set! (-> this item-index) 0))
(sound-play "generic-beep"))
((cpad-pressed? 0 confirm)
(call-on-confirm obj (-> obj item-index))
(call-on-confirm this (-> this item-index))
(sound-play "generic-beep")))
(cond
((cpad-pressed? 0 confirm)
;; set the value, this is so we edit the component's state and not the actual underlying value
;; in other words, don't change the setting until the user has actually confirmed the change!
(set! (-> obj item-index) (call-get-item-index-fn obj)))))
(set! (-> this item-index) (call-get-item-index-fn this)))))
0)
(defmethod respond-progress ((obj menu-generic-link-option) (progress progress) (selected? symbol))
(defmethod respond-progress ((this menu-generic-link-option) (progress progress) (selected? symbol))
(when (and selected? (cpad-pressed? 0 confirm))
(navigate! *progress-pc-generic-store* progress (-> obj target) (-> obj on-load))
(navigate! *progress-pc-generic-store* progress (-> this target) (-> this on-load))
(set! (-> progress selected-option) #f)
(sound-play "score-slide"))
0)
(defmethod respond-progress ((obj menu-generic-confirm-option) (progress progress) (selected? symbol))
(defmethod respond-progress ((this menu-generic-confirm-option) (progress progress) (selected? symbol))
(if selected?
(cond
((cpad-pressed? 0 left l-analog-left right l-analog-right)
(if (-> obj confirmed?)
(set! (-> obj confirmed?) #f)
(set! (-> obj confirmed?) #t))
(if (-> this confirmed?)
(set! (-> this confirmed?) #f)
(set! (-> this confirmed?) #t))
(sound-play "generic-beep"))
((cpad-pressed? 0 confirm)
(call-on-confirm obj)
(call-on-confirm this)
(sound-play "generic-beep")))
(cond
((cpad-pressed? 0 confirm)
(set! (-> obj confirmed?) #f))))
(set! (-> this confirmed?) #f))))
0)
(defmethod respond-progress ((obj menu-generic-slider-option) (progress progress) (selected? symbol))
(defmethod respond-progress ((this menu-generic-slider-option) (progress progress) (selected? symbol))
(if selected?
(cond
((and (> (-> obj value) (-> obj min-value))
((and (> (-> this value) (-> this min-value))
(cpad-hold? 0 left l-analog-left))
;; TODO - might not work well on higher frame-rates
(set! (-> obj value) (fmax (- (-> obj value) (-> obj step)) (-> obj min-value)))
(when (< (seconds 0.03) (- (current-time) (-> obj last-sound-played)))
(set! (-> obj last-sound-played) (current-time))
(set! (-> this value) (fmax (- (-> this value) (-> this step)) (-> this min-value)))
(when (< (seconds 0.03) (- (current-time) (-> this last-sound-played)))
(set! (-> this last-sound-played) (current-time))
(sound-play-by-name (static-sound-name "menu-slide") (new-sound-id) 512 0 0 (sound-group sfx) #t)))
((and (< (-> obj value) (-> obj max-value))
((and (< (-> this value) (-> this max-value))
(cpad-hold? 0 right l-analog-right))
;; TODO - might not work well on higher frame-rates
(set! (-> obj value) (fmin (+ (-> obj value) (-> obj step)) (-> obj max-value)))
(when (< (seconds 0.03) (- (current-time) (-> obj last-sound-played)))
(set! (-> obj last-sound-played) (current-time))
(set! (-> this value) (fmin (+ (-> this value) (-> this step)) (-> this max-value)))
(when (< (seconds 0.03) (- (current-time) (-> this last-sound-played)))
(set! (-> this last-sound-played) (current-time))
(sound-play-by-name (static-sound-name "menu-slide") (new-sound-id) 512 0 0 (sound-group sfx) #t)))
((cpad-pressed? 0 confirm)
(call-on-confirm obj (-> obj value))
(call-on-confirm this (-> this value))
(sound-play "generic-beep")))
(cond
((cpad-pressed? 0 confirm)
;; set the value, this is so we edit the component's state and not the actual underlying value
;; in other words, don't change the setting until the user has actually confirmed the change!
(set! (-> obj value) (call-get-value-fn obj)))))
(set! (-> this value) (call-get-value-fn this)))))
0)
(defmethod respond-progress ((obj menu-generic-details-page) (progress progress) (selected? symbol))
(if (= (-> obj selected-entry-index) -1)
(defmethod respond-progress ((this menu-generic-details-page) (progress progress) (selected? symbol))
(if (= (-> this selected-entry-index) -1)
(cond
((or (cpad-pressed? 0 down l-analog-down)
(and (cpad-hold? 0 down l-analog-down)
(>= (- (current-time) (the-as int (-> obj last-move))) (seconds 0.5))))
(set! (-> obj last-move) (current-time))
(>= (- (current-time) (the-as int (-> this last-move))) (seconds 0.5))))
(set! (-> this last-move) (current-time))
(cond
((< (-> *progress-pc-generic-store* current-menu-hover-index) (dec (-> obj entries length)))
((< (-> *progress-pc-generic-store* current-menu-hover-index) (dec (-> this entries length)))
(+! (-> *progress-pc-generic-store* current-menu-hover-index) 1)
(sound-play "roll-over"))
(else
@@ -423,15 +425,15 @@
(sound-play "roll-over"))))
((or (cpad-pressed? 0 up l-analog-up)
(and (cpad-hold? 0 up l-analog-up)
(>= (- (current-time) (the-as int (-> obj last-move))) (seconds 0.5))))
(set! (-> obj last-move) (current-time))
(>= (- (current-time) (the-as int (-> this last-move))) (seconds 0.5))))
(set! (-> this last-move) (current-time))
(+! (-> *progress-pc-generic-store* current-menu-hover-index) -1)
(sound-play "roll-over")
(when (< (-> *progress-pc-generic-store* current-menu-hover-index) 0)
(set! (-> *progress-pc-generic-store* current-menu-hover-index) (dec (-> obj entries length)))))
(set! (-> *progress-pc-generic-store* current-menu-hover-index) (dec (-> this entries length)))))
((cpad-pressed? 0 confirm)
(when (< (-> *progress-pc-generic-store* current-menu-hover-index) (-> obj entries length))
(set! (-> obj selected-entry-index) (-> *progress-pc-generic-store* current-menu-hover-index))
(when (< (-> *progress-pc-generic-store* current-menu-hover-index) (-> this entries length))
(set! (-> this selected-entry-index) (-> *progress-pc-generic-store* current-menu-hover-index))
(sound-play "generic-beep")))
((cpad-pressed? 0 triangle)
;; we are in a sub-page, time to go back
@@ -441,16 +443,16 @@
;; menu option already selected
(cond
((cpad-pressed? 0 confirm)
(set! (-> obj selected-entry-index) -1))
(set! (-> this selected-entry-index) -1))
((cpad-pressed? 0 triangle)
(set! (-> obj selected-entry-index) -1))
(set! (-> this selected-entry-index) -1))
;; keybinds
((nonzero? (-> *progress-pc-generic-store* keybind-select-time))
;; when the bind has been set, or it's expired
(when (or (not (pc-waiting-for-bind?))
(>= (- (current-time) (the-as int (-> *progress-pc-generic-store* keybind-select-time))) (seconds 5.0)))
(set! (-> *progress-pc-generic-store* keybind-select-time) 0)
(set! (-> obj selected-entry-index) -1)
(set! (-> this selected-entry-index) -1)
(set! (-> progress selected-option) #f)
(cond
((not (pc-waiting-for-bind?))
@@ -459,33 +461,33 @@
(pc-stop-waiting-for-bind!)
(sound-play "roll-over")))))))
;; propagate event to menu-option
(when (< (-> *progress-pc-generic-store* current-menu-hover-index) (-> obj entries length))
(respond-progress (-> obj entries (-> *progress-pc-generic-store* current-menu-hover-index)) progress selected?))
(when (< (-> *progress-pc-generic-store* current-menu-hover-index) (-> this entries length))
(respond-progress (-> this entries (-> *progress-pc-generic-store* current-menu-hover-index)) progress selected?))
0)
(defmethod respond-progress ((obj menu-generic-details-keybind-entry) (progress progress) (selected? symbol))
(defmethod respond-progress ((this menu-generic-details-keybind-entry) (progress progress) (selected? symbol))
(when (not selected?)
(cond
((cpad-pressed? 0 confirm)
(let ((bind-info (-> obj bind-info)))
(let ((bind-info (-> this bind-info)))
(pc-set-waiting-for-bind! (-> bind-info device-type) (not (-> bind-info for-buttons?)) (-> bind-info analog-min-range?) (-> bind-info input-idx)))
(set! (-> *progress-pc-generic-store* keybind-select-time) (current-time)))))
0)
(defmethod respond-progress ((obj menu-generic-details-confirm-entry) (progress progress) (selected? symbol))
(defmethod respond-progress ((this menu-generic-details-confirm-entry) (progress progress) (selected? symbol))
(if selected?
(cond
((cpad-pressed? 0 left l-analog-left right l-analog-right)
(if (-> obj confirmed?)
(set! (-> obj confirmed?) #f)
(set! (-> obj confirmed?) #t))
(if (-> this confirmed?)
(set! (-> this confirmed?) #f)
(set! (-> this confirmed?) #t))
(sound-play "generic-beep"))
((cpad-pressed? 0 confirm)
(call-on-confirm obj)
(call-on-confirm this)
(sound-play "generic-beep")))
(cond
((cpad-pressed? 0 confirm)
(set! (-> obj confirmed?) #f))))
(set! (-> this confirmed?) #f))))
0)
;; - rest of component logic
+2 -19
View File
@@ -14,32 +14,15 @@
(push-state ,progress)
(set-next-state ,progress ,state 0)))
(deftype menu-display-mode-option (menu-option)
()
)
(deftype menu-aspect-ratio-pc-option (menu-option)
()
)
(deftype menu-on-off-vsync-option (menu-on-off-option)
()
)
(deftype menu-aspect-ratio-custom-option (menu-option)
()
)
(deftype menu-frame-rate-option (menu-option)
(deftype menu-frame-rate-disclaimer-option (menu-option)
()
)
(deftype menu-frame-rate-disclaimer-option (menu-option)
(deftype menu-exit-game-option (menu-yes-no-option)
()
)
+104 -169
View File
@@ -13,14 +13,10 @@
(deftype progress-global-state-pc (basic)
((decoration-draw-time uint64)
(display-mode-choice-index int8)
(aspect-ratio-choice-index int8)
(aspect-ratio-ratio-index int8)
(frame-rate-choice-index int8)
(frame-rate-disclaimer-time time-frame)
(frame-rate-disclaimer-seen? symbol)
(music-player-track music-player-track-info)
(music-player-flava int8)
@@ -31,41 +27,17 @@
(define *progress-state-pc* (new 'static 'progress-global-state-pc :music-player-track #f))
(defmacro when-not-drawn-decoration (&rest body)
`(when (> (-> *display* real-clock integral-frame-counter) (-> *progress-state-pc* decoration-draw-time))
,@body
(set! (-> *progress-state-pc* decoration-draw-time) (-> *display* real-clock integral-frame-counter))))
(defun set-progress-aspect-ratio-pc-index ()
"set the progress aspect ratio option index accordingly"
(cond
((not (-> *pc-settings* use-vis?))
(if (-> *pc-settings* aspect-ratio-auto?)
(set! (-> *progress-state-pc* aspect-ratio-choice-index) 2)
(set! (-> *progress-state-pc* aspect-ratio-choice-index) 3))
)
(else
(case (get-aspect-ratio)
(('aspect16x9)
(set! (-> *progress-state-pc* aspect-ratio-choice-index) 1))
(else
(set! (-> *progress-state-pc* aspect-ratio-choice-index) 0)))
)
))
(defun set-progress-display-mode-index ()
"set the progress display mode option index accordingly"
(case (-> *pc-settings* display-mode)
(('windowed #f) (set! (-> *progress-state-pc* display-mode-choice-index) 0))
(('fullscreen) (set! (-> *progress-state-pc* display-mode-choice-index) 1))
(('borderless) (set! (-> *progress-state-pc* display-mode-choice-index) 2))
))
(defun set-progress-frame-rate-index ()
(defun set-progress-frame-rate-index ((idx int))
"Set the frame rate option index accordingly."
(when idx
(set! (-> *progress-state-pc* frame-rate-choice-index) idx)
(return 0)
)
;; default to 60 fps
(set! (-> *progress-state-pc* frame-rate-choice-index) 0)
;; lookup entry that matches
@@ -147,14 +119,7 @@
;; PC STATE BEGIN
;; --------------
(init! *progress-pc-generic-store*)
;; set aspect ratio options
(set-progress-aspect-ratio-pc-index)
(set-progress-display-mode-index)
(set-progress-frame-rate-index)
(set! (-> (the menu-on-off-option (-> *graphic-options-pc* options 3)) value-to-modify) (&-> *pc-settings* vsync?))
(set! (-> *progress-state-pc* music-player-track) #f)
(false! (-> *progress-state-pc* frame-rate-disclaimer-seen?))
)
(defun progress-pc-fetch-external-times ((highscore-index int))
@@ -210,6 +175,10 @@
(set! (-> obj current-options)
(if (demo?) *game-options-demo* *game-options-pc*))
)
(('game-options-title)
(set! (-> obj current-options)
(if (demo?) *game-options-demo* *game-options-title-pc*))
)
(('graphic-options)
(set! (-> obj current-options) *graphic-options-pc*)
)
@@ -282,10 +251,10 @@
(set! (-> obj current-options) *quit-options*)
)
(('title)
(set! (-> obj current-options) *title*)
(set! (-> obj current-options) *title-pc*)
)
(('title-options)
(set! (-> obj current-options) *options*)
(set! (-> obj current-options) *options-pc*)
)
(('select-start 'select-pre-start 'select-kiosk-start)
(set! (-> obj current-options) *select-start-options*)
@@ -375,6 +344,7 @@
(set! (-> obj current-options) *music-player-options*)
)
(('fps-disclaimer)
(set-time! (-> *progress-state-pc* frame-rate-disclaimer-time))
(set! (-> obj current-options) *frame-rate-disclaimer-options*)
)
(('generic-menu)
@@ -412,92 +382,6 @@
(defmacro min-max-wrap-around+! (var inc minimum maximum)
`(set! ,var (min-max-wrap-around (+ ,var ,inc) ,minimum ,maximum)))
(defmethod respond-progress ((obj menu-aspect-ratio-pc-option) (arg0 progress) (arg1 symbol))
"Handle progress menu navigation logic."
(when arg1
(cond
((cpad-pressed? 0 triangle)
(set-progress-aspect-ratio-pc-index))
((cpad-pressed? 0 confirm)
(sound-play "generic-beep")
(case (-> *progress-state-pc* aspect-ratio-choice-index)
((0)
(if (not (-> *pc-settings* use-vis?))
(set! (-> *setting-control* user-current aspect-ratio) #f))
(set! (-> *setting-control* user-default aspect-ratio) 'aspect4x3)
(true! (-> *pc-settings* use-vis?))
)
((1)
(if (not (-> *pc-settings* use-vis?))
(set! (-> *setting-control* user-current aspect-ratio) #f))
(set! (-> *setting-control* user-default aspect-ratio) 'aspect16x9)
(true! (-> *pc-settings* use-vis?))
)
((2)
(set! (-> *setting-control* user-default aspect-ratio) 'aspect4x3)
(true! (-> *pc-settings* aspect-ratio-auto?))
(false! (-> *pc-settings* use-vis?))
)
((3)
(cpad-clear! 0 confirm)
(push-and-set-state arg0 'aspect-ratio-custom)
)
)
)
(else
(let ((sound-beep? #f))
(when (cpad-pressed? 0 left l-analog-left)
(true! sound-beep?)
(min-max-wrap-around+! (-> *progress-state-pc* aspect-ratio-choice-index) -1 0 3))
(when (cpad-pressed? 0 right l-analog-right)
(true! sound-beep?)
(min-max-wrap-around+! (-> *progress-state-pc* aspect-ratio-choice-index) 1 0 3))
(if sound-beep?
(sound-play "generic-beep")))
)
)
)
0
)
(defmethod respond-progress ((obj menu-display-mode-option) (arg0 progress) (arg1 symbol))
"Handle progress menu navigation logic."
(when arg1
(cond
((cpad-pressed? 0 triangle)
(set-progress-display-mode-index))
((cpad-pressed? 0 confirm)
(sound-play "generic-beep")
(case (-> *progress-state-pc* display-mode-choice-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))
)
)
(else
(let ((sound-beep? #f))
(when (cpad-pressed? 0 left l-analog-left)
(true! sound-beep?)
(min-max-wrap-around+! (-> *progress-state-pc* display-mode-choice-index) -1 0 2))
(when (cpad-pressed? 0 right l-analog-right)
(true! sound-beep?)
(min-max-wrap-around+! (-> *progress-state-pc* display-mode-choice-index) 1 0 2))
(if sound-beep?
(sound-play "generic-beep")))
)
)
)
0
)
(defmethod respond-progress ((obj menu-aspect-ratio-custom-option) (arg0 progress) (arg1 symbol))
"Handle progress menu navigation logic."
@@ -552,45 +436,6 @@
0
)
(defmethod respond-progress ((obj menu-frame-rate-option) (arg0 progress) (arg1 symbol))
"Handle progress menu navigation logic."
(when arg1
(cond
((cpad-pressed? 0 triangle)
(set-progress-frame-rate-index))
((cpad-pressed? 0 confirm)
(sound-play "generic-beep")
(cond
((not (-> *progress-state-pc* frame-rate-disclaimer-seen?))
(set-time! (-> *progress-state-pc* frame-rate-disclaimer-time))
(push-and-set-state arg0 'fps-disclaimer)
)
(else
(set-frame-rate! *pc-settings* (-> *frame-rate-options* (-> *progress-state-pc* frame-rate-choice-index)) #t)
(commit-to-file *pc-settings*)
))
)
(else
(let ((sound-beep? #f))
(when (cpad-pressed? 0 left l-analog-left)
(true! sound-beep?)
(min-max-wrap-around+! (-> *progress-state-pc* frame-rate-choice-index) -1 0 (1- (-> *frame-rate-options* length)))
)
(when (cpad-pressed? 0 right l-analog-right)
(true! sound-beep?)
(min-max-wrap-around+! (-> *progress-state-pc* frame-rate-choice-index) 1 0 (1- (-> *frame-rate-options* length)))
)
(if sound-beep?
(sound-play "generic-beep")
)
)
)
)
)
0
)
(defmethod respond-progress menu-frame-rate-disclaimer-option ((this menu-frame-rate-disclaimer-option) (arg0 progress) (arg1 symbol))
"Handle progress menu navigation logic."
(when (time-elapsed? (-> *progress-state-pc* frame-rate-disclaimer-time) (seconds 3))
@@ -610,7 +455,7 @@
(cpad-clear! 0 confirm)
(cond
((-> *progress-state* yes-no-choice)
(true! (-> *progress-state-pc* frame-rate-disclaimer-seen?))
(true! *frame-rate-disclaimer-seen?*)
(sound-play "generic-beep")
(set-frame-rate! *pc-settings* (-> *frame-rate-options* (-> *progress-state-pc* frame-rate-choice-index)) #t)
(commit-to-file *pc-settings*)
@@ -618,7 +463,7 @@
)
(else
(sound-play "generic-beep")
(set-progress-frame-rate-index)
(set-progress-frame-rate-index (the int #f))
(pop-state arg0)
)
)
@@ -944,3 +789,93 @@
(when play-sound?
(sound-play "score-slide"))))
0)
(defmethod respond-progress ((this menu-sub-menu-option) (arg0 progress) (arg1 symbol))
"Handle progress menu navigation logic."
(when (and (-> *progress-state* secrets-unlocked)
(not (memcard-unlocked-secrets? #f))
(or (= (-> arg0 current-options) *title-pc*)
(= (-> arg0 current-options) *unlocked-secrets*)
(= (-> arg0 current-options) *select-scene-options*)
(= (-> arg0 current-options) *select-start-options*)
(= (-> arg0 current-options) *save-options-title*)
)
)
(set! (-> *progress-state* secrets-unlocked) #f)
(set! (-> arg0 state-pos) 0)
(set-next-state arg0 'secrets-insufficient-space 0)
)
(when (= (-> this name) (text-id progress-continue-without-saving))
(let ((a1-3 (get-state-check-card arg0 (-> arg0 current))))
(set-next-state arg0 a1-3 0)
)
)
(when (and (= (-> this name) (text-id progress-root-secrets))
(= *title-pc* (-> arg0 current-options))
(not (memcard-unlocked-secrets? #f))
(= (-> arg0 option-index) 4)
)
(set! (-> arg0 option-index) 0)
0
)
(when (cpad-pressed? 0 confirm)
(cpad-clear! 0 confirm)
(cond
((= (-> this name) (text-id progress-demo-exit))
(case *kernel-boot-message*
(('demo-shared)
(set! *master-exit* 'force)
(set-master-mode 'game)
)
(('demo)
(set! (-> *game-info* mode) 'play)
(initialize! *game-info* 'game (the-as game-save #f) "demo-restart")
)
)
)
((= (-> this name) (text-id progress-continue-without-saving))
(progress-intro-start (logtest? (-> *game-info* purchase-secrets) (game-secrets hero-mode)))
)
((= (-> this next-state) 'back)
(pop-state arg0)
)
(else
(sound-play "generic-beep")
(push-state arg0)
(set-next-state arg0 (-> this next-state) 0)
)
)
)
0
)
(defmethod respond-progress ((this menu-exit-game-option) (arg0 progress) (selected? symbol))
"Handle progress menu navigation logic."
(let ((choice (&-> *progress-state* yes-no-choice))
(gp-0 #f)
)
(when selected?
(cond
((cpad-pressed? 0 left l-analog-left)
(when (not (-> choice 0))
(set! gp-0 #t)
(set! (-> choice 0) #t)
)
)
((cpad-pressed? 0 right l-analog-right)
(set! gp-0 (-> choice 0))
(set! (-> choice 0) #f)
)
((cpad-pressed? 0 confirm)
(if (-> choice 0)
(kernel-shutdown (runtime-exit-status exit))
)
)
)
)
(if gp-0
(sound-play "generic-beep")
)
)
0
)
+597 -24
View File
@@ -11,6 +11,60 @@ This gives us more freedom to write code how we want.
;; 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
)
)
)
)
(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)
@@ -310,40 +364,559 @@ This gives us more freedom to write code how we want.
:get-value-fn (lambda () (-> *pc-settings* speedrunner-mode?))
:on-confirm (lambda ((val symbol))
(set! (-> *pc-settings* speedrunner-mode?) val)
(commit-to-file *pc-settings*))))))
(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*)))
;; 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.
(progress-new-generic-link-to-scrolling-page (text-id progress-menu-reassign-binds)
(progress-new-generic-link-to-details-page (text-id progress-reassign-binds-controller) :should-disable? (lambda () (<= (pc-get-controller-count) 0))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind select) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind l3) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind r3) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind start) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind dpad-up) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind dpad-right) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind dpad-down) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind dpad-left) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind l2) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind r2) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind l1) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind r1) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind triangle) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind circle) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind cross) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind square) :device-type (input-device-type controller))
(new 'static 'menu-generic-details-confirm-entry
:name (text-id progress-restore-defaults)
:on-confirm (lambda () (pc-reset-bindings-to-defaults! 0 0))))
(progress-new-generic-link-to-details-page (text-id progress-reassign-binds-keyboard) :should-disable? (lambda () (not (-> *pc-settings* keyboard-enabled?)))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind l-analog-up) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind l-analog-down) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind l-analog-left) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind l-analog-right) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind r-analog-up) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind r-analog-down) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind r-analog-left) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind r-analog-right) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind select) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind l3) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind r3) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind start) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind dpad-up) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind dpad-right) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind dpad-down) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind dpad-left) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind l2) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind r2) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind l1) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind r1) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind triangle) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind circle) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind cross) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind square) :device-type (input-device-type keyboard))
(new 'static 'menu-generic-details-confirm-entry
:name (text-id progress-restore-defaults)
:on-confirm (lambda () (pc-reset-bindings-to-defaults! 0 1))))
(progress-new-generic-link-to-details-page (text-id progress-reassign-binds-mouse) :should-disable? (lambda () (not (-> *pc-settings* mouse-enabled?)))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind select) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind l3) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind r3) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind start) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind dpad-up) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind dpad-right) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind dpad-down) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind dpad-left) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind l2) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind r2) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind l1) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind r1) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind triangle) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind circle) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind cross) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-keybind-entry :keybind (controller-keybind square) :device-type (input-device-type mouse))
(new 'static 'menu-generic-details-confirm-entry
:name (text-id progress-restore-defaults)
:on-confirm (lambda () (pc-reset-bindings-to-defaults! 0 2)))))
(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
;; display mode
;; display select (disable if windowed)
;; vsync
;; aspect ratio
;; msaa
;; frame rate (dont go beyond refresh rate) (disable if SRMode)
;; ps2 options
;; lod bg
;; lod fg
;; particle culling
;; force env mapping
;; actor culling
(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*
(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-display-mode-option :name (text-id progress-display-mode))
(new 'static 'menu-aspect-ratio-pc-option :name (text-id progress-aspect-ratio))
(new 'static 'menu-frame-rate-option :name (text-id progress-frame-rate))
(new 'static 'menu-on-off-vsync-option :name (text-id progress-vsync))
(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-carousel-option
:name (text-id progress-lod-bg)
:items (new 'static 'boxed-array :type text-id
(text-id progress-lod-high)
(text-id progress-lod-default)
(text-id progress-lod-low)
)
:get-item-index-fn (lambda () (-> *pc-settings* lod-force-tfrag))
:on-confirm (lambda ((index int))
(set! (-> *pc-settings* lod-force-tfrag) index)
(set! (-> *pc-settings* lod-force-tie) index)
(commit-to-file *pc-settings*)
)
)
(new 'static 'menu-generic-carousel-option
:name (text-id progress-lod-fg)
:items (new 'static 'boxed-array :type text-id
(text-id progress-lod-high)
(text-id progress-lod-default)
(text-id progress-lod-low)
)
:get-item-index-fn (lambda () (-> *pc-settings* lod-force-actor))
:on-confirm (lambda ((index int))
(set! (-> *pc-settings* lod-force-actor) index)
(commit-to-file *pc-settings*)
)
)
(new 'static 'menu-generic-boolean-option
:name (text-id progress-graphics-ps2-lod-dist)
:truthy-text (text-id progress-on)
:falsey-text (text-id progress-off)
:get-value-fn (lambda () (-> *pc-settings* ps2-lod-dist?))
:on-confirm (lambda ((val symbol))
(set! (-> *pc-settings* ps2-lod-dist?) val)
(commit-to-file *pc-settings*)))
(new 'static 'menu-generic-boolean-option
:name (text-id progress-ps2-parts)
:truthy-text (text-id progress-on)
:falsey-text (text-id progress-off)
:get-value-fn (lambda () (-> *pc-settings* ps2-parts?))
:on-confirm (lambda ((val symbol))
(set! (-> *pc-settings* ps2-parts?) val)
(commit-to-file *pc-settings*)))
(new 'static 'menu-generic-boolean-option
:name (text-id progress-hires-sky)
:truthy-text (text-id progress-on)
:falsey-text (text-id progress-off)
:get-value-fn (lambda () (-> *pc-settings* hires-clouds?))
:on-confirm (lambda ((val symbol))
(set! (-> *pc-settings* hires-clouds?) val)
(commit-to-file *pc-settings*)))
)
(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-options* (new 'static 'boxed-array :type int16 60 75 120 144 165 240))
(define *frame-rate-disclaimer-options*
(new 'static 'menu-option-list
:y-center 198
+1 -1
View File
@@ -1178,7 +1178,7 @@
(suspend)
)
)
(kernel-shutdown)
(kernel-shutdown (the-as runtime-exit-status arg0))
(none)
)
(if (= *master-exit* 'movie)