Files
jak-project/goal_src/jak3/pc/progress/progress-draw-pc.gc
Matt Dallmeyer c31662ef89 [jak3] Fix secrets option on title screen (#4194)
Fixes 2 things:
- secrets option on title screen not hidden if no secrets unlocked
(missing check, we just always drew it)
- off-by-one bug in the "skip over secrets option" logic


https://github.com/user-attachments/assets/0f94f310-ca23-4ba8-91d5-7c2c10793c33

This approach mirrors what we did in Jak 2, but feels a bit hacky... I
have another branch
[here](https://github.com/open-goal/jak-project/compare/master...dallmeyer:jak-project:b/title-secrets?expand=1)
which takes the ND approach of just switching between 2 static menus
like:
```lisp
     (if (memcard-unlocked-secrets? #f #f)
      (set! (-> this current-options) *title-secrets-pc*)
      (set! (-> this current-options) *title-pc*))
```
2026-04-09 20:14:43 -04:00

2365 lines
112 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
#|
Additional PC port specific file for overriding/expanding the progress menu
This gives us more freedom to write code how we want.
|#
(defun setup-scissor ((this hud-box) (buf dma-buffer))
(dma-buffer-add-gs-set buf (scissor-1 (new 'static 'gs-scissor
:scax0 (the int (-> this min x))
:scay0 (the int (-> this min y))
:scax1 (the int (-> this max x))
:scay1 (the int (-> this max y))
)
)
)
)
(defun restore-scissor ((this hud-box) (buf dma-buffer))
(dma-buffer-add-gs-set buf (scissor-1 (new 'static 'gs-scissor :scax1 #x1ff :scay1 #x19f)))
)
(defmacro adjust-x-if-needed (x)
"adjust an x screen coord if ps2 vis is disabled"
`(if (not (-> *pc-settings* use-vis?)) (the float (adjust-game-x (the float ,x))) ,x))
(defmacro swap-confirm? ()
"is the confirm button swapped from X?"
`(and (language? japanese korean)
(case (scf-get-territory)
((GAME_TERRITORY_SCEI GAME_TERRITORY_SCEK) #t)
(else #f))))
(defmacro set-hud-sprite-attributes! (sprite &key (r 128) &key (g 128) &key (b 128) &key (a 1.0) &key x &key y &key (z #xffffff) &key (w 1) &key tex &key (scale-x 1.0) &key (scale-y 1.0))
(with-gensyms (col)
`(begin
(let ((,col (-> ,sprite color2)))
(set! (-> ,col 0) ,r)
(set! (-> ,col 1) ,g)
(set! (-> ,col 2) ,b)
(set! (-> ,col 3) (the int (* 128.0 ,a))))
(set! (-> ,sprite pos z) ,z)
(set! (-> ,sprite pos w) ,w)
(set! (-> ,sprite tex) ,tex)
(set! (-> ,sprite scale-x) ,scale-x)
(set! (-> ,sprite scale-y) ,scale-y)
(set-hud-piece-position! ,sprite ,x ,y))))
(defun draw-savegame-box ((arg0 menu-option) (arg1 float) (arg2 float) (arg3 float) (arg4 float))
(set! (-> arg0 box 0 min x) arg1)
(set! (-> arg0 box 0 max x) arg2)
(set! (-> arg0 box 0 min y) arg3)
(set! (-> arg0 box 0 max y) arg4)
(with-dma-buffer-add-bucket ((s5-0 (-> *display* frames (-> *display* on-screen) global-buf)) (bucket-id hud-draw-hud-alpha))
(draw-box-prim-only (the-as hud-box (-> arg0 box)) s5-0)))
(defun draw-highlight ((y-pos int) (height int) (alpha float))
(let ((x-pos (if (= (get-aspect-ratio) 'aspect4x3) 70 79))
(width (if (= (get-aspect-ratio) 'aspect4x3) 374 355)))
;; og:preserve-this
(#when PC_PORT
;; added for better widescreen handling
(when (not (-> *pc-settings* use-vis?))
(set! x-pos (the int (adjust-game-x (the float x-pos))))
(set! width (the int (* (-> *pc-settings* aspect-ratio-reciprocal) width)))))
(with-dma-buffer-add-bucket ((buffer (-> *display* frames (-> *display* on-screen) global-buf)) (bucket-id hud-draw-hud-alpha))
(draw-sprite2d-xy buffer
x-pos
y-pos
width
height
(new 'static 'rgba :r #x80 :g #x80 :b #x40 :a (the int (* 64.0 alpha)))
#x3fffff))))
(defmethod set-selected-color ((this progress))
(with-pp
;; og:preserve-this high fps fix
(if (< (seconds 0.027) (logand (the int (* DISPLAY_FPS_RATIO (-> pp clock integral-frame-counter))) 15))
(set-font-color (font-color font-color-33)
(new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)
(new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)
(new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)
(new 'static 'rgba :r #xff :g #xff :b #xff :a #x80))
(set-font-color (font-color font-color-33)
(new 'static 'rgba :r #x60 :g #x60 :b #x60 :a #x80)
(new 'static 'rgba :r #x60 :g #x60 :b #x60 :a #x80)
(new 'static 'rgba :r #x60 :g #x60 :b #x60 :a #x80)
(new 'static 'rgba :r #x60 :g #x60 :b #x60 :a #x80)))
(none)))
(defmethod draw-highlight-bar ((this progress) (arg0 font-context) (arg1 int) (arg2 int) (arg3 float))
(let* ((v1-1 (get-scissor-stack-top this))
(a1-1 (the int (-> v1-1 x)))
(a3-1 (the int (- (-> v1-1 z) (-> v1-1 x))))
(f0-6 (- 1.0 (-> this menu-transition))))
(with-dma-buffer-add-bucket ((s3-0 (-> *display* frames (-> *display* on-screen) global-buf)) (bucket-id hud-draw-hud-alpha))
(when (not (-> *pc-settings* use-vis?))
(set! a1-1 (the int (adjust-game-x (the float a1-1))))
(set! a3-1 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) a3-1))))
(draw-sprite2d-xy s3-0
a1-1
arg1
a3-1
arg2
(new 'static 'rgba :r #x80 :g #x80 :b #x40 :a (the int (* 64.0 f0-6)))
#x3fffff)))
0)
(defmethod draw-bg-box-outline ((this progress) (arg0 progress-box) (arg1 float))
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf))
;; og:preserve-this changed from particles bucket
(bucket-id hud-draw-hud-alpha))
(let* ((box (case (get-aspect-ratio)
(('aspect4x3) (-> arg0 aspect4x3))
(('aspect16x9) (-> arg0 aspect16x9))))
(box1 (new 'stack 'hud-box)))
(mem-copy! (the pointer box1) (the pointer box) (size-of hud-box))
(set! (-> box1 color w) (the int arg1))
(#when PC_PORT
(when (not (-> *pc-settings* use-vis?))
(set! (-> box1 min x) (the float (the int (adjust-game-x (-> box min x)))))
(set! (-> box1 max x) (the float (the int (adjust-game-x (-> box max x)))))))
(draw-box-prim-only box1 s4-0)))
0)
(defmethod draw-bg-box-alpha-2 ((this progress) (arg0 progress-box) (arg1 float))
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf)) (bucket-id particles))
(let* ((box (case (get-aspect-ratio)
(('aspect4x3) (-> arg0 aspect4x3))
(('aspect16x9) (-> arg0 aspect16x9))))
(box1 (new 'stack 'hud-box)))
(mem-copy! (the pointer box1) (the pointer box) (size-of hud-box))
(set! (-> box1 color w) (the int arg1))
(#when PC_PORT
(when (not (-> *pc-settings* use-vis?))
(set! (-> box1 min x) (the float (the int (adjust-game-x (-> box min x)))))
(set! (-> box1 max x) (the float (the int (adjust-game-x (-> box max x)))))))
(draw-box-alpha-2 box1 s4-0)))
0)
(defmethod draw-bg-box-alpha-1 ((this progress) (arg0 progress-box) (arg1 float))
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf))
;; og:preserve-this changed from bucket6
(bucket-id bucket7))
(let* ((box (case (get-aspect-ratio)
(('aspect4x3) (-> arg0 aspect4x3))
(('aspect16x9) (-> arg0 aspect16x9))))
(box1 (new 'stack 'hud-box)))
(mem-copy! (the pointer box1) (the pointer box) (size-of hud-box))
(set! (-> box1 color w) (the int arg1))
(#when PC_PORT
(when (not (-> *pc-settings* use-vis?))
(set! (-> box1 min x) (the float (the int (adjust-game-x (-> box min x)))))
(set! (-> box1 max x) (the float (the int (adjust-game-x (-> box max x)))))))
(draw-box-alpha-1 box1 s4-0)))
0)
(defmethod draw-slider-option ((this progress) (arg0 font-context) (arg1 string) (arg2 float) (arg3 float) (arg4 float) (arg5 float) (arg6 float))
(local-vars (sv-80 float) (sv-96 float) (sv-112 vector) (sv-128 int) (sv-144 rgba))
(set! sv-80 arg3)
(let ((s1-0 arg4)
(s5-0 arg5))
(set! sv-96 arg6)
(set! sv-112 (get-scissor-stack-top this))
(let ((slider (new 'stack 'hud-sprite))
(f30-0 (* (- (-> sv-112 z) (-> sv-112 x)) s1-0)))
(let ((s1-1 (- (- 256 (if sv-96 10 0)) (the int (/ f30-0 2)))))
(#when PC_PORT
(when (not (-> *pc-settings* use-vis?))
(set! s1-1 (the int (adjust-game-x (the float s1-1))))
(set! f30-0 (* (-> *pc-settings* aspect-ratio-reciprocal) f30-0))))
(set! sv-128 (the int (+ (-> sv-112 y) (* (- (-> sv-112 w) (-> sv-112 y)) sv-80))))
(let ((f28-0 f30-0))
(let ((f24-0 (-> *video-params* relative-x-scale-reciprical))
(f26-0 (-> *video-params* relative-x-scale)))
(with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf)) (bucket-id hud-draw-hud-alpha))
(set! (-> slider tid) (the-as texture-id (get-texture hud-sliderbackground progress-minimap)))
(if (-> slider tid) (set! (-> slider scale-x) (/ (* f30-0 f24-0) (the float (-> (the-as texture (-> slider tid)) w)))))
(set! (-> slider scale-y) 0.7)
(let ((v1-28 (-> slider color-ptr)))
(set! (-> v1-28 0) 128)
(set! (-> v1-28 1) 128)
(set! (-> v1-28 2) 128)
(set! (-> v1-28 3) (the int (* 128.0 arg2))))
(set-vector! (-> slider pos) s1-1 sv-128 #x3fffff 0)
(draw slider buf (-> *level* level-default) #t)
(let ((f24-1 0.2))
(set! (-> slider tid) (the-as texture-id (get-texture hud-sliderframe progress-minimap)))
(set! (-> slider scale-x) f24-1)
(set! (-> slider scale-y) 1.33)
(if (-> slider tid) (set! f28-0 (- f30-0 (* f24-1 f26-0 (the float (-> (the-as texture (-> slider tid)) w)))))))
(let* ((v1-39 (the int (* f28-0 s5-0)))
(a1-3 (+ s1-1 (the int (* 18.0 f26-0)) v1-39))
(a3-2 (the int (- f28-0 (the float v1-39))))
(t1-1 (shr (shl (the int (* 128.0 arg2)) 56) 32)))
(draw-sprite2d-xy buf a1-3 (+ sv-128 7) a3-2 9 (the-as rgba t1-1) #x3fffff))
(set-vector! (-> slider pos) (+ s1-1 (the int (* f28-0 s5-0))) (+ sv-128 -4) #x3fffff 0)
(draw slider buf (-> *level* level-default) #t)
(when sv-96
(set! sv-144 (-> *font-work* color-table 32 color 0))
(set! (-> slider tid) (the-as texture-id (get-texture hud-speaker-empty progress-minimap)))
(set! (-> slider scale-x) 1.0)
(set! (-> slider scale-y) 1.0)
(let ((v1-55 (-> slider color-ptr)))
(set! (-> v1-55 0) (the-as int (-> sv-144 r)))
(set! (-> v1-55 1) (the-as int (-> sv-144 g)))
(set! (-> v1-55 2) (the-as int (-> sv-144 b)))
(set! (-> v1-55 3) (the int (* 128.0 arg2))))
(set-vector! (-> slider pos) (+ s1-1 -20) (+ sv-128 -5) #x3fffff 0)
(draw slider buf (-> *level* level-default) #t)
(set! (-> slider tid) (the-as texture-id (get-texture hud-speaker-full progress-minimap)))
(set! (-> slider scale-x) 1.0)
(set! (-> slider scale-y) 1.0)
(set-vector! (-> slider pos) (+ (the int f30-0) 8 s1-1) (+ sv-128 -5) #x3fffff 0)
(draw slider buf (-> *level* level-default) #t)))
(set-scale! arg0 0.5)
(set-flags! arg0 (font-flags kerning large))
(let ((f1-14 (the float s1-1))
(f2-3 (+ -20.0 (the float sv-128))))
(set! (-> arg0 origin x) f1-14)
(set! (-> arg0 origin y) f2-3))
(let ((f0-44 (progress-method-45 this arg0 f30-0 (* 32.0 0.5) arg1 0.5 0.75 32)))
(if (= (-> this option-index) (-> this current-index))
(draw-highlight-bar this arg0 (the int (+ -2.0 (-> arg0 origin y))) (the int (+ 4.0 f0-44)) arg2))))
(+! (-> arg0 origin x) f30-0))
(set-flags! arg0 (font-flags kerning right large))
(string-format "~D%" (the int (* 100.0 s5-0)))
(print-game-text *temp-string* arg0 #f 44 (bucket-id hud-draw-hud-alpha)))
(set-flags! arg0 (font-flags kerning large))
0)))
(defmethod draw-option ((this menu-unlocked-sub-menu-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(let ((s2-0 (memcard-unlocked-secrets? arg0 #t))
(f30-0 (fmax 0.0 (* 2.0 (- 0.5 (-> arg0 menu-transition))))))
(adjust-font-origin-y arg0 arg1 (-> this offset-y))
(set-scale! arg1 0.5)
(if (= arg2 (-> arg0 option-index)) 33 32)
(let ((f0-3 (if (logtest? s2-0 (-> this mask))
(print-game-text (lookup-text! *common-text* (-> this name) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(print-game-text "?????????" arg1 #f 44 (bucket-id hud-draw-hud-alpha)))))
(if (= arg2 (-> arg0 option-index))
(draw-highlight-bar arg0 arg1 (the int (+ 2.0 (-> arg1 origin y))) (the int (+ -1.0 f0-3)) f30-0))))
(none))
(defmethod draw-option ((this menu-secret-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(local-vars
(sv-16 float)
(sv-24 int)
(sv-96 int)
(sv-112 int)
(sv-128 int)
(sv-192 string)
(sv-208 text-id)
(sv-240 string)
(sv-288 int)
(sv-352 string)
(sv-368 string)
)
(set! sv-16 (fmax 0.0 (* 2.0 (- 0.5 (-> arg0 menu-transition)))))
(set! (-> arg1 alpha) sv-16)
(cond
((not (loaded? *bigmap*))
(progress-method-51 arg0 arg1)
)
(else
(let ((s2-0 (get-texture hud-orb progress-minimap)))
(when (and s2-0 (not (-> this available-title)))
(progress-method-33 arg0 (-> *progress-work* sub-header))
(let ((s3-0 (get-scissor-stack-top arg0)))
(let* ((f0-5 0.64)
(f30-0 (+ 10.0 (* (the float (-> s2-0 w)) f0-5 (-> *video-params* relative-x-scale))))
)
(let ((f1-5 (* (the float (-> s2-0 h)) f0-5)))
(draw-icon-array!
(-> *progress-icon-arrays* 68)
(the int (+ 10.0 (adjust-x-if-needed (-> s3-0 x))))
(the int (+ (-> s3-0 y) (* 0.5 (- 28.0 f1-5))))
f0-5
f0-5
(the rgba (logior #x808080 (shr (shl (the int (* 128.0 sv-16)) 56) 32)))
sv-16
)
)
(set! (-> arg1 height) 28.0)
(set-flags! arg1 (font-flags kerning large))
(let ((f28-0 0.45))
(set-color! arg1 (font-color font-color-34))
(cond
((-> this buy-menu)
(string-format "x~D ~S" (-> *menu-secrets-array* (-> this selected-index) cost) (lookup-text! *common-text* (text-id progress-secrets-price) #f))
)
(else
(string-format "x~D ~S" (the int (-> *game-info* skill)) (lookup-text! *common-text* (text-id progress-secrets-orbs-available) #f))
)
)
(set-scale! arg1 f28-0)
(set! (-> arg1 origin x) (+ (adjust-x-if-needed (-> s3-0 x)) f30-0))
(set! (-> arg1 origin y) (+ (-> s3-0 y) (* 0.5 (- 28.0 (* 32.0 f28-0)))))
)
)
(print-game-text *temp-string* arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(set-flags! arg1 (font-flags kerning right large))
(set! (-> arg1 origin x) (+ -10.0 (adjust-x-if-needed (-> s3-0 z))))
)
(string-format "~D/600 ~S" (the int (-> *game-info* skill-total)) (lookup-text! *common-text* (text-id progress-secrets-orbs-collected) #f))
(print-game-text *temp-string* arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(progress-method-34 arg0)
)
)
(set-scale! arg1 0.42)
(cond
((-> this available-title)
(progress-method-33 arg0 (-> *progress-work* body-footer))
(progress-method-53 arg0 arg1)
(set-color! arg1 (font-color font-color-32))
(set-flags! arg1 (font-flags kerning middle middle-vert large))
(string-format (lookup-text! *common-text* (text-id text-0080) #f))
(print-game-text *temp-string* arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(progress-method-34 arg0)
(progress-method-33 arg0 (-> *progress-work* footer))
(set-flags! arg1 (font-flags kerning middle large))
(adjust-font-origin-y arg0 arg1 0.1)
(set-color! arg1 (font-color font-color-33))
(let ((f0-16 (print-game-text
(lookup-text! *common-text* (text-id progress-continue) #f)
arg1
#f
32
(bucket-id hud-draw-hud-alpha)
)
)
)
(draw-highlight-bar arg0 arg1 (the int (+ -2.0 (-> arg1 origin y))) (the int (+ 4.0 f0-16)) (-> arg1 alpha))
)
(progress-method-34 arg0)
)
((-> this buy-menu)
(progress-method-33 arg0 (-> *progress-work* body))
(adjust-font-origin-y arg0 arg1 0.45)
(progress-method-50
arg0
arg1
(-> *menu-secrets-array* (-> this selected-index) name)
(text-id progress-secrets-buy)
(text-id progress-secrets-cancel)
#t
#t
0.65
)
(draw-header arg0 arg1 sv-16 (text-id progress-secrets))
(draw-bg-box-outline arg0 (-> *progress-work* sub-header) (* 128.0 sv-16))
(progress-method-34 arg0)
)
(else
(progress-method-33 arg0 (-> *progress-work* sub-body-footer))
(let* ((s3-3 (get-scissor-stack-top arg0))
(f22-0 (- (-> s3-3 w) (-> s3-3 y)))
(f30-1 (+ 10.0 (* 24.0 (-> *video-params* relative-x-scale) (-> arg1 scale))))
(f28-1 (+ (- -10.0 (-> s3-3 x)) (-> s3-3 z)))
)
(string-format "~32L~S~44L ~S" (lookup-text! *common-text* (text-id progress-on) #f) (lookup-text! *common-text* (text-id progress-off) #f))
(let* ((f0-27 (-> (get-string-length *temp-string* arg1) length))
(f26-0 (- (- (- f28-1 f30-1) f0-27) f30-1))
)
(set-flags! arg1 (font-flags kerning large))
(set! (-> arg1 width) f26-0)
(let ((s1-5 (max 0 (the int (-> this current-index)))))
(let* ((a0-61 (-> *menu-secrets-array* s1-5))
(s0-4 (-> a0-61 name))
)
(case (secret-item-option-method-12 a0-61)
((4)
(set! sv-192 "?????????")
)
(else
(set! sv-192 (lookup-text! *common-text* s0-4 #f))
)
)
)
(string-format "~S" sv-192)
(let ((f24-0 (print-game-text *temp-string* arg1 #t 40 (bucket-id hud-draw-hud-alpha))))
(let ((f0-33 4.0)
(f1-25 (-> this current-index))
)
(set! (-> arg1 origin y)
(+ (- f0-33 (* f24-0 (- f1-25 (* (the float (the int (/ f1-25 1.0))) 1.0)))) (-> s3-3 y))
)
)
(set! (-> arg1 height) f22-0)
(while (and (< (-> arg1 origin y) (-> s3-3 w)) (< s1-5 (-> *menu-secrets-array* length)))
(let ((s0-6 (-> *menu-secrets-array* s1-5)))
(set! sv-208 (-> *menu-secrets-array* s1-5 name))
(set! sv-288 (secret-item-option-method-12 s0-6))
(case sv-288
((4)
(set! sv-240 "?????????")
)
(else
(set! sv-240 (lookup-text! *common-text* sv-208 #f))
)
)
(cond
((logtest? (-> *menu-secrets-array* s1-5 flags) (secret-item-option-flags sf0))
(set! (-> arg1 origin x) (+ 10.0 (adjust-x-if-needed (-> s3-3 x))))
(set! (-> arg1 width) f28-1)
(set-color! arg1 (font-color font-color-34))
(set-flags! arg1 (font-flags kerning large))
(let ((f22-1 (-> arg1 origin y)))
(string-format "~S" sv-240)
(set! (-> arg1 origin y) (+ f22-1 (print-game-text *temp-string* arg1 #f 40 (bucket-id hud-draw-hud-alpha))))
)
)
((not (and (logtest? (-> *menu-secrets-array* s1-5 flags) (secret-item-option-flags sf4))
(or (nonzero? (-> *setting-control* user-current subtitle-language))
(nonzero? (-> *setting-control* user-current language))
(nonzero? (-> *setting-control* user-current audio-language))
)
)
)
(set! (-> arg1 origin x) (adjust-x-if-needed (+ (-> s3-3 x) f30-1)))
(set! (-> arg1 width) f26-0)
(let ((v1-148 sv-288))
(cond
((or (= v1-148 4) (= v1-148 3))
(set-flags! arg1 (font-flags kerning large ff7))
(set-color! arg1 (font-color font-color-44))
)
((zero? v1-148)
(set-flags! arg1 (font-flags kerning large))
(set-color! arg1 (font-color font-color-34))
)
(else
(set-flags! arg1 (font-flags kerning large))
(set-color! arg1 (font-color font-color-32))
)
)
)
(let ((f22-2 (-> arg1 origin y)))
(string-format "~S" sv-240)
(let ((f20-0 (print-game-text *temp-string* arg1 #f 40 (bucket-id hud-draw-hud-alpha))))
(when (not (logtest? (-> *menu-secrets-array* s1-5 flags) (secret-item-option-flags sf0)))
(set! (-> arg1 origin x) (adjust-x-if-needed (+ (-> s3-3 x) f28-1)))
(set-flags! arg1 (font-flags kerning right large))
(set! sv-352 (lookup-text! *common-text* (text-id progress-on) #f))
(set! sv-368 (lookup-text! *common-text* (text-id progress-off) #f))
(cond
((or (zero? sv-288) (= sv-288 3))
(string-format "~d" (-> s0-6 cost))
(print-game-text *temp-string* arg1 #f 40 (bucket-id hud-draw-hud-alpha))
)
((= sv-288 1)
(cond
((logtest? (-> *menu-secrets-array* s1-5 flags) (secret-item-option-flags sf1))
(string-format "~32L~S~44L ~S" sv-352 sv-368)
(print-game-text *temp-string* arg1 #f 40 (bucket-id hud-draw-hud-alpha))
)
(else
(string-format "~S" sv-352)
(print-game-text *temp-string* arg1 #f 40 (bucket-id hud-draw-hud-alpha))
)
)
)
((= sv-288 2)
(cond
((logtest? (-> *menu-secrets-array* s1-5 flags) (secret-item-option-flags sf1))
(string-format "~44L~S ~32L~S~1L" sv-352 sv-368)
(print-game-text *temp-string* arg1 #f 40 (bucket-id hud-draw-hud-alpha))
)
(else
(string-format "~S" sv-368)
(print-game-text *temp-string* arg1 #f 40 (bucket-id hud-draw-hud-alpha))
)
)
)
)
)
(+! (-> arg1 origin y) f20-0)
(if (= s1-5 (-> this selected-index))
(draw-highlight-bar arg0 arg1 (the int (+ -2.0 f22-2)) (the int (+ 3.0 f20-0)) sv-16)
)
)
)
)
)
)
(+! s1-5 1)
)
(seek! (-> this current-index) (-> this target-index) (* (/ 600.0 f24-0) (seconds-per-frame)))
)
)
)
)
(progress-method-34 arg0)
(draw-header arg0 arg1 sv-16 (text-id progress-secrets))
(draw-bg-box-outline arg0 (-> *progress-work* sub-header) (* 128.0 sv-16))
(draw-bg-box-alpha-2 arg0 (-> *progress-work* footer) (* 64.0 sv-16))
(draw-bg-box-outline arg0 (-> *progress-work* footer) (* 128.0 sv-16))
(progress-method-47
arg0
arg1
(!= (-> this current-index) 0.0)
(!= (-> this current-index) (the float (+ (-> *menu-secrets-array* length) -1)))
)
)
)
)
)
0
(none)
)
(defmethod draw-option ((this menu-missions-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(local-vars
(sv-176 float)
(sv-180 game-task-node-info)
(sv-184 game-task-node-info)
(sv-188 float)
(sv-192 int)
(sv-200 symbol)
(sv-208 int)
(sv-216 (array game-task-node-info))
(sv-256 string)
(sv-272 game-task-node-info)
(sv-288 text-id)
)
(set! sv-176 (fmax 0.0 (* 2.0 (- 0.5 (-> arg0 menu-transition)))))
(set! sv-180 (new 'stack 'game-task-node-info))
(set! sv-184 (new 'stack 'game-task-node-info))
(set! (-> arg0 current-task-index) (length (-> *game-info* sub-task-list)))
(set! (-> arg0 current-line-index) -1)
(set! (-> arg0 current-task) (game-task unknown))
(set! (-> arg0 first-closed-line-index) -1)
(set! (-> arg0 extra-text-state) -1)
(set! (-> arg0 num-open-tasks-found) 0)
(set! (-> arg0 num-closed-tasks-found) 0)
(set! (-> arg1 alpha) sv-176)
(set! (-> *game-info* mission-list 0) sv-180)
(set! (-> sv-180 description) (text-id progress-missions-todo))
(set! (-> sv-184 description) (text-id progress-missions-completed))
(progress-method-33 arg0 (-> *progress-work* body-footer))
(let ((s3-0 (get-scissor-stack-top arg0)))
(set! sv-188 (- (-> s3-0 w) (-> s3-0 y)))
(set! sv-192 1)
(set! sv-200 #t)
(set! sv-216 (-> *game-info* mission-list))
(dotimes (s2-0 (length (-> *game-info* sub-task-list)))
(let ((v0-6 (find-mission-text-at-index arg0 s2-0)))
(when v0-6
(when (and (logtest? (-> v0-6 flags) (game-task-node-flag closed)) sv-200)
(set! sv-200 #f)
(set! (-> sv-216 sv-192) sv-184)
(1+! sv-192)
)
(set! (-> sv-216 sv-192) v0-6)
(1+! sv-192)
)
)
)
(set! (-> arg0 total-num-tasks) sv-192)
(sort-task-node-result (-> arg0 total-num-tasks))
(set-flags! arg1 (font-flags kerning large))
(set-scale! arg1 0.5)
(string-format "~S" (lookup-text! *common-text* (text-id progress-missions-complete-icon) #f))
(let ((f30-1 (+ 14.0 (-> (get-string-length *temp-string* arg1) length))))
(set! (-> arg1 width) (+ (- (- -10.0 f30-1) (-> s3-0 x)) (-> s3-0 z)))
(let ((s2-2 (-> *game-info* mission-list))
(s1-2 (max 0 (the int (-> this current-index))))
)
(let* ((s0-1 (-> s2-2 s1-2))
(a1-10
(if (and (logtest? (-> s0-1 flags) (game-task-node-flag closed)) (task-complete? *game-info* (-> s0-1 task)))
(-> *game-info* play-list (-> s0-1 task) text-name)
(-> s0-1 description)
)
)
)
(set! sv-256 (lookup-text! *common-text* a1-10 #f))
)
(string-format "~S" sv-256)
(let ((f28-0 (print-game-text *temp-string* arg1 #t 44 (bucket-id hud-draw-hud-alpha))))
(let* ((v1-60 arg1)
(f0-14 (+ 10.0 (-> s3-0 x)))
(f1-6 4.0)
(f2-2 (-> this current-index))
(f1-8 (+ (- f1-6 (* f28-0 (- f2-2 (* (the float (the int (/ f2-2 1.0))) 1.0)))) (-> s3-0 y)))
)
(set! (-> v1-60 origin x) f0-14)
(set! (-> v1-60 origin y) f1-8)
)
(set! (-> arg1 height) sv-188)
(while (and (< (-> arg1 origin y) (-> s3-0 w)) (< s1-2 (-> arg0 total-num-tasks)))
(set! sv-272 (-> s2-2 s1-2))
(if (and (logtest? (-> sv-272 flags) (game-task-node-flag closed)) (task-complete? *game-info* (-> sv-272 task)))
(set! sv-288 (-> *game-info* play-list (-> sv-272 task) text-name))
(set! sv-288 (-> sv-272 description))
)
(set! (-> arg1 origin x) (+ 10.0 (adjust-x-if-needed (-> s3-0 x))))
(cond
((or (= sv-288 (text-id progress-missions-todo)) (= sv-288 (text-id progress-missions-completed)))
(let ((a0-41 arg1))
(set! (-> a0-41 color) (font-color font-color-34))
)
)
(else
(string-format "~S" (lookup-text! *common-text*
(if (logtest? (-> sv-272 flags) (game-task-node-flag closed))
(text-id progress-missions-complete-icon)
(text-id progress-missions-todo-icon)
)
#f))
(print-game-text *temp-string* arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(set-color! arg1 (font-color font-color-32))
(set! (-> arg1 origin x) (+ (adjust-x-if-needed (-> s3-0 x)) f30-1))
)
)
(let ((f26-0 (-> arg1 origin y)))
(string-format "~S" (lookup-text! *common-text* sv-288 #f))
(set! (-> arg1 origin y) (+ f26-0 (print-game-text *temp-string* arg1 #f 44 (bucket-id hud-draw-hud-alpha))))
)
(1+! s1-2)
)
(set! (-> this on-screen) (< (-> arg1 origin y) (-> s3-0 w)))
(seek!
(-> this current-index)
(-> this target-index)
(* (/ (-> this scroll-speed) f28-0) (seconds-per-frame))
)
)
)
)
)
(progress-method-34 arg0)
(draw-header arg0 arg1 sv-176 (text-id progress-missions))
(draw-bg-box-alpha-2 arg0 (-> *progress-work* footer) (* 64.0 sv-176))
(draw-bg-box-outline arg0 (-> *progress-work* footer) (* 128.0 sv-176))
(progress-method-47 arg0 arg1
(!= (-> this current-index) 0.0)
(and (not (-> this on-screen)) (!= (-> this current-index) (the float (+ (-> arg0 total-num-tasks) -1)))))
(none)
)
(defmethod draw-option ((this menu-highscores-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(let ((f30-0 (fmax 0.0 (* 2.0 (- 0.5 (-> arg0 menu-transition)))))
(s4-0 *progress-work*)
)
(set! (-> arg1 alpha) f30-0)
(set-flags! arg1 (font-flags kerning middle large))
(progress-method-33 arg0 (-> s4-0 body-footer))
(progress-method-53 arg0 arg1)
(let ((f28-0 (the float (menu-highscores-option-method-12 this))))
(let* ((f0-2 (-> this current-index))
(f26-0 (- f0-2 (* (the float (the int (/ f0-2 f28-0))) f28-0)))
(f0-4 (+ 1.0 f26-0))
(f0-5 (- f0-4 (* (the float (the int (/ f0-4 f28-0))) f28-0)))
(s2-0 (-> this pages (the int f26-0)))
(s3-1 (-> this pages (the int f0-5)))
(s1-0 (get-scissor-stack-top arg0))
(f0-8 (- (-> s1-0 z) (-> s1-0 x)))
)
(when (!= f28-0 0.0)
(let ((f26-1 (* (- 1.0 (- f26-0 (* (the float (the int (/ f26-0 1.0))) 1.0))) f0-8)))
(set! (-> arg1 origin x) (+ (- f26-1 f0-8) (-> s1-0 x)))
(highscore-page-info-method-9
(the highscore-page-info s2-0)
arg0
arg1
(- f26-1 f0-8)
f30-0
)
(when (< 1.0 f28-0)
(set! (-> arg1 origin x) (+ f26-1 (-> s1-0 x)))
(highscore-page-info-method-9
(the highscore-page-info s3-1)
arg0
arg1
f26-1
f30-0
)
)
)
)
)
(progress-method-34 arg0)
(draw-header arg0 arg1 f30-0 (text-id progress-highscores))
(cond
((< 1.0 f28-0)
(draw-prev-next-footer arg0 arg1 f30-0)
)
(else
(draw-bg-box-alpha-2 arg0 (-> s4-0 footer) (* 64.0 f30-0))
(draw-bg-box-outline arg0 (-> s4-0 footer) (* 128.0 f30-0))
)
)
)
)
(none)
)
(defmethod highscore-page-info-method-9 ((this highscore-page-info) (arg0 progress) (arg1 font-context) (arg2 float) (arg3 float))
(local-vars
(sv-16 highscore-info)
(sv-96 int)
(sv-112 int)
)
(let ((s3-0 (get-scissor-stack-top arg0)))
(let ((f28-0 (-> *video-params* relative-x-scale)))
(set! sv-16 (-> *highscore-info-array* (-> this game-score)))
(let ((f30-0 (- (-> s3-0 z) (-> s3-0 x)))
(s0-0 *progress-work*)
)
(set-flags! arg1 (font-flags kerning large))
(set-scale! arg1 0.675)
(set-color! arg1 (font-color font-color-32))
(set! (-> arg1 origin x) (+ 10.0 arg2 (adjust-x-if-needed (-> s3-0 x))))
(adjust-font-origin-y arg0 arg1 0.01)
(if (not (-> *pc-settings* use-vis?))
(set! (-> arg1 width) (* 0.75 (-> *pc-settings* aspect-ratio-reciprocal) f30-0))
(set! (-> arg1 width) (* 0.75 f30-0))
)
;; hack to scissor top part of highscore display
;; top right icon
(with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf))
(bucket-id hud-draw-pris2))
(let ((hiscore0-box (case (get-aspect-ratio)
(('aspect4x3) (-> s0-0 highscore-0 aspect4x3 box))
(('aspect16x9) (-> s0-0 highscore-0 aspect16x9 box)))))
(dma-buffer-add-gs-set buf
(scissor-1
(new 'static 'gs-scissor
:scax0 (the int (adjust-x-if-needed (-> hiscore0-box min x)))
:scay0 (the int (-> hiscore0-box min y))
:scax1 (the int (adjust-x-if-needed (-> hiscore0-box max x)))
:scay1 (the int (-> hiscore0-box max y)))))))
;; text
(with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf))
(bucket-id hud-draw-hud-alpha))
(let ((hiscore0-box (case (get-aspect-ratio)
(('aspect4x3) (-> s0-0 highscore-0 aspect4x3 box))
(('aspect16x9) (-> s0-0 highscore-0 aspect16x9 box))))
(hiscore1-box (case (get-aspect-ratio)
(('aspect4x3) (-> s0-0 highscore-1 aspect4x3 box))
(('aspect16x9) (-> s0-0 highscore-1 aspect16x9 box)))))
(dma-buffer-add-gs-set buf
(scissor-1
(new 'static 'gs-scissor
:scax0 (the int (adjust-x-if-needed (-> hiscore0-box min x)))
:scay0 (the int (-> hiscore0-box min y))
:scax1 (the int (adjust-x-if-needed (-> hiscore0-box max x)))
:scay1 (the int (-> hiscore1-box max y)))))))
(string-format "~S" (lookup-text! *common-text* (-> this text) #f))
(print-game-text *temp-string* arg1 #f 32 (bucket-id hud-draw-hud-alpha))
(draw-icon-array!
(-> *progress-icon-arrays* (-> this icon))
(the int (+ (- (adjust-x-if-needed (-> s3-0 z)) (* (-> this icon-offsetx) f28-0)) arg2))
(the int (+ (-> s3-0 y) (-> this icon-offsety)))
(-> this icon-scalex)
(-> this icon-scaley)
(new 'static 'rgba :r #x80 :g #x80 :b #x80 :a (the int (* 128.0 arg3)))
arg3
)
(when (not (logtest? (-> sv-16 flags) (highscore-flags hf1)))
(let ((f28-1 (* 20.0 f28-0))
(f26-0 (+ 50.0 (-> s3-0 y)))
)
(set! sv-96 (the int (+ 48.0 (-> s3-0 y))))
(set! sv-112 (logior #x808080 (shr (shl (the int (* 128.0 arg3)) 56) 32)))
(let ((f24-0 0.25)
(f22-0 (+ 10.0 arg2 (-> s3-0 x)))
)
(set-scale! arg1 0.45)
(let ((f20-0 f22-0))
(draw-icon-array! (-> *progress-icon-arrays* 63) (the int (adjust-x-if-needed f20-0)) sv-96 0.25 0.25 (the-as rgba sv-112) arg3)
(highscore-page-info-method-10 this arg1 (-> sv-16 gold-score) (+ (adjust-x-if-needed f20-0) f28-1) f26-0)
)
(let ((f20-1 (+ f22-0 (* 0.333 f30-0))))
(draw-icon-array! (-> *progress-icon-arrays* 64) (the int (adjust-x-if-needed f20-1)) sv-96 0.25 0.25 (the-as rgba sv-112) arg3)
(highscore-page-info-method-10 this arg1 (-> sv-16 silver-score) (+ (adjust-x-if-needed f20-1) f28-1) f26-0)
)
(let ((f30-1 (+ f22-0 (* 0.667 f30-0))))
(draw-icon-array! (-> *progress-icon-arrays* 65) (the int (adjust-x-if-needed f30-1)) sv-96 f24-0 f24-0 (the-as rgba sv-112) arg3)
(highscore-page-info-method-10 this arg1 (-> sv-16 bronze-score) (+ (adjust-x-if-needed f30-1) f28-1) f26-0)
)
)
)
)
(draw-bg-box-alpha-2 arg0 (-> s0-0 highscore-1) (* 16.0 arg3))
(draw-bg-box-outline arg0 (-> s0-0 highscore-1) (* 128.0 arg3))
(draw-bg-box-outline arg0 (-> s0-0 highscore-0) (* 128.0 arg3))
(progress-method-33 arg0 (-> s0-0 highscore-body))
)
)
(let ((f30-2 (+ 10.0 arg2 (adjust-x-if-needed (-> s3-0 x))))
(f28-2 (+ -10.0 arg2 (adjust-x-if-needed (-> s3-0 z))))
(s3-1 (get-game-score-ref *game-info* (the-as int (-> this game-score))))
)
(set-scale! arg1 0.6)
(adjust-font-origin-y arg0 arg1 0.03)
(highscore-page-info-method-11 this arg1 56 (-> s3-1 0) f30-2 f28-2)
(set-scale! arg1 0.5)
(adjust-font-origin-y arg0 arg1 0.18)
(highscore-page-info-method-11 this arg1 57 (-> s3-1 1) f30-2 f28-2)
(set-scale! arg1 0.45)
(adjust-font-origin-y arg0 arg1 0.31)
(highscore-page-info-method-11 this arg1 58 (-> s3-1 2) f30-2 f28-2)
(set-scale! arg1 0.425)
(adjust-font-origin-y arg0 arg1 0.43)
(highscore-page-info-method-11 this arg1 59 (-> s3-1 3) f30-2 f28-2)
(adjust-font-origin-y arg0 arg1 0.545)
(highscore-page-info-method-11 this arg1 60 (-> s3-1 4) f30-2 f28-2)
(adjust-font-origin-y arg0 arg1 0.66)
(highscore-page-info-method-11 this arg1 61 (-> s3-1 5) f30-2 f28-2)
(adjust-font-origin-y arg0 arg1 0.775)
(highscore-page-info-method-11 this arg1 62 (-> s3-1 6) f30-2 f28-2)
(adjust-font-origin-y arg0 arg1 0.89)
(highscore-page-info-method-11 this arg1 63 (-> s3-1 7) f30-2 f28-2)
)
)
(progress-method-34 arg0)
0
(none)
)
(defmethod draw-option ((this menu-inventory) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(let ((f30-0 (fmax 0.0 (* 2.0 (- 0.5 (-> arg0 menu-transition))))))
(set! (-> arg1 alpha) f30-0)
(set-flags! arg1 (font-flags kerning middle large))
(progress-method-33 arg0 (-> *progress-work* body-footer))
(progress-method-53 arg0 arg1)
(let* ((f0-2 (the float (-> this screens length)))
(f28-0 (-> this current-index))
(f1-3 (+ 1.0 f28-0))
(f0-4 (- f1-3 (* (the float (the int (/ f1-3 f0-2))) f0-2)))
(s3-0 (-> this screens (the int f28-0)))
(s4-1 (-> this screens (the int f0-4)))
(s2-0 (get-scissor-stack-top arg0))
(f0-7 (- (-> s2-0 z) (-> s2-0 x)))
(f28-1 (* (- 1.0 (- f28-0 (* (the float (the int (/ f28-0 1.0))) 1.0))) f0-7))
)
(set! (-> arg1 origin x) (+ (- f28-1 f0-7) (-> s2-0 x)))
(inventory-screen-method-9 s3-0 arg0 arg1 (- f28-1 f0-7) f30-0)
(set! (-> arg1 origin x) (+ f28-1 (-> s2-0 x)))
(inventory-screen-method-9 s4-1 arg0 arg1 f28-1 f30-0)
)
(progress-method-34 arg0)
(draw-header arg0 arg1 f30-0 (text-id progress-inventory))
(draw-prev-next-footer arg0 arg1 f30-0)
)
(none)
)
(defmethod inventory-screen-method-9 ((this inventory-screen) (arg0 progress) (arg1 font-context) (arg2 float) (arg3 float))
(set-scale! arg1 0.45)
(set-color! arg1 (font-color font-color-32))
(adjust-font-origin-y arg0 arg1 0.01)
(string-format "~S" (lookup-text! *common-text* (-> this name) #f))
(print-game-text *temp-string* arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(dotimes (s1-1 (-> this groups length))
(inventory-item-group-method-10
(-> this groups s1-1)
arg0
arg1
arg2
arg3
(the-as int (= s1-1 (-> this current-index)))
)
)
(none)
)
(defmethod inventory-item-group-method-10 ((this inventory-item-group) (arg0 progress) (arg1 font-context) (arg2 float) (arg3 float) (arg4 int))
(dotimes (i (-> this items length))
(when (and arg4 (have-items? this))
(set-scale! arg1 0.45)
(adjust-font-origin-y arg0 arg1 0.9)
(string-format "~S" (lookup-text! *common-text* (-> this name) #f))
(print-game-text *temp-string* arg1 #f 44 (bucket-id hud-draw-hud-alpha))
)
(inventory-item-method-10 (-> this items i) arg0 arg1 arg2 arg3 (the symbol arg4))
)
(none)
)
(defmethod inventory-item-method-10 ((this inventory-item) (arg0 progress) (arg1 font-context) (arg2 float) (arg3 float) (arg4 symbol))
(let ((clr #x20000000))
(when (item-obtained? this)
(if arg4
(set! clr #x80ffffff)
(set! clr #x80808080)
)
)
(let ((s3-1 (new 'stack 'vector2))
(v1-9 (get-scissor-stack-top arg0))
(f0-0 (-> this icon-scale))
)
(set! (-> s3-1 x) (+ (-> v1-9 x) (* (- (-> v1-9 z) (-> v1-9 x)) (-> this offset x)) arg2))
(set! (-> s3-1 y) (+ (-> v1-9 y) (* (- (-> v1-9 w) (-> v1-9 y)) (-> this offset y))))
(draw-icon-array!
(-> *progress-icon-arrays* (-> this icon))
(the int (adjust-x-if-needed (-> s3-1 x)))
(the int (-> s3-1 y))
f0-0
f0-0
(the rgba clr)
arg3
)
)
)
(none)
)
(defmethod draw-icon-array! ((this progress-icon-array) (arg0 int) (arg1 int) (arg2 float) (arg3 float) (arg4 rgba) (arg5 float))
(let ((sprite (new 'stack 'hud-sprite))
(s2-0 (new 'stack 'vector4w))
)
(set-vector! s2-0 arg0 arg1 0 1)
(let ((v1-3 (-> sprite color-ptr)))
(set! (-> v1-3 0) (the int (-> arg4 r)))
(set! (-> v1-3 1) (the int (-> arg4 g)))
(set! (-> v1-3 2) (the int (-> arg4 b)))
(set! (-> v1-3 3) (the int (* arg5 (the float (-> arg4 a)))))
)
(set! (-> sprite pos z) #xffffff)
(set! (-> sprite pos w) 1)
(set! (-> sprite scale-x) arg2)
(set! (-> sprite scale-y) arg3)
(dotimes (i (-> this length))
(let ((icon (-> this icons i)))
(set! (-> sprite tid) (the-as texture-id (lookup-texture-by-id (-> icon tex-id))))
(set! (-> sprite flags) (the hud-sprite-flags (-> icon flags)))
(set-as-offset-from!
(the hud-sprite (-> sprite pos))
s2-0
(the int (* (the float (-> icon offset x)) arg2))
(the int (* (the float (-> icon offset y)) arg3))
)
(with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf)) (-> icon bucket))
(draw sprite buf (-> *level* level-default) #t))
)
)
)
(none)
)
(defmethod draw-prev-next-footer ((this progress) (arg0 font-context) (arg1 float))
(progress-method-33 this (-> *progress-work* footer))
(draw-bg-box-alpha-2 this (-> *progress-work* footer) (* 64.0 arg1))
(draw-bg-box-outline this (-> *progress-work* footer) (* 128.0 arg1))
(set-color! arg0 (font-color font-color-33))
(set-scale! arg0 0.6)
(let ((s4-1 (get-scissor-stack-top this)))
(set! (-> arg0 origin x) (adjust-x-if-needed (+ 10.0 (-> s4-1 x))))
(set! (-> arg0 origin y) (+ (-> s4-1 y) (* 0.5 (- (- (-> s4-1 w) (-> s4-1 y)) (* 32.0 (-> arg0 scale))))))
(set-width! arg0 (the int (+ (- -20.0 (-> s4-1 x)) (-> s4-1 z))))
(set-flags! arg0 (font-flags kerning large))
(string-format "~S~S" (lookup-text! *common-text* (text-id progress-footer-prev-l1) #f) (lookup-text! *common-text* (text-id progress-prev) #f))
(print-game-text *temp-string* arg0 #f 44 (bucket-id hud-draw-hud-alpha))
(set! (-> arg0 origin x) (the float (adjust-x-if-needed (+ -10.0 (-> s4-1 z)))))
)
(set-flags! arg0 (font-flags kerning right large))
(string-format "~S~S"
(lookup-text! *common-text* (text-id progress-next) #f)
(lookup-text! *common-text* (text-id progress-footer-next-r1) #f)
)
(print-game-text *temp-string* arg0 #f 44 (bucket-id hud-draw-hud-alpha))
(progress-method-34 this)
0
)
(defmethod controls-page-info-method-11 ((this controls-page-info) (arg0 progress) (arg1 font-context) (arg2 float) (arg3 float))
(local-vars (v1-28 int) (v1-29 int) (sv-80 int))
(let ((s2-0 arg3))
(let ((s1-0 (get-scissor-stack-top arg0)))
(progress-method-33 arg0 (-> *progress-work* sub-header))
(draw-bg-box-outline arg0 (-> *progress-work* sub-header) (* 128.0 arg3))
(set-flags! arg1 (font-flags kerning middle large))
(set! (-> arg1 origin x) (+ 10.0 arg2 (-> s1-0 x)))
(set! (-> arg1 origin y) (-> s1-0 y))
(set-color! arg1 (font-color font-color-34))
(progress-method-45 arg0 arg1 (+ (- -20.0 (-> s1-0 x)) (-> s1-0 z)) 28.0 (lookup-text! *common-text* (-> this title) #f) 0.7 0.5 32)
)
(progress-method-34 arg0)
(progress-method-33 arg0 (-> *progress-work* sub-body-footer))
(progress-method-53 arg0 arg1)
(set-flags! arg1 (font-flags kerning large))
(set-scale! arg1 0.425)
(set-color! arg1 (font-color font-color-32))
(let* ((s0-1 (get-scissor-stack-top arg0))
(f28-0 (- (-> s0-1 z) (-> s0-1 x)))
(s1-2 (init-text! this))
)
(let* ((f30-0 (/ f28-0 2))
(f28-1 (/ f28-0 2))
(f26-0 (+ arg2 (-> s0-1 x)))
(f24-0 (+ arg2 (-> s0-1 x) f30-0))
)
(set-width! arg1 (if (not (-> *pc-settings* use-vis?))
(the int (* (-> *pc-settings* aspect-ratio-reciprocal) (+ -20.0 f30-0)))
(the int (+ -20.0 f30-0))))
(set! sv-80 0)
(let ((v1-27 sv-80)
(a0-20 (min (the int (-> this current-index)) s1-2))
)
(set-on-less-than v1-28 v1-27 a0-20)
(move-if-not-zero v1-29 a0-20 v1-28 v1-28)
)
(set! sv-80 v1-29)
(string-format "~S" (lookup-text! *common-text* (the-as text-id (-> this text sv-80 text)) #f))
(let ((f22-0 (print-game-text *temp-string* arg1 #t 40 (bucket-id hud-draw-hud-alpha))))
(string-format "~S" (lookup-text! *common-text* (-> this text sv-80 id) #f))
(let* ((f0-23 (print-game-text *temp-string* arg1 #t 40 (bucket-id hud-draw-hud-alpha)))
(f22-1 (+ 8.0 (fmax f22-0 f0-23)))
)
(let ((f2-0 (-> this current-index)))
(set! (-> arg1 origin x) (+ 10.0 (-> s0-1 x)))
(set! (-> arg1 origin y) (+ (- 4.0 (* f22-1 (- f2-0 (* (the float (the int (/ f2-0 1.0))) 1.0)))) (-> s0-1 y)))
)
(while (and (< (-> arg1 origin y) (-> s0-1 w)) (< sv-80 s1-2))
(controls-string-info-method-9
(the-as controls-string-info (-> this text sv-80))
arg0
arg1
f26-0
f24-0
f30-0
f28-1
arg3
)
(1+! sv-80)
)
(set! (-> this on-screen) (< (-> arg1 origin y) (-> s0-1 w)))
(seek! (-> this current-index) (-> this target-index) (* (/ 300.0 f22-1) (seconds-per-frame)))
)
)
)
(progress-method-34 arg0)
(progress-method-33 arg0 (-> *progress-work* small-screen))
(progress-method-47
arg0
arg1
(!= (-> this current-index) 0.0)
(and (not (-> this on-screen)) (!= (-> this current-index) (the float s1-2)))
)
)
)
(progress-method-34 arg0)
(none)
)
(defmethod controls-string-info-method-9 ((this controls-string-info)
(arg0 progress)
(arg1 font-context)
(arg2 float)
(arg3 float)
(arg4 float)
(arg5 float)
(arg6 float)
)
(let ((s2-0 (get-scissor-stack-top arg0)))
(set! (-> arg1 origin x) (adjust-x-if-needed (+ 10.0 arg2)))
(set-width! arg1 (if (not (-> *pc-settings* use-vis?))
(the int (* (-> *pc-settings* aspect-ratio-reciprocal) (+ -20.0 arg4)))
(the int (+ -20.0 arg4))))
(string-format "~S" (lookup-text! *common-text* (-> this action) #f))
(let ((f30-0 (print-game-text *temp-string* arg1 #f 40 (bucket-id hud-draw-hud-alpha))))
(set! (-> arg1 origin x) (+ 10.0 arg3))
(set-width! arg1 (if (not (-> *pc-settings* use-vis?))
(the int (* (-> *pc-settings* aspect-ratio-reciprocal) (+ -20.0 arg5)))
(the int (+ -20.0 arg5))))
(string-format "~S" (lookup-text! *common-text* (-> this button) #f))
(let* ((f0-11 (print-game-text *temp-string* arg1 #f 40 (bucket-id hud-draw-hud-alpha)))
(f30-1 (+ 8.0 (fmax f30-0 f0-11)))
)
(let ((s1-1 (new 'stack 'hud-box))
(f28-0 (+ arg3 (* 0.5 (- (-> s2-0 z) (-> s2-0 x)))))
)
(set! (-> s1-1 box min y) (+ -6.0 (-> arg1 origin y)))
(set! (-> s1-1 box max y) (+ (-> s1-1 box min y) f30-1))
(set-vector! (-> s1-1 color) 192 192 96 (the int (* 128.0 arg6)))
(with-dma-buffer-add-bucket ((s2-1 (-> *display* frames (-> *display* on-screen) global-buf))
(bucket-id hud-draw-hud-alpha)
)
(set! (-> s1-1 box min x) (adjust-x-if-needed arg2))
(set! (-> s1-1 box max x) arg3)
(draw-box-prim-only s1-1 s2-1)
(set! (-> s1-1 box min x) arg3)
(set! (-> s1-1 box max x) (adjust-x-if-needed f28-0))
(draw-box-prim-only s1-1 s2-1)
)
)
(+! (-> arg1 origin y) f30-1)
)
)
)
(none)
)
(defmethod draw-header ((this progress) (arg0 font-context) (arg1 float) (arg2 text-id))
(progress-method-33 this (-> *progress-work* header))
(let ((s3-0 (get-scissor-stack-top this)))
(draw-bg-box-alpha-2 this (-> *progress-work* header) (* 64.0 arg1))
(draw-bg-box-outline this (-> *progress-work* header) (* 128.0 arg1))
(set-flags! arg0 (font-flags kerning middle large))
(set-color! arg0 (font-color font-color-32))
(set! (-> arg0 origin x) (+ 10.0 (-> s3-0 x)))
(set! (-> arg0 origin y) (-> s3-0 y))
(progress-method-45
this
arg0
(+ (- -20.0 (-> s3-0 x)) (-> s3-0 z))
45.0
(lookup-text! *common-text* arg2 #f)
(if (not (-> *pc-settings* use-vis?)) 0.75 0.95)
0.1
32
)
)
(progress-method-34 this)
0
)
(defmethod draw-option ((this menu-memcard-slot-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(let ((f30-0 (fmax 0.0 (* 2.0 (- 0.5 (-> arg0 menu-transition)))))
(f28-0 (if (= (-> arg0 current) 'select-save-title)
0.2
0.25
)
)
(s3-0 *progress-work*)
(f24-0 (-> *video-params* relative-x-scale))
)
(cond
((not (loaded? *bigmap*))
(progress-method-51 arg0 arg1)
)
(else
(set! (-> arg1 alpha) f30-0)
(set-scale! arg1 0.6)
(progress-method-33 arg0 (-> s3-0 body))
(let* ((s3-1 (get-scissor-stack-top arg0))
(s0-0 (new 'stack 'hud-box))
(f0-4 (* (- (-> s3-1 w) (-> s3-1 y)) f28-0))
(f26-0 (+ (-> s3-1 y) (* f0-4 (the float arg2))))
(f28-1 (+ f26-0 f0-4))
)
(let ((s2-0 *progress-save-info*))
(set! (-> arg1 origin x) (adjust-x-if-needed (+ 10.0 (-> s3-1 x))))
(set! (-> arg1 origin y) (+ f26-0 (* 0.5 (- f0-4 (* 32.0 (-> arg1 scale))))))
(set! (-> arg1 height) f0-4)
(set-flags! arg1 (font-flags kerning large))
(when (and s2-0 (= (-> s2-0 formatted) 1) (= (-> s2-0 inited) 1))
(cond
((= (-> s2-0 file arg2 present) 1)
(string-format "~S ~D" (lookup-text! *common-text* (text-id text-0073) #f) (1+ arg2))
(print-game-text *temp-string* arg1 #f 44 (bucket-id hud-draw-hud-alpha))
)
((zero? (-> s2-0 file arg2 present))
(print-game-text (lookup-text! *common-text* (text-id progress-empty) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
)
)
(when (= arg2 (-> arg0 option-index))
(set-scale! arg1 0.8)
(with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf)) (bucket-id tex-hud-hud-alpha))
(let ((f24-1 (+ (-> s3-1 x) (* 0.4 (- (-> s3-1 z) (-> s3-1 x))))))
(set-vector! (-> s0-0 color) 128 128 128 (the int (* 16.0 f30-0)))
(vector-copy! (the vector (-> s0-0 box)) s3-1)
(set! (-> s0-0 box min x) f24-1)
(draw-box-alpha-1 s0-0 buf)
(set! (-> s0-0 box min x) (adjust-x-if-needed (-> s3-1 x)))
(set! (-> s0-0 box max x) f24-1)
)
(set! (-> s0-0 box min y) f26-0)
(set! (-> s0-0 box max y) f28-1)
(draw-box-alpha-1 s0-0 buf)
(set-vector! (-> s0-0 color) 128 128 64 (the int (* 128.0 f30-0)))
(when (!= f26-0 (-> s3-1 y))
(set! (-> s0-0 box min y) (-> s3-1 y))
(set! (-> s0-0 box max y) f26-0)
(draw-box-prim-only s0-0 buf)
)
(when (!= f28-1 (-> s3-1 w))
(set! (-> s0-0 box min y) f28-1)
(set! (-> s0-0 box max y) (-> s3-1 w))
(draw-box-prim-only s0-0 buf)
)
)
)
(when (= (-> s2-0 file arg2 present) 1)
(when (= arg2 (-> arg0 option-index))
(draw-icon-array!
(-> *progress-icon-arrays* (-> s2-0 file arg2 level-index))
; (the int (+ (-> s3-1 x) (* 0.7 (- (-> s3-1 z) (-> s3-1 x))) (* -48.0 f24-0)))
(the int (+ (adjust-x-if-needed (+ (-> s3-1 x) (* 0.7 (- (-> s3-1 z) (-> s3-1 x))))) (* -48.0 f24-0)))
(the int (+ 32.0 (-> s3-1 y)))
1.0
1.0
(static-rgba #x80 #x80 #x80 #x80)
f30-0)
(set-scale! arg1 0.6)
(set-color! arg1 (font-color font-color-32))
(adjust-font-origin-y arg0 arg1 0.675)
(set-flags! arg1 (font-flags kerning right large))
(let* ((v1-91 (-> s2-0 file arg2 game-time0))
(v1-92 (logior (shl (-> s2-0 file arg2 game-time1) 32) v1-91)))
(set! (-> arg1 origin x) (adjust-x-if-needed (+ (-> s3-1 x) (* 0.675 (- (-> s3-1 z) (-> s3-1 x))))))
(string-format "~2,'0D:~2,'0D" (/ (the-as int v1-92) #x107ac0) (/ (mod (the-as int v1-92) #x107ac0) #x4650))
)
(print-game-text *temp-string* arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(draw-icon-array!
(-> *progress-icon-arrays* 66)
(the int (adjust-x-if-needed (+ 10.0 (* 0.4 (- (-> s3-1 z) (-> s3-1 x))) (-> s3-1 x))))
(the int (-> arg1 origin y))
0.65
0.65
(new 'static 'rgba :r #x80 :g #x80 :b #x80 :a #x80)
f30-0
)
(set! (-> arg1 origin x) (adjust-x-if-needed (+ (- (+ -10.0 (-> s3-1 z)) (-> s3-1 x)) (-> s3-1 x))))
(string-format "~D%" (the int (-> s2-0 file arg2 completion-percentage)))
(print-game-text *temp-string* arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(draw-icon-array!
(-> *progress-icon-arrays* 67)
(the int (adjust-x-if-needed (+ -8.0 (* 0.75 (- (-> s3-1 z) (-> s3-1 x))) (-> s3-1 x))))
(the int (-> arg1 origin y))
0.7
0.7
(new 'static 'rgba :r #x80 :g #x80 :b #x80 :a #x80)
f30-0
)
(adjust-font-origin-y arg0 arg1 0.83)
(set! (-> arg1 origin x) (adjust-x-if-needed (+ (-> s3-1 x) (* 0.675 (- (-> s3-1 z) (-> s3-1 x))))))
(string-format "~D" (the int (-> s2-0 file arg2 skill-count)))
(print-game-text *temp-string* arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(draw-icon-array!
(-> *progress-icon-arrays* 68)
(the int (adjust-x-if-needed (+ 10.0 (* 0.4 (- (-> s3-1 z) (-> s3-1 x))) (-> s3-1 x))))
(the int (+ -2.0 (-> arg1 origin y)))
0.7
0.7
(new 'static 'rgba :r #x80 :g #x80 :b #x80 :a #x80)
f30-0
)
(set! (-> arg1 origin x) (adjust-x-if-needed (+ (- (+ -10.0 (-> s3-1 z)) (-> s3-1 x)) (-> s3-1 x))))
(string-format "~D" (the int (-> s2-0 file arg2 gem-count)))
(print-game-text *temp-string* arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(draw-icon-array!
(-> *progress-icon-arrays* 69)
(the int (adjust-x-if-needed (+ -14.0 (* 0.75 (- (-> s3-1 z) (-> s3-1 x))) (-> s3-1 x))))
(the int (-> arg1 origin y))
0.5
0.5
(new 'static 'rgba :r #x80 :g #x80 :b #x80 :a #x80)
f30-0
)
(when (logtest? (-> s2-0 file arg2 secrets) 1)
(set-flags! arg1 (font-flags kerning middle large))
(set! (-> arg1 origin x) (adjust-x-if-needed (+ (-> s3-1 x) (* 0.4 (- (-> s3-1 z) (-> s3-1 x))))))
(set! (-> arg1 origin y) (+ 8.0 (-> s3-1 y)))
(set-width! arg1 (the int (* 0.6 (- (-> s3-1 z) (-> s3-1 x)))))
(string-format "~S" (lookup-text! *common-text* (text-id progress-secrets-hero-mode) #f))
(print-game-text *temp-string* arg1 #f 44 (bucket-id hud-draw-hud-alpha))
)
)
)
)
)
)
(progress-method-34 arg0)
(when (zero? arg2)
(case (-> arg0 current)
(('select-load)
(draw-header arg0 arg1 f30-0 (text-id progress-load-file-select))
)
(('select-save-hero)
(draw-header arg0 arg1 f30-0 (text-id save-hero-mode-file))
)
(else
(draw-header arg0 arg1 f30-0 (text-id progress-save-file-select))
)
)
)
)
)
)
(none)
)
(defmethod draw-option ((this menu-save-sub-menu-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(let ((f30-0 (fmax 0.0 (* 2.0 (- 0.5 (-> arg0 menu-transition))))))
(progress-method-33 arg0 (-> *progress-work* body))
(let* ((s2-0 (get-scissor-stack-top arg0))
(s3-0 (new 'stack 'hud-box))
(width (if (not (-> *pc-settings* use-vis?))
(the int (+ -13.0 (* (-> *pc-settings* aspect-ratio-reciprocal) (* 0.4 (- (-> s2-0 z) (-> s2-0 x))))))
(the int (+ -10.0 (* 0.4 (- (-> s2-0 z) (-> s2-0 x)))))
)
)
)
(set-width! arg1 width)
(set-flags! arg1 (font-flags kerning large))
(set-scale! arg1 0.425)
(let* ((f24-0 (* (- (-> s2-0 w) (-> s2-0 y)) 0.2))
(f28-1 (+ (-> s2-0 y) (* f24-0 (the float arg2))))
(f26-0 (+ f28-1 f24-0))
)
(let* ((f0-7
(print-game-text (lookup-text! *common-text* (-> this name) #f) arg1 #t 44 (bucket-id hud-draw-hud-alpha))
)
(v1-11 arg1)
(f1-9 (+ 10.0 (-> s2-0 x)))
(f0-10 (+ f28-1 (* 0.5 (- f24-0 f0-7))))
)
(set! (-> v1-11 origin x) (adjust-x-if-needed f1-9))
(set! (-> v1-11 origin y) f0-10)
)
(set! (-> arg1 height) f24-0)
(when (= arg2 (-> arg0 option-index))
(set-scale! arg1 0.45)
(with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf))
(bucket-id tex-hud-hud-alpha)
)
(set-vector! (-> s3-0 color) 128 128 128 (the int (* 16.0 f30-0)))
(set! (-> s3-0 box min x) (adjust-x-if-needed (-> s2-0 x)))
(set! (-> s3-0 box max x) (+ (-> s2-0 x) (* 0.4 (- (-> s2-0 z) (-> s2-0 x)))))
(set! (-> s3-0 box min y) f28-1)
(set! (-> s3-0 box max y) f26-0)
(draw-box-alpha-1 s3-0 buf)
(set-vector! (-> s3-0 color) 128 128 64 (the int (* 128.0 f30-0)))
(draw-box-prim-only s3-0 buf)
)
)
)
)
)
(print-game-text (lookup-text! *common-text* (-> this name) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(progress-method-34 arg0)
(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)
)
(defmethod draw-option ((this menu-icon-info-option) (arg0 progress) (fnt font-context) (arg2 int) (arg3 symbol))
(set-alpha! fnt (- 1.0 (-> arg0 menu-transition)))
(set-color! fnt (font-color font-color-32))
(set-scale! fnt 0.5)
(true! (-> *bigmap* auto-save-icon-flag))
(set! (-> this sprites 0 tid) (the-as texture-id (get-texture checkpoint level-default-minimap)))
(set! (-> this sprites 0 scale-x) 1.0)
(set! (-> this sprites 0 scale-y) 1.0)
(let ((icon-clr (-> this sprites 0 color-ptr)))
(set! (-> icon-clr 0) 128)
(set! (-> icon-clr 1) 128)
(set! (-> icon-clr 2) 128)
(set! (-> icon-clr 3) (the int (* 128.0 (- 1.0 (-> arg0 menu-transition)))))
)
(set! (-> this sprites 0 pos z) #xffffff)
(set! (-> this sprites 0 pos w) 0)
(set-hud-piece-position! (-> this sprites 0) 240 160)
(with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf))
(bucket-id hud-draw-hud-alpha)
)
(draw (-> this sprites 0) buf (-> *level* level-default) #t)
)
(set-flags! fnt (font-flags kerning middle middle-vert large))
(set! (-> fnt origin x) 90.0)
(set! (-> fnt origin y) 80.0)
(set-width! fnt 330)
(set-height! fnt 85)
(when (not (-> *pc-settings* use-vis?))
(set! (-> fnt origin x) (the float (adjust-game-x (-> fnt origin x))))
(*! (-> fnt width) (-> *pc-settings* aspect-ratio-reciprocal)))
(print-game-text
(lookup-text! *common-text* (text-id progress-autosave-notice) #f)
fnt
#f
44
(bucket-id hud-draw-hud-alpha)
)
(+! (-> fnt origin y) 115.0)
(set-height! fnt 95)
(print-game-text
(string-format (lookup-text! *common-text* (text-id progress-autosave-remove-warn) #f) 1)
fnt
#f
44
(bucket-id hud-draw-hud-alpha)
)
(+! (-> fnt origin y) 90.0)
(set-height! fnt 50)
(set-color! fnt (font-color font-color-33))
(draw-highlight-bar arg0 fnt (the int (+ 12.0 (-> fnt origin y))) 24 (-> fnt alpha))
(print-game-text
(lookup-text! *common-text* (text-id progress-continue) #f)
fnt
#f
44
(bucket-id hud-draw-hud-alpha)
)
(none)
)
(defmethod draw-option ((this menu-main-menu-option) (arg0 progress) (fnt font-context) (arg2 int) (arg3 symbol))
(when (and (nonzero? (-> this name)) (= arg2 (-> arg0 option-index)))
(set-scale! fnt 0.75)
(set-color! fnt (font-color font-color-32))
(set-alpha! fnt (- 1.0 (-> arg0 menu-transition)))
(set-flags! fnt (font-flags shadow kerning middle large))
(set-width! fnt (if (= (get-aspect-ratio) 'aspect4x3) 235 175))
(set-height! fnt 80)
(set! (-> fnt origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3) 140 170)))
(set! (-> fnt origin y) (the float (if (= (get-aspect-ratio) 'aspect4x3) 180 175)))
(when (not (-> *pc-settings* use-vis?))
(set! (-> fnt origin x) (the float (adjust-game-x (-> fnt origin x))))
(*! (-> fnt width) (-> *pc-settings* aspect-ratio-reciprocal)))
(cond
((= (-> this name) (text-id progress-bigmap))
(if (language? french)
(set-scale! fnt 0.7)
)
(print-game-text (lookup-text! *common-text* (-> this name) #f) fnt #f 44 (bucket-id hud-draw-hud-alpha))
(set! (-> fnt origin y) (the float (if (= (get-aspect-ratio) 'aspect4x3) 210 200)))
(set-scale! fnt 0.6)
)
(else
(print-game-text (lookup-text! *common-text* (-> this name) #f) fnt #f 44 (bucket-id hud-draw-hud-alpha))
)
)
)
(none)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; CUSTOM MENU OPTIONS
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(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)
(sv-48 87)
(s3-0 375)
(s2-0 210)
(sv-64 0))
(case (get-aspect-ratio)
(('aspect4x3) (set! gp-0 69) (set! s5-0 129) (set! sv-48 80) (set! s3-0 375) (set! s2-0 210))
(('aspect16x9) (set! gp-0 79) (set! s5-0 129) (set! sv-48 68) (set! s3-0 356) (set! s2-0 244)))
(when (not (-> *pc-settings* use-vis?))
(set! gp-0 (the int (adjust-game-x (the float gp-0))))
(set! s3-0 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) s3-0))))
(set-scale! arg1 arg5)
(set! (-> arg1 origin y) (the float sv-48))
(set! (-> arg1 height) 50.0)
(set-color! arg1 (font-color font-color-32))
(set-flags! arg1 (font-flags kerning middle middle-vert large))
(print-game-text (lookup-text! *common-text* arg3 #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(set-vector! (-> arg0 box 0 color) 64 128 128 (the int (* 128.0 arg2)))
(draw-savegame-box arg0 (the float gp-0) (the float (+ gp-0 s3-0)) (the float s5-0) (the float s5-0))
(with-dma-buffer-add-bucket ((s0-1 (-> *display* frames (-> *display* on-screen) global-buf)) (bucket-id particles))
(draw-sprite2d-xy s0-1
gp-0
s5-0
s3-0
s2-0
(new 'static 'rgba :r #x40 :g #x40 :b #x40 :a (the int (* 64.0 arg2)))
#x3fffff))))
(defun draw-highlight-aspect ((x int) (y int) (w int) (h int) (alpha float))
"draw the highlight for a number in the aspect ratio screen"
(with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf)) (bucket-id hud-draw-hud-alpha))
(when (not (-> *pc-settings* use-vis?))
(set! x (adjust-game-x (the float x)))
(set! w (the int (* (-> *pc-settings* aspect-ratio-reciprocal) w))))
(draw-sprite2d-xy buf x y w h (new 'static 'rgba :r #x80 :g #x80 :b #x40 :a (the int (* 64.0 alpha))) #x3fffff)))
(defun draw-up-down-aspect ((font font-context) (y-up float) (y-down float))
(protect ((-> font origin x)
(-> font origin y)
(-> font scale))
(let ((start-y (-> font origin y)))
(set-scale! font 0.5)
(set! (-> font origin y) (- start-y y-up))
(print-game-text (string-format "~33L~C" 160) font #f 44 (bucket-id hud-draw-hud-alpha))
(set! (-> font origin y) (+ start-y y-down))
(print-game-text (string-format "~33L~C" 162) font #f 44 (bucket-id hud-draw-hud-alpha))))
0)
(defmethod draw-option ((obj menu-aspect-ratio-custom-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(let* ((alpha (* 2.0 (- 0.5 (-> arg0 menu-transition))))
(middle-pad 15.0)
(middle-pad-uncorrected middle-pad)
(numbers-y 206.0)
(numbers-text-y (- numbers-y 44.0))
(hilite-width 36)
(hilite-height 16)
(hilite-y-ofs 6)
(hilite-height-total (+ hilite-height (* 2 hilite-y-ofs)))
(font-w 100)
(font-w-corrected (if (not (-> *pc-settings* use-vis?)) (the int (* (-> *pc-settings* aspect-ratio-reciprocal) font-w)) font-w)))
(fmax! alpha 0.0)
(set! (-> arg1 alpha) alpha)
(set-flags! arg1 (font-flags kerning middle large))
(set-scale! arg1 0.65)
(set-color! arg1 (font-color font-color-32))
(set! (-> arg1 origin y) 80.0)
(if (not (-> *pc-settings* use-vis?)) (*! middle-pad (-> *pc-settings* aspect-ratio-reciprocal)))
(protect ((-> arg1 origin x)
(-> arg1 width))
(set-scale! arg1 0.6)
(set-width! arg1 50)
(set! (-> arg1 origin y) numbers-y)
(set! (-> arg1 origin x) (- 256.0 25))
(print-game-text "x" arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(set-width! arg1 font-w-corrected)
(set-scale! arg1 0.6)
(set! (-> arg1 origin y) numbers-y)
(set! (-> arg1 origin x) (- 256.0 middle-pad font-w-corrected))
(cond
((= 0 (-> *progress-state-pc* aspect-ratio-ratio-index))
(draw-highlight-aspect (- (the int (+ (- 256.0 middle-pad-uncorrected font-w) (/ font-w 2))) (/ hilite-width 2))
(- (the int (-> arg1 origin y)) hilite-y-ofs)
hilite-width
hilite-height-total
alpha)
(set-color! arg1 (font-color font-color-33))
(draw-up-down-aspect arg1 21.0 25.0))
(else (set-color! arg1 (font-color font-color-32))))
(print-game-text (string-format "~D" (-> *pc-settings* aspect-custom-x)) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(set-scale! arg1 0.55)
(set-color! arg1 (font-color font-color-32))
(set! (-> arg1 origin y) numbers-text-y)
(print-game-text (lookup-text! *common-text* (text-id progress-aspect-ratio-custom-width) #f)
arg1
#f
44
(bucket-id hud-draw-hud-alpha))
(set-scale! arg1 0.6)
(set! (-> arg1 origin y) numbers-y)
(set! (-> arg1 origin x) (+ 256.0 middle-pad))
(cond
((= 1 (-> *progress-state-pc* aspect-ratio-ratio-index))
(draw-highlight-aspect (- (the int (+ (+ 256.0 middle-pad-uncorrected) (/ font-w 2))) (/ hilite-width 2))
(- (the int (-> arg1 origin y)) hilite-y-ofs)
hilite-width
hilite-height-total
alpha)
(set-color! arg1 (font-color font-color-33))
(draw-up-down-aspect arg1 21.0 25.0))
(else (set-color! arg1 (font-color font-color-32))))
(print-game-text (string-format "~D" (-> *pc-settings* aspect-custom-y)) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(set-scale! arg1 0.55)
(set-color! arg1 (font-color font-color-32))
(set! (-> arg1 origin y) numbers-text-y)
(print-game-text (lookup-text! *common-text* (text-id progress-aspect-ratio-custom-height) #f)
arg1
#f
44
(bucket-id hud-draw-hud-alpha)))
(set! (-> arg1 origin y) 289.0)
(cond
((< (/ (the float (-> *pc-settings* aspect-custom-x)) (the float (-> *pc-settings* aspect-custom-y))) (/ 4.0 3.0))
(set-scale! arg1 0.5)
(set-color! arg1 (font-color red))
(when (and (< (/ (the float (-> *pc-settings* aspect-custom-x)) (the float (-> *pc-settings* aspect-custom-y))) (/ 4.0 3.0))
(< (mod (-> *display* real-clock frame-counter) (seconds 1.2)) (seconds 1.0)))
(print-game-text (lookup-text! *common-text* (text-id progress-aspect-ratio-custom-warn) #f)
arg1
#f
44
(bucket-id hud-draw-hud-alpha))))
(else
(set-scale! arg1 0.55)
(set-color! arg1 (font-color font-color-32))
(print-game-text (lookup-text! *common-text*
(if (not (swap-confirm?)) (text-id progress-aspect-ratio-custom-pad-x) (text-id progress-aspect-ratio-custom-pad-circle))
#f)
arg1
#f
44
(bucket-id hud-draw-hud-alpha))))
(when-not-drawn-decoration (draw-decoration-aspect-ratio-custom obj arg1 alpha (text-id progress-aspect-ratio-custom-title) 0.55)))
0
(none))
(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)
(set-flags! arg1 (font-flags kerning middle middle-vert large))
(set! (-> arg1 origin x) 90.0)
(set! (-> arg1 origin y) 72.0)
(set-width! arg1 330)
(set-height! arg1 85)
(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)))
(when (< (mod (-> *display* real-clock frame-counter) (seconds 1.2)) (seconds 1.0))
(print-game-text (lookup-text! *common-text* (text-id progress-fps-disclaimer-warning) #f)
arg1
#f
44
(bucket-id hud-draw-hud-alpha)))
(+! (-> arg1 origin y) 80.0)
(set-scale! arg1 0.45)
(set-color! arg1 (font-color font-color-32))
(print-game-text (lookup-text! *common-text* (text-id progress-fps-disclaimer) #f)
arg1
#f
44
(bucket-id hud-draw-hud-alpha))
(+! (-> arg1 origin y) 65.0)
(set-scale! arg1 0.55)
(set-height! arg1 95)
(print-game-text (lookup-text! *common-text* (text-id progress-memcard-continue?) #f)
arg1
#f
44
(bucket-id hud-draw-hud-alpha))
(+! (-> arg1 origin y) 58.0)
(set-scale! arg1 0.5)
(set-height! arg1 50)
(set-color! arg1 (font-color font-color-32))
(when (time-elapsed? (-> *progress-state-pc* frame-rate-disclaimer-time) (seconds 3))
(draw-highlight (the int (+ 13.0 (-> arg1 origin y))) 18 (-> arg1 alpha))
; (draw-yes-no arg0 arg1)
(draw-yes-no-style-footer arg0 arg1 (text-id progress-yes) (text-id progress-no)))
(none))
(defmethod draw-option ((this menu-sub-menu-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
(let ((f30-0 (fmax 0.0 (* 2.0 (- 0.5 (-> arg0 menu-transition)))))
(offset-y (-> this offset-y)))
(set! (-> arg1 alpha) f30-0)
(set-scale! arg1 0.85)
;; adjust for potentially hidden secrets menu
(when (and (= *title-pc* (-> arg0 current-options))
(not (memcard-unlocked-secrets? #f #f)))
;; above secrets, shift down
(+! offset-y 0.08)
)
(adjust-font-origin-y arg0 arg1 offset-y)
(when (not (and (= (-> this name) (text-id progress-secrets))
(= *title-pc* (-> arg0 current-options))
(not (memcard-unlocked-secrets? #f #f))
))
(cond
((= (-> arg0 option-index) arg2)
(draw-highlight-bar arg0 arg1 (the int (+ -6.0 (-> arg1 origin y))) 35 f30-0)
(let ((a0-4 arg1)) (set! (-> a0-4 color) (font-color font-color-33))))
(else (let ((a0-5 arg1)) (set! (-> a0-5 color) (font-color font-color-32)))))
(print-game-text (lookup-text! *common-text* (-> this name) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
)
)
0
(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))))
(offset-y (-> this offset-y))
(height 22))
(if (< alpha 0.0) (set! alpha 0.0))
(set! (-> fnt alpha) alpha)
(set-scale! fnt 0.85)
;; adjust for potentially hidden secrets menu
(when (not (memcard-unlocked-secrets? #f #f))
;; below secrets, shift up
(-! offset-y 0.07)
)
(adjust-font-origin-y progress fnt offset-y)
(when (nonzero? (-> this name))
(set-color! fnt (if (= arg2 (-> progress option-index)) (font-color font-color-32) (font-color font-color-33)))
(cond
((= arg2 (-> progress option-index))
(set-color! fnt (font-color font-color-33))
(draw-highlight-bar progress fnt (the int (+ -6.0 (-> fnt origin y))) 35 alpha))
(else (set-color! fnt (font-color font-color-32))))
(if selected (set-color! fnt (font-color font-color-34)))
(print-game-text (lookup-text! *common-text* (-> this name) #f) fnt #f 44 (bucket-id hud-draw-hud-alpha))
(let ((choice (&-> progress yes-no-choice))
(str (the string #f)))
(set! str
(cond
(selected
(set-color! fnt (font-color font-color-34))
(when (memcard-unlocked-secrets? #f #f)
(draw-highlight-bar progress fnt (the int (+ 29.0 (-> fnt origin y))) 24 alpha)
(+! (-> fnt origin y) 29.0)
(set-scale! fnt 0.55))
(when (not (memcard-unlocked-secrets? #f #f))
(draw-highlight-bar progress fnt (the int (+ 29.0 (-> fnt origin y))) 23 alpha)
(+! (-> fnt origin y) 29.0)
(set-scale! fnt 0.60))
(cond
((-> choice 0)
(string-format "~33L~S~44L ~S"
(lookup-text! *common-text* (text-id progress-yes) #f)
(lookup-text! *common-text* (text-id progress-no) #f))
(set! str *temp-string*))
(else
(string-format "~44L~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 hud-draw-hud-alpha)))))
(none))
(defun draw-decoration-resolution ((arg0 menu-option) (arg1 font-context) (arg2 float) (arg3 text-id) (arg5 float))
(let ((gp-0 70)
(s5-0 120)
(sv-48 87)
(s3-0 375)
(s2-0 210)
(sv-64 0))
(case (get-aspect-ratio)
(('aspect4x3) (set! gp-0 70) (set! s5-0 116) (set! sv-48 84) (set! s3-0 375) (set! s2-0 179))
(('aspect16x9) (set! gp-0 79) (set! s5-0 108) (set! sv-48 58) (set! s3-0 356) (set! s2-0 185) (set! sv-64 20)))
(#when PC_PORT
;; added for better widescreen handling
(when (not (-> *pc-settings* use-vis?))
(set! gp-0 (the int (adjust-game-x (the float gp-0))))
(set! s3-0 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) s3-0)))))
(set-scale! arg1 arg5)
(set! (-> arg1 origin y) (the float sv-48))
(set! (-> arg1 height) 50.0)
(set-color! arg1 (font-color font-color-32))
(set-flags! arg1 (font-flags kerning middle large))
(print-game-text (lookup-text! *common-text* arg3 #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
(set-vector! (-> arg0 box 0 color) 64 128 128 (the int (* 128.0 arg2)))
(draw-savegame-box arg0 (the float gp-0) (the float (+ gp-0 s3-0)) (the float s5-0) (the float s5-0))
(+! (-> arg1 origin y) (the float sv-64))
(draw-savegame-box arg0 (the float gp-0) (the float (+ gp-0 s3-0)) (the float (+ s5-0 s2-0)) (the float (+ s5-0 s2-0)))
(with-dma-buffer-add-bucket ((s0-1 (-> *display* frames (-> *display* on-screen) global-buf)) (bucket-id particles))
(draw-sprite2d-xy s0-1
gp-0
s5-0
s3-0
s2-0
(new 'static 'rgba :r #x40 :g #x40 :b #x40 :a (the int (* 64.0 arg2)))
#x3fffff))))
(defun begin-scissor-resolution ((arg0 hud-box))
(cond
((= (get-aspect-ratio) 'aspect16x9)
(set! (-> arg0 min x) 79.0)
(set! (-> arg0 min y) 108.0)
(set! (-> arg0 max x) 434.0)
(set! (-> arg0 max y) 293.0))
(else
(set! (-> arg0 min x) 70.0)
(set! (-> arg0 min y) 116.0)
(set! (-> arg0 max x) 444.0)
(set! (-> arg0 max y) 295.0)))
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf)) (bucket-id hud-draw-hud-alpha))
(setup-scissor arg0 s4-0))
0)
(defun end-scissor-resolution ((arg0 hud-box) (arg1 float))
(with-dma-buffer-add-bucket ((s5-0 (-> *display* frames (-> *display* on-screen) global-buf)) (bucket-id hud-draw-hud-alpha))
(restore-scissor arg0 s5-0))
0)
(defmethod draw-option ((this menu-resolution-option) (the-progress progress) (font font-context) (arg2 int) (arg3 symbol))
(let* ((alpha (* 2.0 (- 0.5 (-> the-progress menu-transition))))
(box (new 'stack 'hud-box))
(height 22)
(text-pad 1)
(text-height (+ height (* text-pad 2))))
(fmax! alpha 0.0)
(set! (-> font alpha) alpha)
(draw-decoration-resolution this
font
alpha
(if (fullscreen?) (text-id progress-game-res-decoration) (text-id progress-window-size-decoration))
0.65)
(begin-scissor-resolution box)
(set-flags! font (font-flags kerning large middle))
(cond
((< (-> this selected-index) 0)
;; not sure.
)
((-> this valid?)
(set-scale! font 0.6)
(set-color! font (font-color font-color-33))
(set! (-> font origin x) (+ (-> box min x) 16))
(set! (-> font width) (- (-> box max x) (-> box min x) (* 16 2)))
(set-height! font 60)
;; draw the highlight first
(draw-highlight 193 (- height 1) alpha)
;; now scroll and offset the list
(if (> (fabs (- (-> this scroll-index) (the float (-> this selected-index)))) 2.0)
(set! (-> this scroll-index) (the float (-> this selected-index)))
(seek-ease! (-> this scroll-index)
(the float (-> this selected-index))
(* 0.15 (-> PP clock time-adjust-ratio))
0.3
(* 0.0015 (-> PP clock time-adjust-ratio))))
(set! (-> font origin y) (- 194.0 (* (-> this scroll-index) text-height) (- text-pad)))
;; now draw the list!
(let ((valid-index 0))
(dotimes (i (-> this num-resolutions))
;; count "valid" resolutions
(let ((this-w 0)
(this-h 0)
(this-aspect 0.0))
(pc-get-resolution i (= (pc-get-display-mode) 'windowed) (& this-w) (& this-h))
(set! this-aspect (/ (the float this-w) (the float this-h)))
(when (or (= (pc-get-display-mode) 'windowed) (< (fabs (- (-> this win-aspect) this-aspect)) 0.05))
(if (= valid-index (-> this selected-index))
(set-color! font (font-color font-color-33))
(set-color! font (font-color font-color-44)))
(print-game-text (string-format "~D x ~D" this-w this-h) font #f 44 (bucket-id hud-draw-hud-alpha))
(+! (-> font origin y) text-height)
(1+! valid-index))))
(when (fullscreen?)
;; draw extra hardcoded cases
(if (= valid-index (-> this selected-index))
(set-color! font (font-color font-color-33))
(set-color! font (font-color font-color-44)))
(print-game-text (string-format "~D x ~D" 512 416) font #f 44 (bucket-id hud-draw-hud-alpha))
(+! (-> font origin y) text-height)
(1+! valid-index)
(if (= valid-index (-> this selected-index))
(set-color! font (font-color font-color-33))
(set-color! font (font-color font-color-44)))
(print-game-text (string-format "~D x ~D" 512 208) font #f 44 (bucket-id hud-draw-hud-alpha))
(+! (-> font origin y) text-height)
(1+! valid-index))))
(else
;; wtf?? just print an ominous warning.
(set-scale! font 0.6)
(set-color! font (font-color red))
(set! (-> font origin x) (+ (-> box min x) 16))
(set! (-> font origin y) (+ (-> box min y) 120))
(set! (-> font width) (- (-> box max x) (-> box min x) (* 16 2)))
(set-height! font 60)
(print-game-text (lookup-text! *common-text* (text-id progress-error-no-resolutions) #f)
font
#f
44
(bucket-id hud-draw-hud-alpha))))
(end-scissor-resolution box 1.0))
0
(none))
; (defun draw-highlight-music-player ((x int) (y int) (w int) (h int) (alpha float))
; "draw the highlight for a number in the music player screen"
; (with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf))
; (bucket-id hud-draw-hud-alpha)
; )
; (draw-sprite2d-xy buf x y w h (new 'static 'rgba :r #x80 :g #x80 :b #x40 :a (the int (* 64.0 alpha))) #x3fffff)
; )
; )
; (defun begin-scissor-music-player ((box hud-box))
; (cond
; ((= (get-aspect-ratio) 'aspect16x9)
; (set! (-> box min x) 19.0)
; (set! (-> box min y) 129.0)
; (set! (-> box max x) 274.0)
; (set! (-> box max y) 304.0)
; )
; (else
; (set! (-> box min x) 70.0)
; (set! (-> box min y) 129.0)
; (set! (-> box max x) 268.0)
; (set! (-> box max y) 270.0)
; )
; )
; (#when PC_PORT
; (set! (-> box min x) (the float (the int (adjust-game-x (-> box min x)))))
; (set! (-> box max x) (the float (the int (adjust-game-x (-> box max x)))))
; )
; (with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf))
; (bucket-id hud-draw-hud-alpha)
; )
; (setup-scissor box buf)
; )
; 0
; )
; (defun end-scissor-music-player ((box hud-box))
; (with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf))
; (bucket-id hud-draw-hud-alpha)
; )
; (restore-scissor box buf)
; )
; 0
; )
; (defun draw-decoration-music-player ((arg0 menu-option) (arg1 font-context) (arg2 float) (arg3 text-id) (arg5 float) (box hud-box))
; (let ((list-x (the int (-> box min x)))
; (list-y (the int (-> box min y)))
; (title-x 70)
; (title-y 80)
; (list-w (the int (- (-> box max x) (-> box min x))))
; (list-h (the int (- (-> box max y) (-> box min y))))
; (full-w 375)
; (full-h 199)
; )
; (case (get-aspect-ratio)
; (('aspect16x9)
; (set! title-y 69)
; (set! full-w 355)
; (set! full-h 233)
; (*! arg5 1.25)
; )
; )
; (when (not (-> *pc-settings* use-vis?))
; (set! title-x (the int (adjust-game-x (the float title-x))))
; (set! full-w (the int (* (-> *pc-settings* aspect-ratio-reciprocal) full-w)))
; )
; (set-scale! arg1 arg5)
; (set-origin! arg1 title-x title-y)
; (set! (-> arg1 width) 375.0)
; (set! (-> arg1 height) 48.0)
; (when (not (-> *pc-settings* use-vis?))
; (*! (-> arg1 width) (-> *pc-settings* aspect-ratio-reciprocal))
; )
; (set-color! arg1 (font-color font-color-33))
; (set-flags! arg1 (font-flags kerning middle middle-vert large))
; (print-game-text (lookup-text! *common-text* arg3 #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
; (set-vector! (-> arg0 box 0 color) 64 128 128 (the int (* 128.0 arg2)))
; (draw-savegame-box arg0 (the float list-x) (the float (+ list-x full-w)) (the float list-y) (the float list-y))
; (draw-savegame-box arg0 (the float list-x) (the float (+ list-x list-w)) (the float (+ list-y list-h)) (the float (+ list-y list-h)))
; (draw-savegame-box arg0 (the float (+ list-x list-w)) (the float (+ list-x list-w)) (the float list-y) (the float (+ list-y full-h)))
; (with-dma-buffer-add-bucket ((s0-1 (-> *display* frames (-> *display* on-screen) global-buf))
; (bucket-id particles)
; )
; (draw-sprite2d-xy
; s0-1
; list-x
; list-y
; list-w
; list-h
; (new 'static 'rgba :r #x40 :g #x40 :b #x40 :a (the int (* 64.0 arg2)))
; #x3fffff
; )
; )
; )
; )
; (defun draw-up-down-music-player ((font font-context) (box hud-box))
; (protect ((-> font origin x) (-> font origin y) (-> font scale) (-> font width) (-> font height))
; (let ((start-y (-> font origin y)))
; (set-scale! font 0.5)
; (set! (-> font width) (- (-> box max x) (-> box min x)))
; (set! (-> font height) 16.0)
; (set-flags! font (font-flags kerning large middle))
; (set! (-> font origin x) (-> box min x))
; (set! (-> font origin y) (- (-> box min y) (-> font height)))
; (print-game-text (string-format "~33L~C" 160) font #f 44 (bucket-id hud-draw-hud-alpha))
; (set! (-> font origin y) (+ 3.0 (-> box max y)))
; (print-game-text (string-format "~33L~C" 162) font #f 44 (bucket-id hud-draw-hud-alpha))
; )
; )
; 0)
; (defmethod draw-option ((obj menu-music-player-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
; (let* ((alpha (* 2.0 (- 0.5 (-> arg0 menu-transition))))
; (y-pad-top 11)
; (text-height 23)
; (old-y 0.0)
; (list-text-y (+ (- (-> obj current-scroll)) y-pad-top))
; (max-lines 8)
; (tab-music 6.0)
; (tab-flava 12.0)
; (box (new 'stack 'hud-box))
; (flava-text-list (new 'static 'boxed-array :type text-id
; (text-id progress-music-player-flava-default)
; (text-id progress-music-player-flava-gun)
; (text-id progress-music-player-flava-board)
; (text-id progress-music-player-flava-mech)
; (text-id progress-music-player-flava-darkjak)
; (text-id progress-music-player-flava-pilot)
; )))
; (fmax! alpha 0.0)
; (set! (-> arg1 alpha) alpha)
; (when (not (-> *pc-settings* use-vis?))
; (*! tab-music (-> *pc-settings* aspect-ratio-reciprocal))
; (*! tab-flava (-> *pc-settings* aspect-ratio-reciprocal))
; ;(set! danger-w (the int (* (-> *pc-settings* aspect-ratio-reciprocal) danger-w)))
; )
; (set-flags! arg1 (font-flags kerning large))
; (set-scale! arg1 0.6)
; (set-color! arg1 (font-color font-color-33))
; (begin-scissor-music-player box)
; (+! list-text-y (-> box min y))
; (set-scale! arg1 0.45)
; (set! (-> arg1 origin x) (+ (-> box min x) tab-music))
; ;(format *stdcon* "m: ~D f: ~D scroll: ~f~%" (-> obj music-index) (-> obj flava-index) (-> obj current-scroll))
; (dotimes (i (-> *music-player-tracks* length))
; (set! (-> arg1 origin y) (set! old-y list-text-y))
; (set! (-> arg1 width) (- (-> box max x) (-> box min x)))
; (cond
; ((= i (-> obj music-index))
; (+! list-text-y text-height)
; (cond
; ((-> *progress-state-pc* music-player-selected)
; ;; restore these later
; (let* ((flava-bits (the-as int (-> *music-player-tracks* i flava)))
; (flava-count (count-bits flava-bits))
; (flava-text-height (the int (* (/ 0.42 0.45) text-height))))
; ;; draw highlight first
; (draw-highlight-music-player (the int (-> box min x)) (the int (+ -6.0 (-> arg1 origin y)))
; (the int (- (-> box max x) (-> box min x))) (+ text-height (* flava-count flava-text-height))
; alpha)
; ;; draw text for each flava!
; (protect ((-> arg1 origin x) (-> arg1 origin y) (-> arg1 scale))
; (set-scale! arg1 0.42)
; (+! (-> arg1 origin x) tab-flava)
; (set! (-> arg1 origin y) list-text-y)
; (dotimes (f flava-count)
; (if (= f (-> obj flava-index))
; (set-color! arg1 (font-color font-color-33))
; (set-color! arg1 (font-color font-color-44)))
; (let ((flava (bit-on-offset flava-bits f)))
; (if (flava-unlocked? flava)
; (print-game-text (lookup-text! *common-text* (-> flava-text-list (bit-on-offset flava-bits f)) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
; (print-game-text (lookup-text! *common-text* (text-id progress-music-player-locked) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha)))
; )
; (+! (-> arg1 origin y) flava-text-height)
; )
; )
; ;; advance list height
; (+! list-text-y (* flava-count flava-text-height))
; ;; set color to selected
; (set-color! arg1 (font-color font-color-34))
; ))
; (else
; (set-color! arg1 (font-color font-color-33))
; (draw-highlight-music-player (the int (-> box min x)) (the int (+ -6.0 (-> arg1 origin y)))
; (the int (- (-> box max x) (-> box min x))) text-height
; alpha)
; ))
; (when (< (-> arg1 origin y) (+ (-> box min y) y-pad-top))
; (set! (-> obj current-scroll) (seek-ease (-> obj current-scroll) (+ (-> obj current-scroll) (- (-> arg1 origin y) (+ (-> box min y) y-pad-top)))
; (if (-> *progress-state-pc* music-player-selected) 999999.0 (* 0.1 text-height (-> arg0 clock time-adjust-ratio)))
; (* 0.3 text-height)
; (* 0.01 text-height (-> arg0 clock time-adjust-ratio)))))
; (when (> list-text-y (-> box max y))
; (set! (-> obj current-scroll) (seek-ease (-> obj current-scroll) (+ (-> obj current-scroll) (- list-text-y (-> box max y)))
; (if (-> *progress-state-pc* music-player-selected) 999999.0 (* 0.1 text-height (-> arg0 clock time-adjust-ratio)))
; (* 0.3 text-height)
; (* 0.01 text-height (-> arg0 clock time-adjust-ratio)))))
; )
; (else
; (+! list-text-y text-height)
; (set-color! arg1 (font-color font-color-33))
; )
; )
; (if (get-bit (-> *pc-settings* music-unlocked) i)
; (print-game-text (lookup-text! *common-text* (-> *music-player-tracks* i text) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
; (print-game-text (lookup-text! *common-text* (text-id progress-music-player-locked) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha)))
; )
; (if (< (- list-text-y (-> box max y)) 0.0)
; (+! (-> obj current-scroll) (- list-text-y (-> box max y))))
; (unless (-> *progress-state-pc* music-player-selected)
; (fmax! (-> obj max-scroll) (-> obj current-scroll)))
; (end-scissor-music-player box)
; ;; draw right panel text
; (let ((icon-x 0)
; (icon-y 174)
; (icon-w (if (= (get-aspect-ratio) 'aspect4x3)
; 64
; 48))
; (icon-h 64)
; (icon-scale 0.7)
; (icon-id 0)
; (danger-pad 8.0)
; (danger-w 73)
; (arrow-w 14)
; (danger-text-list (new 'static 'boxed-array :type text-id
; (text-id progress-music-player-danger-0)
; (text-id progress-music-player-danger-1)
; (text-id progress-music-player-danger-2)
; (text-id progress-music-player-danger-3)
; )))
; (set-flags! arg1 (font-flags kerning middle large))
; (case (get-aspect-ratio)
; (('aspect16x9)
; (set-origin! arg1 281 160)
; (set-width! arg1 144)
; (set! icon-y 190)
; )
; (else
; (set-origin! arg1 278 144)
; (set-width! arg1 158)
; )
; )
; (when (not (-> *pc-settings* use-vis?))
; (set! (-> arg1 origin x) (the float (adjust-game-x (-> arg1 origin x))))
; (*! danger-pad (-> *pc-settings* aspect-ratio-reciprocal))
; (*! (-> arg1 width) (-> *pc-settings* aspect-ratio-reciprocal))
; (set! icon-w (the int (* (-> *pc-settings* aspect-ratio-reciprocal) icon-w)))
; (set! danger-w (the int (* (-> *pc-settings* aspect-ratio-reciprocal) danger-w)))
; (set! arrow-w (the int (* (-> *pc-settings* aspect-ratio-reciprocal) arrow-w)))
; )
; (set-height! arg1 40)
; (set-scale! arg1 0.42)
; (set-color! arg1 (font-color font-color-33))
; (when (-> *progress-state-pc* music-player-track)
; (print-game-text (lookup-text! *common-text* (text-id progress-music-player-now-playing) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha)))
; (set-flags! arg1 (font-flags kerning middle middle-vert large))
; (+! (-> arg1 origin y) 110.0)
; (set-scale! arg1 0.48)
; (cond
; ((-> *progress-state-pc* music-player-track)
; (set! icon-id (-> *progress-state-pc* music-player-track icon)) ;; use this icon ID
; (print-game-text (lookup-text! *common-text* (-> *progress-state-pc* music-player-track text) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
; ;; print flava if needed too
; (when (nonzero? (-> *progress-state-pc* music-player-track flava))
; (+! (-> arg1 origin y) 36.0)
; (set-scale! arg1 0.42)
; (print-game-text (lookup-text! *common-text* (-> flava-text-list (-> *progress-state-pc* music-player-flava)) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
; )
; )
; (else
; (print-game-text (lookup-text! *common-text* (text-id progress-music-player-no-track) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
; )
; )
; ;; draw right panel icon
; (set! icon-x (the int (+ (-> arg1 origin x) (/ (-> arg1 width) 2))))
; (set! icon-w (the int (* icon-scale icon-w)))
; (set! icon-h (the int (* icon-scale icon-h)))
; ;; center icon. the icon is 96x96 but each sprite is 64x64, hence 1.5
; (-! icon-x (the int (/ (* 1.5 icon-w) 2)))
; (set-hud-sprite-attributes! (-> obj sprites 0) :tex (lookup-texture-by-id (get-level-icon-id-01 icon-id)) :a alpha :scale-x icon-scale :scale-y icon-scale :x icon-x :y icon-y)
; (set-hud-sprite-attributes! (-> obj sprites 1) :tex (lookup-texture-by-id (get-level-icon-id-02 icon-id)) :a alpha :scale-x icon-scale :scale-y icon-scale :x (+ icon-x icon-w) :y icon-y)
; (set-hud-sprite-attributes! (-> obj sprites 2) :tex (lookup-texture-by-id (get-level-icon-id-03 icon-id)) :a alpha :scale-x icon-scale :scale-y icon-scale :x icon-x :y (+ icon-y icon-h))
; (set-hud-sprite-attributes! (-> obj sprites 3) :tex (lookup-texture-by-id (get-level-icon-id-04 icon-id)) :a alpha :scale-x icon-scale :scale-y icon-scale :x (+ icon-x icon-w) :y (+ icon-y icon-h))
; ;; danger scroller
; (set-scale! arg1 0.42)
; (set! (-> arg1 origin y) (+ 26.0 (-> box max y)))
; (set! (-> arg1 origin x) (+ danger-pad (-> box min x)))
; (set-width! arg1 danger-w)
; (set-flags! arg1 (font-flags kerning large))
; (print-game-text (lookup-text! *common-text* (text-id progress-music-player-danger) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
; (+! (-> arg1 origin x) (-> arg1 width))
; (set-flags! arg1 (font-flags kerning large right))
; (set-width! arg1 arrow-w)
; (+! (-> arg1 origin x) (-> arg1 width))
; (set-color! arg1 (progress-selected (seconds 0.5)))
; (print-game-text (string-format "~33L~C" 163) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
; (set-flags! arg1 (font-flags kerning large middle))
; (set-width! arg1 (the int (- (-> box max x) (-> box min x) danger-w (* arrow-w 2) (* danger-pad 2))))
; (set-color! arg1 (font-color font-color-33))
; (print-game-text (lookup-text! *common-text* (-> danger-text-list (-> obj excitement)) #f) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
; (+! (-> arg1 origin x) (-> arg1 width))
; (set-flags! arg1 (font-flags kerning large))
; (set-width! arg1 arrow-w)
; (set-color! arg1 (progress-selected (seconds 0.5)))
; (print-game-text (string-format "~33L~C" 161) arg1 #f 44 (bucket-id hud-draw-hud-alpha))
; (with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf))
; (bucket-id hud-draw-hud-alpha)
; )
; (draw (-> obj sprites 0) buf (-> *level* default-level))
; (draw (-> obj sprites 1) buf (-> *level* default-level))
; (draw (-> obj sprites 2) buf (-> *level* default-level))
; (draw (-> obj sprites 3) buf (-> *level* default-level))
; )
; )
; (when-not-drawn-decoration
; (draw-up-down-music-player arg1 box)
; (draw-decoration-music-player obj arg1 alpha (-> obj name) 0.7 box))
; )
; 0
; (none))
(#when PC_PORT
(defun-debug draw-mouse ()
"draw some extra mouse info"
(let ((mx (+ (the int (-> *mouse* posx)) 256))
(my (+ (the int (-> *mouse* posy)) 208)))
(format *stdcon* "mouse pos: (~D,~D)~%" mx my)
(with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf)) (bucket-id debug-no-zbuf2))
(draw-sprite2d-xy buf 0 my 512 1 (static-rgba #xff #xff #xff #x40) #x3fffff)
(draw-sprite2d-xy buf mx 0 1 416 (static-rgba #xff #xff #xff #x40) #x3fffff))))
(defmacro spawn-draw-mouse-proc ()
`(process-spawn-function process
:name "draw-mouse"
:to
*display-pool*
(lambda :behavior process ()
(loop
(suspend)
(draw-mouse))))))