jak3: fix widescreen scissoring for mission and scene select (#4061)

This commit is contained in:
Hat Kid
2025-10-24 20:10:32 +02:00
committed by GitHub
parent 47620fd1a7
commit 5ac5b6aae8
@@ -1339,6 +1339,181 @@
(none)
)
(defmethod draw-option ((this menu-select-start-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(set! (-> *progress-list-level* mode) (-> arg0 current))
(set! (-> *progress-list-level* act) (-> *progress-work* selected-num))
(let ((f30-0 (fmax 0.0 (* 2.0 (- 0.5 (-> arg0 menu-transition))))))
(let ((s3-0 (length *progress-list-level*)))
(set-alpha! arg1 f30-0)
(set-flags! arg1 (font-flags kerning large))
(set-scale! arg1 0.42)
(progress-method-33 arg0 (-> *progress-work* body-footer))
(let ((idx (max 0 (the int (-> this current-index)))))
(string-format "~S" (lookup-text! *common-text* (-> (progress-list-method-9 *progress-list-level* idx) text-name) #f))
(let ((f28-0 (print-game-text *temp-string* arg1 #t 44 (bucket-id hud-draw-hud-alpha))))
(let ((s1-1 (get-scissor-stack-top arg0)))
(let* ((cur-idx (-> this current-index))
(f2-5 (+ (- 8.0 (* f28-0 (- cur-idx (* (the float (the int (/ cur-idx 1.0))) 1.0)))) (-> s1-1 y)))
)
(set-origin! arg1 (the int (+ 10.0 (-> s1-1 x))) (the int f2-5))
)
(set-width! arg1 (the int (+ (- -20.0 (-> s1-1 x)) (-> s1-1 z))))
(when (not (-> *pc-settings* use-vis?))
(set! (-> arg1 origin x) (the float (adjust-game-x (-> arg1 origin x))))
(*! (-> arg1 width) (-> *pc-settings* aspect-ratio-reciprocal)))
(set-height! arg1 (the int (- (-> s1-1 w) (-> s1-1 y))))
(while (and (< (-> arg1 origin y) (-> s1-1 w)) (< idx s3-0))
(cond
((= idx (-> this selected-index))
(set-color! arg1 (font-color font-color-34))
)
(else
(set-color! arg1 (font-color font-color-32))
)
)
(string-format "~S" (lookup-text! *common-text* (-> (progress-list-method-9 *progress-list-level* idx) text-name) #f))
(let ((f26-0 (print-game-text *temp-string* arg1 #f 40 (bucket-id hud-draw-hud-alpha))))
(if (= idx (-> this selected-index))
(draw-highlight-bar arg0 arg1 (the int (+ -2.0 (-> arg1 origin y))) (the int (+ 2.0 f26-0)) f30-0)
)
(+! (-> arg1 origin y) f26-0)
)
(1+! idx)
)
)
(seek!
(-> this current-index)
(-> this target-index)
(* (/ (-> this scroll-speed) f28-0) (seconds-per-frame))
)
)
)
)
(progress-method-34 arg0)
(let ((selected (-> *progress-work* selected-num)))
(draw-header arg0 arg1 f30-0 (cond
((zero? selected)
(text-id progress-select-start)
)
((= selected 1)
(text-id progress-title-level-select-act-1)
)
((= selected 2)
(text-id progress-title-level-select-act-2)
)
(else
(text-id progress-title-level-select-act-3)
)
)
)
)
(draw-bg-box-alpha-2 arg0 (-> *progress-work* footer) (* 64.0 f30-0))
(draw-bg-box-outline arg0 (-> *progress-work* footer) (* 128.0 f30-0))
)
(progress-method-47
arg0
arg1
(!= (-> this current-index) 0.0)
(!= (-> this current-index) (the float (+ (-> arg0 total-num-tasks) -1)))
)
(none)
)
(defmethod draw-option ((this menu-select-scene-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(let ((f30-0 (fmax 0.0 (* 2.0 (- 0.5 (-> arg0 menu-transition))))))
(let* ((selected (-> *progress-work* selected-num))
(scenes (cond
((zero? selected)
*hud-select-scene-act1*
)
((= selected 1)
*hud-select-scene-act2*
)
((= selected 2)
*hud-select-scene-act3*
)
(else
*hud-select-scene-commentary*
)
)
)
(len (-> scenes length))
)
(set-alpha! arg1 f30-0)
(set-flags! arg1 (font-flags kerning large))
(set-scale! arg1 0.42)
(progress-method-33 arg0 (-> *progress-work* body-footer))
(let ((idx (max 0 (the int (-> this current-index)))))
(string-format "~S" (lookup-text! *common-text* (-> scenes idx text) #f))
(let ((f28-0 (print-game-text *temp-string* arg1 #t 44 (bucket-id hud-draw-hud-alpha))))
(let ((s0-1 (get-scissor-stack-top arg0)))
(let* ((cur-idx (-> this current-index))
(f2-5 (+ (- 8.0 (* f28-0 (- cur-idx (* (the float (the int (/ cur-idx 1.0))) 1.0)))) (-> s0-1 y)))
)
(set-origin! arg1 (the int (+ 10.0 (-> s0-1 x))) (the int f2-5))
)
(set-width! arg1 (the int (+ (- -20.0 (-> s0-1 x)) (-> s0-1 z))))
(when (not (-> *pc-settings* use-vis?))
(set! (-> arg1 origin x) (the float (adjust-game-x (-> arg1 origin x))))
(*! (-> arg1 width) (-> *pc-settings* aspect-ratio-reciprocal)))
(set-height! arg1 (the int (- (-> s0-1 w) (-> s0-1 y))))
(while (and (< (-> arg1 origin y) (-> s0-1 w)) (< idx len))
(cond
((= idx (-> this selected-index))
(set-color! arg1 (font-color font-color-34))
)
(else
(set-color! arg1 (font-color font-color-32))
)
)
(string-format "~S" (lookup-text! *common-text* (-> scenes idx text) #f))
(let* ((f26-0 (print-game-text *temp-string* arg1 #f 40 (bucket-id hud-draw-hud-alpha))))
(if (= idx (-> this selected-index))
(draw-highlight-bar arg0 arg1 (the int (+ -2.0 (-> arg1 origin y))) (the int (+ 2.0 f26-0)) f30-0)
)
(+! (-> arg1 origin y) f26-0)
)
(1+! idx)
)
)
(seek!
(-> this current-index)
(-> this target-index)
(* (/ (-> this scroll-speed) f28-0) (seconds-per-frame))
)
)
)
)
(progress-method-34 arg0)
(let* ((selected (-> *progress-work* selected-num)))
(draw-header arg0 arg1 f30-0 (cond
((zero? selected)
(text-id progress-scene-player-act-1)
)
((= selected 1)
(text-id progress-scene-player-act-2)
)
((= selected 2)
(text-id progress-scene-player-act-3)
)
(else
(text-id progress-title-commentary)
)
)
)
)
(draw-bg-box-alpha-2 arg0 (-> *progress-work* footer) (* 64.0 f30-0))
(draw-bg-box-outline arg0 (-> *progress-work* footer) (* 128.0 f30-0))
)
(progress-method-47
arg0
arg1
(!= (-> this current-index) 0.0)
(!= (-> this current-index) (the float (+ (-> arg0 total-num-tasks) -1)))
)
(none)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; CUSTOM MENU OPTIONS