mirror of
https://github.com/open-goal/jak-project
synced 2026-05-28 16:32:18 -04:00
5b8bb8fe23
I'll test this more thoroughly tomorrow, quick change to allow picking resolutions that would normally be filtered out, while in windowed mode.
3280 lines
147 KiB
Common Lisp
3280 lines
147 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 draw-previous-next ((arg0 menu-highscores-option) (arg1 font-context) (arg2 symbol))
|
|
(local-vars (sv-16 string) (sv-32 int))
|
|
(let ((s3-0 370))
|
|
(case (get-aspect-ratio)
|
|
(('aspect4x3)
|
|
(set! (-> arg1 origin x) 73.0)
|
|
(set! (-> arg1 origin y) 308.0)
|
|
(set! (-> arg1 width) 359.0)
|
|
(set! (-> arg1 height) 185.0)
|
|
)
|
|
(('aspect16x9)
|
|
(set! (-> arg1 origin x) 82.0)
|
|
(set! (-> arg1 origin y) 328.0)
|
|
(set! (-> arg1 width) 355.0)
|
|
(set! (-> arg1 height) 185.0)
|
|
(set! s3-0 350)
|
|
)
|
|
)
|
|
(when (not (-> *pc-settings* use-vis?))
|
|
(set! s3-0 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) s3-0)))
|
|
(*! (-> arg1 width) (-> *pc-settings* aspect-ratio-reciprocal))
|
|
(set! (-> arg1 origin x) (the float (adjust-game-x (-> arg1 origin x))))
|
|
)
|
|
|
|
(set-flags! arg1 (font-flags kerning large))
|
|
(set-color! arg1 (progress-selected 200))
|
|
(set-scale! arg1 0.6)
|
|
(when (or (> (-> arg0 page-index) 0) arg2)
|
|
(print-game-text (string-format "~C~S" 163 (lookup-text! *common-text* (text-id progress-next) #f)) arg1 #f 44 (bucket-id progress))
|
|
)
|
|
(set! arg2 (or (!= (-> arg0 page-index) (+ (-> arg0 num-pages) -1)) arg2))
|
|
(when arg2
|
|
(set-flags! arg1 (font-flags kerning right large))
|
|
(+! (-> arg1 origin x) (the float s3-0))
|
|
(print-game-text (string-format "~S~C" (lookup-text! *common-text* (text-id progress-next) #f) 161) arg1 #f 44 (bucket-id progress))
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(deftype highscore-cup-draw-params (structure)
|
|
((cup-scale float)
|
|
(cup-y int16)
|
|
(y-on-later-pages int16)
|
|
(cup-x int16)
|
|
(font-scale float)
|
|
(font-scale-on-later-pages float)))
|
|
|
|
(define *highscore-cup-draw-params* (new 'static 'inline-array highscore-cup-draw-params 8
|
|
(new 'static 'highscore-cup-draw-params :cup-scale 0.25 :cup-y 174 :y-on-later-pages 180 :cup-x 112 :font-scale -1.0 :font-scale-on-later-pages 0.4)
|
|
(new 'static 'highscore-cup-draw-params :cup-scale 0.22 :cup-y 197 :y-on-later-pages 195 :cup-x 111 :font-scale 0.5 :font-scale-on-later-pages 0.4)
|
|
(new 'static 'highscore-cup-draw-params :cup-scale 0.20 :cup-y 217 :y-on-later-pages 210 :cup-x 110 :font-scale 0.4 :font-scale-on-later-pages 0.4)
|
|
(new 'static 'highscore-cup-draw-params :cup-scale 0.15 :cup-y 232 :y-on-later-pages 225 :cup-x 109 :font-scale 0.3 :font-scale-on-later-pages 0.4)
|
|
(new 'static 'highscore-cup-draw-params :cup-scale 0.15 :cup-y 244 :y-on-later-pages 239 :cup-x 109 :font-scale -1.0 :font-scale-on-later-pages 0.4)
|
|
(new 'static 'highscore-cup-draw-params :cup-scale 0.15 :cup-y 256 :y-on-later-pages 253 :cup-x 109 :font-scale -1.0 :font-scale-on-later-pages 0.4)
|
|
(new 'static 'highscore-cup-draw-params :cup-scale 0.15 :cup-y 268 :y-on-later-pages 266 :cup-x 109 :font-scale -1.0 :font-scale-on-later-pages 0.4)
|
|
(new 'static 'highscore-cup-draw-params :cup-scale 0.15 :cup-y 280 :y-on-later-pages 280 :cup-x 109 :font-scale -1.0 :font-scale-on-later-pages 0.4)))
|
|
|
|
(defun str-print-time-pc ((time float) (omit-milliseconds? symbol))
|
|
"Basically the same as str-print-time, but with hours support and can omit milliseconds
|
|
uses letters for the units instead of colons which can be ambiguous"
|
|
(let* ((hours (the int (/ time 3600)))
|
|
(minutes (the int (/ (- time (* 3600.0 hours)) 60)))
|
|
(seconds (the int (- time (* 3600.0 hours) (* 60.0 minutes))))
|
|
(milliseconds (the int (* 1000.0 (- time (the int time))))))
|
|
(clear *temp-string*)
|
|
(when (> hours 0)
|
|
(format *temp-string* "~Dh" hours))
|
|
(format *temp-string* "~Dm" minutes)
|
|
(format *temp-string* "~Ds" seconds)
|
|
(when (not omit-milliseconds?)
|
|
(format *temp-string* "~Dms" milliseconds)))
|
|
*temp-string*)
|
|
|
|
(defun get-highscore-type ((highscore-index-arg int))
|
|
"Given a highscore index, return it's type as a symbol
|
|
@param highscore-index-arg something
|
|
@returns The type, as as symbol."
|
|
(let ((highscore-type 'game))
|
|
(let ((highscore-index highscore-index-arg))
|
|
(cond
|
|
((and (>= highscore-index 0) (<= highscore-index 4)) (set! highscore-type 'game))
|
|
((and (>= highscore-index 5) (<= highscore-index 12)) (set! highscore-type 'race))
|
|
((= highscore-index 13) (set! highscore-type 'game))
|
|
((and (>= highscore-index 15) (<= highscore-index 20)) (set! highscore-type 'speedrun))))
|
|
highscore-type))
|
|
|
|
(defun print-highscore-pc ((highscore-row print-highscore-obj) (name string))
|
|
(local-vars (font-ctx font-context) (cup-x-offset float) (sv-24 int) (sv-32 int))
|
|
(set! font-ctx (-> highscore-row context))
|
|
(set! cup-x-offset (-> highscore-row interp))
|
|
(set! sv-24 50)
|
|
(set! sv-32 (if (= (get-aspect-ratio) 'aspect4x3)
|
|
320
|
|
300))
|
|
(when (not (-> *pc-settings* use-vis?))
|
|
(set! sv-32 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) sv-32)))
|
|
(set! sv-24 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) sv-24))))
|
|
(set-flags! font-ctx (font-flags kerning large))
|
|
(+! (-> font-ctx origin x) (the float sv-24))
|
|
|
|
(let* ((draw-params (-> *highscore-cup-draw-params* (-> highscore-row place)))
|
|
(cup-x (-> draw-params cup-x)))
|
|
;; correct cup x
|
|
(when (not (-> *pc-settings* use-vis?))
|
|
(set! cup-x (adjust-game-x (the float cup-x))))
|
|
;; set font scale
|
|
(if (> (-> *progress-pc-generic-store* current-highscore-page-index) 0)
|
|
(set-scale! font-ctx (-> draw-params font-scale-on-later-pages))
|
|
(if (> (-> draw-params font-scale) 0)
|
|
(set-scale! font-ctx (-> draw-params font-scale))))
|
|
;; move font down
|
|
(when (< 0 (-> highscore-row place))
|
|
(if (> (-> *progress-pc-generic-store* current-highscore-page-index) 0)
|
|
(+! (-> font-ctx origin y) (the float (- (-> draw-params y-on-later-pages) (-> *highscore-cup-draw-params* (1- (-> highscore-row place)) y-on-later-pages))))
|
|
(+! (-> font-ctx origin y) (the float (- (-> draw-params cup-y) (-> *highscore-cup-draw-params* (1- (-> highscore-row place)) cup-y))))))
|
|
;; print highscore text
|
|
(if (and (nonzero? name) (!= name #f))
|
|
(print-game-text (string-format "~S" name) font-ctx #f 44 (bucket-id progress))
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (-> (new 'static 'boxed-array :type text-id (text-id progress-highscores-1st)
|
|
(text-id progress-highscores-2nd)
|
|
(text-id progress-highscores-3rd)
|
|
(text-id progress-highscores-4th)
|
|
(text-id progress-highscores-5th)
|
|
(text-id progress-highscores-6th)
|
|
(text-id progress-highscores-7th)
|
|
(text-id progress-highscores-8th))
|
|
(-> highscore-row place)) #f)) font-ctx #f 44 (bucket-id progress)))
|
|
;; draw cup icon if we're not the previous page
|
|
(cond
|
|
;; Just draw the cup based on the index if we're involving external times, it's not that complicated
|
|
((and (-> *pc-settings* speedrunner-mode?)
|
|
(= (-> *progress-pc-generic-store* current-highscore-page-index) 0))
|
|
;; TODO - enum
|
|
(let ((place (case (-> highscore-row place)
|
|
((0) 3)
|
|
((1) 2)
|
|
((2) 1)
|
|
(else 0))))
|
|
(draw-highscore-cup (-> highscore-row self) place (+ (the int cup-x-offset) cup-x) (-> draw-params cup-y) (-> draw-params cup-scale) (-> highscore-row local-scale))))
|
|
(else
|
|
(when (and (= (-> *progress-pc-generic-store* current-highscore-page-index) 0)
|
|
(not (-> highscore-row previous)))
|
|
(draw-highscore-cup (-> highscore-row self) (eval-highscore highscore-row) (+ (the int cup-x-offset) cup-x) (-> draw-params cup-y) (-> draw-params cup-scale) (-> highscore-row local-scale))))))
|
|
(+! (-> font-ctx origin x) (the float sv-32))
|
|
(set-flags! font-ctx (font-flags kerning right large))
|
|
(cond
|
|
((-> highscore-row game-score)
|
|
(print-game-text (string-format "~D" (the int (-> highscore-row score))) font-ctx #f 44 (bucket-id progress)))
|
|
(else
|
|
(print-game-text (str-print-time-pc (-> highscore-row score) (= 'speedrun (get-highscore-type (-> highscore-row index)))) font-ctx #f 44 (bucket-id progress))))
|
|
|
|
(set-flags! font-ctx (font-flags kerning large))
|
|
(set! (-> font-ctx origin x) (- (-> font-ctx origin x) (the float (+ sv-24 sv-32)))))
|
|
|
|
(defun highscore-available? ((highscore-index int))
|
|
(let ((available? #f))
|
|
(let ((index highscore-index))
|
|
(cond
|
|
((zero? index) (set! available? #t))
|
|
((= index 1) (set! available? (logtest? (-> *game-info* sub-task-list (game-task-node city-yellow-gun-training-introduction) flags) (game-task-node-flag closed))))
|
|
((= index 2) (set! available? (logtest? (-> *game-info* secrets) (game-secrets gungame-blue))))
|
|
((= index 3) (set! available? (logtest? (-> *game-info* secrets) (game-secrets gungame-dark))))
|
|
((= index 4) (set! available? (logtest? (-> *game-info* sub-task-list (game-task-node stadium-board1-introduction) flags) (game-task-node-flag closed))))
|
|
((= index 5) (set! available? (logtest? (-> *game-info* sub-task-list (game-task-node stadium-race-class3-introduction) flags) (game-task-node-flag closed))))
|
|
((= index 6) (set! available? (logtest? (-> *game-info* sub-task-list (game-task-node stadium-race-class2-introduction) flags) (game-task-node-flag closed))))
|
|
((= index 7) (set! available? (logtest? (-> *game-info* sub-task-list (game-task-node stadium-race-class1-introduction) flags) (game-task-node-flag closed))))
|
|
((= index 8) (set! available? (or (logtest? (-> *game-info* sub-task-list (game-task-node city-burning-bush-race-port-introduction) flags) (game-task-node-flag closed)) (open? (-> *game-info* sub-task-list (game-task-node city-burning-bush-race-port-introduction))))))
|
|
((= index 9) (set! available? (or (logtest? (-> *game-info* sub-task-list (game-task-node city-burning-bush-race-errol-introduction) flags) (game-task-node-flag closed)) (open? (-> *game-info* sub-task-list (game-task-node city-burning-bush-race-errol-introduction))))))
|
|
((= index 10) (set! available? (logtest? (-> *game-info* secrets) (game-secrets reverse-races))))
|
|
((= index 11) (set! available? (logtest? (-> *game-info* secrets) (game-secrets reverse-races))))
|
|
((= index 12) (set! available? (logtest? (-> *game-info* secrets) (game-secrets reverse-races))))
|
|
((= index 13) (set! available? (logtest? (-> *game-info* sub-task-list (game-task-node city-play-onin-game-introduction) flags) (game-task-node-flag closed))))
|
|
((= index 14) (set! available? (logtest? (-> *game-info* sub-task-list (game-task-node city-whack-introduction) flags) (game-task-node-flag closed))))
|
|
((and (>= index 15) (<= index 20)) (set! available? (and (-> *pc-settings* speedrunner-mode?))))))
|
|
available?))
|
|
|
|
(defun get-highscore-text ((highscore-index int))
|
|
(let ((id (text-id progress-highscores-header-race)))
|
|
(let ((index highscore-index))
|
|
(cond
|
|
((and (>= index 0) (<= index 3)) (set! id (text-id progress-highscores-header-guncourse)))
|
|
((= index 4) (set! id (text-id progress-highscores-header-jetboard)))
|
|
((and (>= index 5) (<= index 12)) (set! id (text-id progress-highscores-header-race)))
|
|
((= index 13) (set! id (text-id progress-highscores-header-onin)))
|
|
((= index 14) (set! id (text-id progress-highscores-header-metalhead-mash)))
|
|
((and (>= index 15) (<= index 20)) (set! id (text-id progress-highscores-header-speedrun)))))
|
|
(the-as text-id id)))
|
|
|
|
(defun get-highscore-text-sub ((highscore-index int))
|
|
(let ((id (text-id progress-highscores-subheader-class1)))
|
|
(let ((index highscore-index))
|
|
(cond
|
|
((zero? index) (set! id (text-id progress-highscores-subheader-scattergun)))
|
|
((= index 1) (set! id (text-id progress-highscores-subheader-blaster)))
|
|
((= index 2) (set! id (text-id progress-highscores-subheader-vulcan)))
|
|
((= index 3) (set! id (text-id progress-highscores-subheader-peacemaker)))
|
|
((= index 4) (set! id (text-id progress-highscores-subheader-stadium)))
|
|
((= index 5) (set! id (text-id progress-highscores-subheader-class3)))
|
|
((= index 6) (set! id (text-id progress-highscores-subheader-class2)))
|
|
((= index 7) (set! id (text-id progress-highscores-subheader-class1)))
|
|
((= index 8) (set! id (text-id progress-highscores-subheader-portrace)))
|
|
((= index 9) (set! id (text-id progress-highscores-subheader-cityrace)))
|
|
((= index 10) (set! id (text-id progress-highscores-subheader-class3-reverse)))
|
|
((= index 11) (set! id (text-id progress-highscores-subheader-class2-reverse)))
|
|
((= index 12) (set! id (text-id progress-highscores-subheader-class1-reverse)))
|
|
((= index 13) (set! id (text-id progress-highscores-subheader-oninstent)))
|
|
((= index 14) (set! id (text-id progress-highscores-subheader-hiphog)))
|
|
((= index 15) (set! id (text-id progress-highscores-subheader-speedrun-any)))
|
|
((= index 16) (set! id (text-id progress-highscores-subheader-speedrun-anyhoverless)))
|
|
((= index 17) (set! id (text-id progress-highscores-subheader-speedrun-allmissions)))
|
|
((= index 18) (set! id (text-id progress-highscores-subheader-speedrun-100)))
|
|
((= index 19) (set! id (text-id progress-highscores-subheader-speedrun-anyorbs)))
|
|
((= index 20) (set! id (text-id progress-highscores-subheader-speedrun-anyhero)))))
|
|
(the-as text-id id)))
|
|
|
|
(defun get-highscore-icon ((highscore-index int))
|
|
(let ((texture (new 'static 'texture-id :index #x10 :page #xc93)))
|
|
(let ((index highscore-index))
|
|
(cond
|
|
((zero? index) (set! texture (new 'static 'texture-id :index #x10 :page #xc93)))
|
|
((= index 1) (set! texture (new 'static 'texture-id :index #x12 :page #xc93)))
|
|
((= index 2) (set! texture (new 'static 'texture-id :index #x13 :page #xc93)))
|
|
((= index 3) (set! texture (new 'static 'texture-id :index #x11 :page #xc93)))
|
|
((= index 4) (set! texture (new 'static 'texture-id :index #xe :page #xc93)))
|
|
((and (>= index 5) (<= index 12)) (set! texture (new 'static 'texture-id :index #x1 :page #xc93)))
|
|
((= index 13) (set! texture (new 'static 'texture-id :index #x16 :page #xc93)))
|
|
((= index 14) (set! texture (new 'static 'texture-id :index #x17 :page #xc93)))
|
|
;; TODO - maybe i can lookup some unique icons for the categories? Maybe some of the bigmap ones? for now just the jetboard because fast
|
|
((and (>= index 15) (<= index 20)) (set! texture (new 'static 'texture-id :index #xe :page #xc93)))))
|
|
(the-as texture-id texture)))
|
|
|
|
(defun get-num-highscores ()
|
|
(let ((count 0))
|
|
(dotimes (max-highscores (if (-> *pc-settings* speedrunner-mode?) 21 15))
|
|
(when (highscore-available? max-highscores)
|
|
(+! count 1)))
|
|
count))
|
|
|
|
(defun get-next-highscore ((current-highscore-index int))
|
|
(let ((max-highscores (if (-> *pc-settings* speedrunner-mode?) 21 15))
|
|
(index-change 1)
|
|
(selected-index -1))
|
|
(+ current-highscore-index index-change)
|
|
(while (and (= selected-index -1) (< index-change max-highscores))
|
|
(let ((s2-0 (+ current-highscore-index index-change)))
|
|
(+! index-change 1)
|
|
(when (highscore-available? (mod s2-0 max-highscores))
|
|
(set! selected-index (mod s2-0 max-highscores)))))
|
|
(when (= selected-index -1)
|
|
(set! selected-index current-highscore-index))
|
|
selected-index))
|
|
|
|
(defun get-prev-highscore ((current-highscore-index int))
|
|
(let ((max-highscores (if (-> *pc-settings* speedrunner-mode?) 21 15))
|
|
(index-change 1)
|
|
(selected-index -1))
|
|
(+ current-highscore-index index-change)
|
|
(while (and (= selected-index -1) (< index-change max-highscores))
|
|
(let ((curr-index (- current-highscore-index index-change)))
|
|
(+! index-change 1)
|
|
(when (< curr-index 0)
|
|
(set! curr-index (+ max-highscores curr-index)))
|
|
(let ((highscore-available-fn highscore-available?)
|
|
(normalized-index (abs curr-index)))
|
|
(when (highscore-available-fn normalized-index)
|
|
(set! selected-index (abs curr-index))))))
|
|
(when (= selected-index -1)
|
|
(set! selected-index current-highscore-index))
|
|
selected-index))
|
|
|
|
(defun get-highscore-icon-scale ((highscore-index int))
|
|
(let ((scale 1.0)
|
|
(guncourse-scale 0.6)
|
|
(race-scale 0.8))
|
|
(cond
|
|
((and (>= highscore-index 0) (<= highscore-index 3)) (set! scale guncourse-scale))
|
|
((= highscore-index 4) (set! scale 0.5))
|
|
((and (>= highscore-index 5) (<= highscore-index 12)) (set! scale race-scale))
|
|
((= highscore-index 13) (set! scale 0.7))
|
|
((= highscore-index 14) (set! scale 0.7))
|
|
((and (>= highscore-index 15) (<= highscore-index 20)) (set! scale 0.5)))
|
|
scale))
|
|
|
|
(defun get-highscore-icon-xoffset ((highscore-index int))
|
|
(cond
|
|
((not (-> *pc-settings* use-vis?)) (adjust-game-x 435.0))
|
|
((= (get-aspect-ratio) 'aspect4x3) 435)
|
|
(else 410)))
|
|
|
|
;; TODO:
|
|
;; - nothing found
|
|
;; - API error
|
|
|
|
(defun progress-pc-get-external-time ((highscore-index int) (row-index int))
|
|
(case highscore-index
|
|
((0) (pc-get-external-highscore "scatter" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((1) (pc-get-external-highscore "blaster" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((2) (pc-get-external-highscore "vulcan" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((3) (pc-get-external-highscore "peacemaker" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((4) (pc-get-external-highscore "jetboard" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((5) (pc-get-external-race-time "class3" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((6) (pc-get-external-race-time "class2" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((7) (pc-get-external-race-time "class1" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((8) (pc-get-external-race-time "port" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((9) (pc-get-external-race-time "erol" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((10) (pc-get-external-race-time "class3rev" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((11) (pc-get-external-race-time "class2rev" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((12) (pc-get-external-race-time "class1rev" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((13) (pc-get-external-highscore "onin" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((14) (pc-get-external-highscore "mash" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((15) (pc-get-external-speedrun-time "any" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((16) (pc-get-external-speedrun-time "anyhoverless" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((17) (pc-get-external-speedrun-time "allmissions" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((18) (pc-get-external-speedrun-time "100" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((19) (pc-get-external-speedrun-time "anyorbs" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))
|
|
((20) (pc-get-external-speedrun-time "anyhero" row-index *pc-cpp-temp-string* (&-> *progress-pc-generic-store* custom-highscore-score)))))
|
|
|
|
(defun draw-highscore-page-up-down-arrows ((font-ctx font-context) (draw-up? symbol) (draw-down? symbol))
|
|
(let ((new-x-pos 58.0)
|
|
(new-y-pos-up 105)
|
|
(new-y-pos-down 190)
|
|
(new-scale 0.5)
|
|
(old-scale (-> font-ctx scale))
|
|
(old-x-pos (-> font-ctx origin x))
|
|
(old-y-pos (-> font-ctx origin y)))
|
|
(when (= (get-aspect-ratio) 'aspect16x9)
|
|
(set! new-x-pos 251.5)
|
|
(set! new-y-pos-up 75)
|
|
(set! new-y-pos-down 265))
|
|
(set! (-> font-ctx scale) new-scale)
|
|
(when draw-up?
|
|
(set! (-> font-ctx origin x) (the float new-x-pos))
|
|
(set! (-> font-ctx origin y) (the float new-y-pos-up))
|
|
(let ((print-text-fn print-game-text))
|
|
(format (clear *temp-string*) "~33L~C" 160)
|
|
(print-text-fn *temp-string* font-ctx #f 44 (bucket-id progress))))
|
|
(when draw-down?
|
|
(set! (-> font-ctx origin x) (the float new-x-pos))
|
|
(set! (-> font-ctx origin y) (the float (+ new-y-pos-up new-y-pos-down)))
|
|
(let ((print-text-fn-1 print-game-text))
|
|
(format (clear *temp-string*) "~33L~C" 162)
|
|
(print-text-fn-1 *temp-string* font-ctx #f 44 (bucket-id progress))))
|
|
(set! (-> font-ctx origin x) old-x-pos)
|
|
(set! (-> font-ctx origin y) old-y-pos)
|
|
(set! (-> font-ctx scale) old-scale))
|
|
(none))
|
|
|
|
(defun progress-pc-local-entry-label ((highscore-index int))
|
|
(if (and (>= highscore-index 5) (<= highscore-index 12))
|
|
(text-id progress-highscores-local-time)
|
|
(text-id progress-highscores-local-score)))
|
|
|
|
(defun progress-pc-get-next-score ((highscore-index int) (rows-already-printed int))
|
|
"Fetches the next valid score, merges with local scores. Score will be returned, name will be in [[*pc-cpp-temp-string*]]
|
|
this is a bit inefficient, but it lets us avoid keeping track of state"
|
|
(let ((return-next-value? #f)
|
|
(local-index 0)
|
|
(external-index 0)
|
|
(max-local-times (progress-pc-get-num-nonzero-local-scores highscore-index))
|
|
(max-external-times (progress-pc-max-external-scores highscore-index))
|
|
(times-enumerated 0)
|
|
(local-score-ptr (get-game-score-ref *game-info* (get-highscore-score highscore-index))))
|
|
;; first check if we should return the next value
|
|
(while (< times-enumerated (progress-pc-max-highscore-rows highscore-index))
|
|
(when (>= times-enumerated rows-already-printed)
|
|
(set! return-next-value? #t))
|
|
(cond
|
|
;; case where both arrays have times remaining
|
|
((and (< local-index max-local-times) (< external-index max-external-times))
|
|
(progress-pc-get-external-time highscore-index external-index)
|
|
(cond
|
|
((> (-> local-score-ptr local-index) (-> *progress-pc-generic-store* custom-highscore-score))
|
|
;; local score is higher, use the local one
|
|
(if return-next-value?
|
|
(begin
|
|
(clear *pc-cpp-temp-string*)
|
|
(format *pc-cpp-temp-string* "~S~S" "~[~1L" (lookup-text! *common-text* (progress-pc-local-entry-label highscore-index) #f))
|
|
(return (-> local-score-ptr local-index)))
|
|
(inc! local-index)))
|
|
(else
|
|
;; otherwise, use the external one
|
|
(if return-next-value?
|
|
(begin
|
|
(return (-> *progress-pc-generic-store* custom-highscore-score)))
|
|
(inc! external-index)))))
|
|
;; case where we only have local times left
|
|
((< local-index max-local-times)
|
|
(if return-next-value?
|
|
(begin
|
|
(clear *pc-cpp-temp-string*)
|
|
(format *pc-cpp-temp-string* "~S~S" "~[~1L" (lookup-text! *common-text* (progress-pc-local-entry-label highscore-index) #f))
|
|
(return (-> local-score-ptr local-index)))
|
|
(inc! local-index)))
|
|
;; case where we only have external times left
|
|
((< external-index max-external-times)
|
|
(progress-pc-get-external-time highscore-index external-index)
|
|
(if return-next-value?
|
|
(return (-> *progress-pc-generic-store* custom-highscore-score))
|
|
(inc! external-index))))
|
|
(inc! times-enumerated))
|
|
-1.0))
|
|
|
|
(defmethod draw-option ((this menu-highscores-option) (progress progress) (font-ctx font-context) (option-index int) (selected? symbol))
|
|
(let ((alpha (fmax 0.0 (* 2.0 (- 0.5 (-> progress menu-transition)))))
|
|
(padding 20.0)
|
|
(icon-scale 0.22)
|
|
(line-width 395.0)
|
|
(old-font-origin-x (-> font-ctx origin x))
|
|
(ui-boundary (new 'stack-no-clear 'hud-box))
|
|
(highscore-row (new 'stack 'print-highscore-obj))
|
|
(row-width 0.0)
|
|
(unknown-todo 0.0))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(*! padding (-> *pc-settings* aspect-ratio-reciprocal)))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(*! line-width (-> *pc-settings* aspect-ratio-reciprocal)))
|
|
(set! row-width (* (-> progress sliding) line-width))
|
|
(set! unknown-todo (* (-> progress sliding-off) (-> this slide-dir) line-width))
|
|
(cond
|
|
((or (= *pc-waiting-on-rpc?* #t) (not (-> *bigmap* progress-minimap)))
|
|
(draw-busy-loading font-ctx))
|
|
(else
|
|
;; initial font parameters
|
|
(set! (-> font-ctx alpha) alpha)
|
|
(set-scale! font-ctx 1.0)
|
|
(set-flags! font-ctx (font-flags kerning middle large))
|
|
(set-color! font-ctx (font-color progress))
|
|
|
|
;; set up for decoration text
|
|
(set! (-> font-ctx origin x) 59.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> font-ctx origin x) (the float (adjust-game-x (-> font-ctx origin x)))))
|
|
(set! (-> font-ctx origin y) 78.0)
|
|
(set! (-> font-ctx width) line-width)
|
|
(set! (-> font-ctx height) 215.0)
|
|
|
|
;; set the scissor region
|
|
(begin-scissor ui-boundary progress)
|
|
|
|
;; set up for highscore icon
|
|
(set! (-> this sprites 0 tex) (lookup-texture-by-id (new 'static 'texture-id :index #x3 :page #xc93)))
|
|
(set! (-> this sprites 0 flags) (the-as uint 4))
|
|
(set! (-> this sprites 0 scale-x) icon-scale)
|
|
(set! (-> this sprites 0 scale-y) icon-scale)
|
|
(let ((icon-sprite (-> this sprites 0 color2)))
|
|
(set! (-> icon-sprite 0) 128)
|
|
(set! (-> icon-sprite 1) 128)
|
|
(set! (-> icon-sprite 2) 128)
|
|
(set! (-> icon-sprite 3) (the int (* 128.0 alpha)))
|
|
)
|
|
(set! (-> this sprites 0 pos z) #xfffff0)
|
|
(set! (-> this sprites 0 pos w) 0)
|
|
|
|
;; draw decoration text
|
|
(if (text-language? spanish)
|
|
(draw-decoration this font-ctx alpha (text-id progress-root-highscores) #t 0.8)
|
|
(draw-decoration this font-ctx alpha (text-id progress-root-highscores) #t 0.95))
|
|
|
|
;; draw scrolling arrows if applicable
|
|
(when (> (progress-pc-max-highscore-rows (-> this page-index)) 8)
|
|
(draw-highscore-page-up-down-arrows font-ctx
|
|
(> (-> *progress-pc-generic-store* current-highscore-page-index) 0)
|
|
(< (* (inc (-> *progress-pc-generic-store* current-highscore-page-index)) 8) (progress-pc-max-highscore-rows (-> this page-index)))))
|
|
|
|
;; draw highscore title (e.g 'Gun Course')
|
|
(set-scale! font-ctx 0.6)
|
|
(set! (-> font-ctx height) 185.0)
|
|
(+! (-> font-ctx origin y) 46.0)
|
|
(set! (-> font-ctx origin x) 65.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> font-ctx origin x) (the float (adjust-game-x (-> font-ctx origin x)))))
|
|
(set-width! font-ctx 367)
|
|
(set-flags! font-ctx (font-flags kerning large))
|
|
(set-color! font-ctx (font-color progress-force-selected))
|
|
(set! (-> font-ctx origin x) (+ padding row-width (-> font-ctx origin x)))
|
|
(set-scale! font-ctx 0.75)
|
|
(when (text-language? german)
|
|
(set-scale! font-ctx 0.69))
|
|
(when (text-language? french)
|
|
(set-scale! font-ctx 0.72))
|
|
(when (text-language? spanish)
|
|
(set-scale! font-ctx 0.65))
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (get-highscore-text (-> this page-index)) #f)) font-ctx #f 44 (bucket-id progress))
|
|
|
|
;; now draw highscore subtitle (e.g 'Scatter Gun')
|
|
(+! (-> font-ctx origin y) 25.0)
|
|
(set-scale! font-ctx 0.6)
|
|
(when (text-language? french spanish)
|
|
(set-scale! font-ctx 0.58))
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (get-highscore-text-sub (-> this page-index)) #f)) font-ctx #f 44 (bucket-id progress))
|
|
|
|
;; draw highscore icon
|
|
(set! (-> font-ctx origin x) (- (-> font-ctx origin x) (+ padding row-width)))
|
|
(+! (-> font-ctx origin y) 25.0)
|
|
(draw-highscore-icon
|
|
this
|
|
(get-highscore-icon (-> this page-index))
|
|
(the int (+ (the float (get-highscore-icon-xoffset (-> this page-index))) row-width))
|
|
(get-highscore-icon-yoffset (-> this page-index))
|
|
(get-highscore-icon-scale (-> this page-index)))
|
|
|
|
;; print the scores now.
|
|
(set! old-font-origin-x (-> font-ctx origin x))
|
|
(set-color! font-ctx (font-color progress))
|
|
(+! (-> font-ctx origin x) row-width)
|
|
(set-scale! font-ctx 0.6)
|
|
(let ((score-ptr (get-game-score-ref *game-info* (get-highscore-score (-> this page-index)))))
|
|
(set! (-> highscore-row index) (-> this page-index))
|
|
(set! (-> highscore-row previous) #f)
|
|
(set! (-> highscore-row self) this)
|
|
(case (get-highscore-type (-> this page-index))
|
|
(('game) (set! (-> highscore-row game-score) #t))
|
|
(('race) (set! (-> highscore-row game-score) #f))
|
|
(('speedrun) (set! (-> highscore-row game-score) #f)))
|
|
(set! (-> highscore-row context) font-ctx)
|
|
(set! (-> highscore-row local-scale) alpha)
|
|
(set! (-> highscore-row interp) row-width)
|
|
;; retrieve the scores and draw them
|
|
(if (-> *pc-settings* speedrunner-mode?)
|
|
(cond
|
|
((= (get-highscore-type (-> this page-index)) 'speedrun)
|
|
;; speedruns are easy, there are no local times
|
|
(dotimes (row-index 8)
|
|
(let ((run-index (+ row-index (* (-> *progress-pc-generic-store* current-highscore-page-index) 8))))
|
|
;; fetch the info
|
|
(progress-pc-get-external-time (-> this page-index) run-index)
|
|
(set! (-> highscore-row place) row-index)
|
|
(set! (-> highscore-row score) (-> *progress-pc-generic-store* custom-highscore-score))
|
|
(when (> (-> *progress-pc-generic-store* custom-highscore-score) 0)
|
|
(print-highscore-pc highscore-row *pc-cpp-temp-string*)))))
|
|
(else
|
|
;; races and highscores are a bit more tricky as they may have local times
|
|
;; so we merge them so you can see how you locally stack up against the competition
|
|
(dotimes (row-index 8)
|
|
(let* ((num-rows-already-printed (+ row-index (* (-> *progress-pc-generic-store* current-highscore-page-index) 8)))
|
|
(score (progress-pc-get-next-score (-> this page-index) num-rows-already-printed)))
|
|
(set! (-> highscore-row place) row-index)
|
|
(set! (-> highscore-row score) score)
|
|
(when (> score 0)
|
|
(print-highscore-pc highscore-row *pc-cpp-temp-string*))))))
|
|
(dotimes (row-index 8)
|
|
(set! (-> highscore-row place) row-index)
|
|
(set! (-> highscore-row score) (-> score-ptr row-index))
|
|
(print-highscore-pc highscore-row (the-as string #f)))))
|
|
(set! (-> font-ctx origin x) old-font-origin-x)
|
|
|
|
;; draw the previous highscore that was seen
|
|
;; note that we only need to know what the last one was
|
|
;; since the screen only needs to draw 2 highscores at any given time anyway
|
|
;; reset font parameters
|
|
(set-scale! font-ctx 0.6)
|
|
(set! (-> font-ctx origin x) 59.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> font-ctx origin x) (the float (adjust-game-x (-> font-ctx origin x)))))
|
|
(set! (-> font-ctx origin y) 78.0)
|
|
(set! (-> font-ctx width) line-width)
|
|
(set! (-> font-ctx height) 215.0)
|
|
(set-scale! font-ctx 0.5)
|
|
(set! (-> font-ctx height) 185.0)
|
|
(+! (-> font-ctx origin y) 46.0)
|
|
(set! (-> font-ctx origin x) 80.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> font-ctx origin x) (the float (adjust-game-x (-> font-ctx origin x)))))
|
|
(set! (-> this sprites 0 pos z) #xffffff)
|
|
(set! (-> font-ctx width) line-width)
|
|
(set-flags! font-ctx (font-flags kerning large))
|
|
(set-color! font-ctx (font-color progress-force-selected))
|
|
(set! (-> font-ctx origin x) (+ padding unknown-todo (-> font-ctx origin x)))
|
|
(set-scale! font-ctx 0.75)
|
|
(when (text-language? german)
|
|
(set-scale! font-ctx 0.69))
|
|
(when (text-language? french)
|
|
(set-scale! font-ctx 0.72))
|
|
(when (text-language? spanish)
|
|
(set-scale! font-ctx 0.65))
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (get-highscore-text (-> this prev-page-index)) #f)) font-ctx #f 44 (bucket-id progress))
|
|
(+! (-> font-ctx origin y) 25.0)
|
|
(set-scale! font-ctx 0.6)
|
|
(when (text-language? french spanish)
|
|
(set-scale! font-ctx 0.58))
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (get-highscore-text-sub (-> this prev-page-index)) #f)) font-ctx #f 44 (bucket-id progress))
|
|
(set! (-> font-ctx origin x) (- (-> font-ctx origin x) (+ padding unknown-todo)))
|
|
(+! (-> font-ctx origin y) 25.0)
|
|
(draw-highscore-icon
|
|
this
|
|
(get-highscore-icon (-> this prev-page-index))
|
|
(the int (+ (the float (get-highscore-icon-xoffset (-> this page-index))) unknown-todo))
|
|
(get-highscore-icon-yoffset (-> this page-index))
|
|
(get-highscore-icon-scale (-> this page-index)))
|
|
(set! old-font-origin-x (-> font-ctx origin x))
|
|
(set-color! font-ctx (font-color progress))
|
|
(+! (-> font-ctx origin x) unknown-todo)
|
|
(set-scale! font-ctx 0.6)
|
|
(when (< 1 (get-num-highscores))
|
|
(let ((gp-11 (get-game-score-ref *game-info* (get-highscore-score (-> this prev-page-index)))))
|
|
(set! (-> highscore-row index) (-> this prev-page-index))
|
|
(set! (-> highscore-row previous) #t)
|
|
(set! (-> highscore-row self) this)
|
|
(case (get-highscore-type (-> this prev-page-index))
|
|
(('game)
|
|
(set! (-> highscore-row game-score) #t))
|
|
(('race)
|
|
(set! (-> highscore-row game-score) #f)))
|
|
(set! (-> highscore-row context) font-ctx)
|
|
(set! (-> highscore-row local-scale) alpha)
|
|
(set! (-> highscore-row interp) row-width)
|
|
;; TODO - update this section
|
|
(dotimes (s5-10 8)
|
|
(set! (-> highscore-row place) s5-10)
|
|
(set! (-> highscore-row score) (-> gp-11 s5-10))
|
|
(print-highscore-pc highscore-row (the-as string #f))))
|
|
(set! (-> font-ctx origin x) old-font-origin-x)
|
|
(set-scale! font-ctx 0.6))
|
|
(when (< 1 (get-num-highscores))
|
|
(draw-previous-next this font-ctx #t))
|
|
(end-scissor ui-boundary 1.0))))
|
|
(none))
|
|
|
|
|
|
(defmethod draw-option ((obj menu-slider-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
|
|
(local-vars
|
|
(sv-48 int)
|
|
(sv-64 int)
|
|
(sv-80 int)
|
|
(sv-96 int)
|
|
(sv-112 int)
|
|
(sv-128 pointer)
|
|
(sv-160 rgba)
|
|
(sv-176 dma-buffer)
|
|
(sv-208 pointer)
|
|
(sv-240 rgba)
|
|
(sv-256 dma-buffer)
|
|
)
|
|
(let ((s5-0 arg1)
|
|
(gp-0 arg2)
|
|
(bar-width 230.0)
|
|
(bar-width-max 240)
|
|
(icon-right-offset 242)
|
|
)
|
|
(let ((f30-0 (* 2.0 (- 0.5 (-> arg0 menu-transition)))))
|
|
(set! sv-48 128)
|
|
(let ((s1-0 sv-48)
|
|
(s0-0 9)
|
|
(s2-0 157)
|
|
(f28-0 2.0)
|
|
(s3-0 252)
|
|
)
|
|
(set! sv-64 20)
|
|
(set! sv-80 0)
|
|
(set! sv-96 112)
|
|
(set! sv-112 127)
|
|
(if (< f30-0 0.0)
|
|
(set! f30-0 0.0)
|
|
)
|
|
(set! (-> s5-0 alpha) f30-0)
|
|
(cond
|
|
((not (-> *bigmap* progress-minimap))
|
|
(draw-busy-loading s5-0)
|
|
(return 0)
|
|
)
|
|
(else
|
|
(set-scale! s5-0 0.6)
|
|
(+! (-> s5-0 origin y) 20.0)
|
|
(case (get-aspect-ratio)
|
|
(('aspect4x3)
|
|
(set! s2-0 157)
|
|
(let ((v1-17 gp-0))
|
|
(cond
|
|
((zero? v1-17)
|
|
(+! (-> s5-0 origin y) -24.0)
|
|
(+! s2-0 -9)
|
|
)
|
|
((= v1-17 1)
|
|
(+! (-> s5-0 origin y) -9.0)
|
|
(+! s2-0 43)
|
|
)
|
|
((= v1-17 2)
|
|
(+! (-> s5-0 origin y) 6.0)
|
|
(+! s2-0 96)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(('aspect16x9)
|
|
(set! s2-0 172)
|
|
(set! f28-0 2.62)
|
|
(set! s0-0 5)
|
|
(set! s3-0 250)
|
|
(let ((v1-28 gp-0))
|
|
(cond
|
|
((zero? v1-28)
|
|
(+! (-> s5-0 origin y) -20.0)
|
|
(+! s2-0 -20)
|
|
)
|
|
((= v1-28 1)
|
|
(+! (-> s5-0 origin y) 2.0)
|
|
(+! s2-0 40)
|
|
)
|
|
((= v1-28 2)
|
|
(+! (-> s5-0 origin y) 30.0)
|
|
(+! s2-0 105)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (not (-> *pc-settings* use-vis?))
|
|
(set! sv-48 (adjust-game-x (the float sv-48)))
|
|
(set! s1-0 (adjust-game-x (the float s1-0)))
|
|
(*! bar-width (-> *pc-settings* aspect-ratio-reciprocal))
|
|
(set! bar-width-max (the int (* (-> *pc-settings* aspect-ratio-reciprocal) bar-width-max)))
|
|
(set! icon-right-offset (the int (* (-> *pc-settings* aspect-ratio-reciprocal) icon-right-offset)))
|
|
(set! sv-64 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) sv-64)))
|
|
(set! s0-0 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) s0-0)))
|
|
(set! s3-0 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) s3-0)))
|
|
)
|
|
(set-flags! s5-0 (font-flags kerning large))
|
|
(set! (-> s5-0 origin x) (the float sv-48))
|
|
(cond
|
|
(arg3
|
|
(set! sv-128 (-> obj value-to-modify))
|
|
(+! (-> s5-0 origin y) -8.0)
|
|
(set-color! s5-0 (font-color progress-force-selected))
|
|
(draw-highlight (the int (+ -2.0 (-> s5-0 origin y))) 52 f30-0)
|
|
(print-game-text (lookup-text! *common-text* (-> obj name) #f) s5-0 #f 44 (bucket-id progress))
|
|
(set! sv-160 (new 'static 'rgba :r (the int (* 0.0 f30-0 (-> (the-as (pointer float) sv-128))))
|
|
:g (the int (* 0.0 f30-0 (-> (the-as (pointer float) sv-128))))
|
|
:b (the int (* 0.0 f30-0 (-> (the-as (pointer float) sv-128))))
|
|
:a (the int (* 128.0 f30-0))))
|
|
(set! (-> obj sprites 0 tex) (lookup-texture-by-id (new 'static 'texture-id :index #xb :page #xc93)))
|
|
(set! (-> obj sprites 0 scale-x) f28-0)
|
|
(set! (-> obj sprites 0 scale-y) 0.7)
|
|
(let ((v1-57 (-> obj sprites 0 color2)))
|
|
(set! (-> v1-57 0) 128)
|
|
(set! (-> v1-57 1) 128)
|
|
(set! (-> v1-57 2) 128)
|
|
(set! (-> v1-57 3) (the int (* 128.0 f30-0)))
|
|
)
|
|
(set! (-> obj sprites 0 pos z) #x3fffff)
|
|
(set! (-> obj sprites 0 pos w) 0)
|
|
(set! (-> obj sprites 1 tex) (lookup-texture-by-id (new 'static 'texture-id :index #xc :page #xc93)))
|
|
(set! (-> obj sprites 1 scale-x) 0.2)
|
|
(set! (-> obj sprites 1 scale-y) 1.33)
|
|
(let ((v1-62 (-> obj sprites 1 color2)))
|
|
(set! (-> v1-62 0) 128)
|
|
(set! (-> v1-62 1) 128)
|
|
(set! (-> v1-62 2) 128)
|
|
(set! (-> v1-62 3) (the int (* 128.0 f30-0)))
|
|
)
|
|
(set! (-> obj sprites 1 pos z) #x3fffff)
|
|
(set! (-> obj sprites 1 pos w) 0)
|
|
(set! (-> obj sprites 2 tex) (lookup-texture-by-id (new 'static 'texture-id :index #x3e :page #xc93)))
|
|
(set! (-> obj sprites 2 scale-x) 1.0)
|
|
(set! (-> obj sprites 2 scale-y) 1.0)
|
|
(let ((v1-67 (-> obj sprites 2 color2)))
|
|
(set! (-> v1-67 0) sv-80)
|
|
(set! (-> v1-67 1) sv-96)
|
|
(set! (-> v1-67 2) sv-112)
|
|
(set! (-> v1-67 3) (the int (* 128.0 f30-0)))
|
|
)
|
|
(set! (-> obj sprites 2 pos z) #xffffff)
|
|
(set! (-> obj sprites 2 pos w) 0)
|
|
(set! (-> obj sprites 3 tex) (lookup-texture-by-id (new 'static 'texture-id :index #x3f :page #xc93)))
|
|
(set! (-> obj sprites 3 scale-x) 1.0)
|
|
(set! (-> obj sprites 3 scale-y) 1.0)
|
|
(let ((v1-72 (-> obj sprites 3 color2)))
|
|
(set! (-> v1-72 0) sv-80)
|
|
(set! (-> v1-72 1) sv-96)
|
|
(set! (-> v1-72 2) sv-112)
|
|
(set! (-> v1-72 3) (the int (* 128.0 f30-0)))
|
|
)
|
|
(set! (-> obj sprites 3 pos z) #xffffff)
|
|
(set! (-> obj sprites 3 pos w) 0)
|
|
(set-hud-piece-position! (-> obj sprites 0) s1-0 s2-0)
|
|
(set-hud-piece-position!
|
|
(-> obj sprites 1)
|
|
(+ s1-0 (the int (* bar-width (-> (the-as (pointer float) sv-128)))))
|
|
(+ s2-0 -4)
|
|
)
|
|
(set-hud-piece-position! (-> obj sprites 2) (- s1-0 sv-64) (+ s2-0 -4))
|
|
(set-hud-piece-position! (-> obj sprites 3) (+ sv-64 icon-right-offset s1-0) (+ s2-0 -4))
|
|
(with-dma-buffer-add-bucket ((sv-176 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id progress))
|
|
(draw (-> obj sprites 0) sv-176 (-> *level* default-level))
|
|
(draw-sprite2d-xy
|
|
sv-176
|
|
(+ s1-0 s0-0 (the int (* bar-width (-> (the-as (pointer float) sv-128)))))
|
|
(+ s2-0 7)
|
|
(- bar-width-max (the int (* bar-width (-> (the-as (pointer float) sv-128)))))
|
|
9
|
|
sv-160
|
|
)
|
|
(draw (-> obj sprites 1) sv-176 (-> *level* default-level))
|
|
(draw (-> obj sprites 2) sv-176 (-> *level* default-level))
|
|
(draw (-> obj sprites 3) sv-176 (-> *level* default-level))
|
|
)
|
|
(+! (-> s5-0 origin x) (the float s3-0))
|
|
(set-flags! s5-0 (font-flags kerning right large))
|
|
(print-game-text (string-format "~D%" (the int (* 100.0 (-> (the-as (pointer float) sv-128))))) s5-0 #f 44 (bucket-id progress))
|
|
(set-flags! s5-0 (font-flags kerning large))
|
|
)
|
|
(else
|
|
(set! sv-208 (-> obj value-to-modify))
|
|
(+! (-> s5-0 origin y) -8.0)
|
|
(when (text-language? german french)
|
|
(set-scale! s5-0 0.56)
|
|
)
|
|
(if (= (-> arg0 option-index) gp-0)
|
|
(draw-highlight (the int (+ -2.0 (-> s5-0 origin y))) 24 f30-0)
|
|
)
|
|
(print-game-text (lookup-text! *common-text* (-> obj name) #f) s5-0 #f 44 (bucket-id progress))
|
|
(set! sv-240 (new 'static 'rgba :r (the int (* 0.0 f30-0 (-> (the-as (pointer float) sv-208))))
|
|
:g (the int (* 0.0 f30-0 (-> (the-as (pointer float) sv-208))))
|
|
:b (the int (* 0.0 f30-0 (-> (the-as (pointer float) sv-208))))
|
|
:a (the int (* 128.0 f30-0))))
|
|
(set! (-> obj sprites 0 tex) (lookup-texture-by-id (new 'static 'texture-id :index #xb :page #xc93)))
|
|
(set! (-> obj sprites 0 scale-x) f28-0)
|
|
(set! (-> obj sprites 0 scale-y) 0.7)
|
|
(let ((v1-140 (-> obj sprites 0 color2)))
|
|
(set! (-> v1-140 0) 128)
|
|
(set! (-> v1-140 1) 128)
|
|
(set! (-> v1-140 2) 128)
|
|
(set! (-> v1-140 3) (the int (* 128.0 f30-0)))
|
|
)
|
|
(set! (-> obj sprites 0 pos z) #x3fffff)
|
|
(set! (-> obj sprites 0 pos w) 0)
|
|
(set! (-> obj sprites 1 tex) (lookup-texture-by-id (new 'static 'texture-id :index #xc :page #xc93)))
|
|
(set! (-> obj sprites 1 scale-x) 0.2)
|
|
(set! (-> obj sprites 1 scale-y) 1.33)
|
|
(let ((v1-145 (-> obj sprites 1 color2)))
|
|
(set! (-> v1-145 0) 128)
|
|
(set! (-> v1-145 1) 128)
|
|
(set! (-> v1-145 2) 128)
|
|
(set! (-> v1-145 3) (the int (* 128.0 f30-0)))
|
|
)
|
|
(set! (-> obj sprites 1 pos z) #x3fffff)
|
|
(set! (-> obj sprites 1 pos w) 0)
|
|
(set! (-> obj sprites 2 tex) (lookup-texture-by-id (new 'static 'texture-id :index #x3e :page #xc93)))
|
|
(set! (-> obj sprites 2 scale-x) 1.0)
|
|
(set! (-> obj sprites 2 scale-y) 1.0)
|
|
(let ((v1-150 (-> obj sprites 2 color2)))
|
|
(set! (-> v1-150 0) sv-80)
|
|
(set! (-> v1-150 1) sv-96)
|
|
(set! (-> v1-150 2) sv-112)
|
|
(set! (-> v1-150 3) (the int (* 128.0 f30-0)))
|
|
)
|
|
(set! (-> obj sprites 2 pos z) #xffffff)
|
|
(set! (-> obj sprites 2 pos w) 0)
|
|
(set! (-> obj sprites 3 tex) (lookup-texture-by-id (new 'static 'texture-id :index #x3f :page #xc93)))
|
|
(set! (-> obj sprites 3 scale-x) 1.0)
|
|
(set! (-> obj sprites 3 scale-y) 1.0)
|
|
(let ((v1-155 (-> obj sprites 3 color2)))
|
|
(set! (-> v1-155 0) sv-80)
|
|
(set! (-> v1-155 1) sv-96)
|
|
(set! (-> v1-155 2) sv-112)
|
|
(set! (-> v1-155 3) (the int (* 128.0 f30-0)))
|
|
)
|
|
(set! (-> obj sprites 3 pos z) #xffffff)
|
|
(set! (-> obj sprites 3 pos w) 0)
|
|
(set-hud-piece-position! (-> obj sprites 0) s1-0 s2-0)
|
|
(set-hud-piece-position!
|
|
(-> obj sprites 1)
|
|
(+ s1-0 (the int (* bar-width (-> (the-as (pointer float) sv-208)))))
|
|
(+ s2-0 -4)
|
|
)
|
|
(set-hud-piece-position! (-> obj sprites 2) (- s1-0 sv-64) (+ s2-0 -4))
|
|
(set-hud-piece-position! (-> obj sprites 3) (+ sv-64 icon-right-offset s1-0) (+ s2-0 -4))
|
|
(with-dma-buffer-add-bucket ((sv-256 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id progress))
|
|
(draw (-> obj sprites 0) sv-256 (-> *level* default-level))
|
|
(draw-sprite2d-xy
|
|
sv-256
|
|
(+ s1-0 s0-0 (the int (* bar-width (-> (the-as (pointer float) sv-208)))))
|
|
(+ s2-0 7)
|
|
(- bar-width-max (the int (* bar-width (-> (the-as (pointer float) sv-208)))))
|
|
9
|
|
sv-240
|
|
)
|
|
(draw (-> obj sprites 1) sv-256 (-> *level* default-level))
|
|
(draw (-> obj sprites 2) sv-256 (-> *level* default-level))
|
|
(draw (-> obj sprites 3) sv-256 (-> *level* default-level))
|
|
)
|
|
(+! (-> s5-0 origin x) (the float s3-0))
|
|
(set-flags! s5-0 (font-flags kerning right large))
|
|
(print-game-text (string-format "~D%" (the int (* 100.0 (-> (the-as (pointer float) sv-208))))) s5-0 #f 44 (bucket-id progress))
|
|
(set-flags! s5-0 (font-flags kerning large))
|
|
)
|
|
)
|
|
(if (zero? gp-0)
|
|
(draw-sound-options-decoration obj s5-0 f30-0 (text-id progress-root-sound-options) #f)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; TODO - some naming is bad here in a few spots, cleanup once i understand it more
|
|
(defmethod draw-option ((obj menu-missions-option) (progress progress) (font-ctx font-context) (arg3 int) (arg4 symbol))
|
|
(local-vars
|
|
(f0-50 float)
|
|
(font-alpha float)
|
|
(task-info-idx int)
|
|
(game-task-idx int)
|
|
(sv-32 int)
|
|
(sv-40 int)
|
|
(num-task-info int)
|
|
(default-y-origin-4x3 int)
|
|
(sv-256 float)
|
|
(line-height float)
|
|
(inprogress-task-info game-task-node-info)
|
|
(completed-task-info game-task-node-info)
|
|
(found-closed-task? symbol)
|
|
(hud-bounds hud-box)
|
|
(font-y-pos float)
|
|
(font-scale float)
|
|
)
|
|
(set! font-alpha (* 2.0 (- 0.5 (-> progress menu-transition))))
|
|
(set! task-info-idx 1)
|
|
(set! game-task-idx 0)
|
|
(set! sv-32 0)
|
|
(set! sv-40 0)
|
|
(set! num-task-info 0)
|
|
(set! default-y-origin-4x3 95)
|
|
(set! sv-256 (* 395.0 (-> progress sliding)))
|
|
(set! line-height (* 44.0 (-> progress sliding-height)))
|
|
(set! inprogress-task-info (new 'stack 'game-task-node-info))
|
|
(set! completed-task-info (new 'stack 'game-task-node-info))
|
|
(set! found-closed-task? #t)
|
|
(set! hud-bounds (new 'stack-no-clear 'hud-box))
|
|
(set! font-y-pos (-> font-ctx origin y))
|
|
(set! font-scale (-> font-ctx scale))
|
|
(set! (-> *progress-state* current-task-index) (length (-> *game-info* sub-task-list)))
|
|
(set! (-> *progress-state* current-line-index) -1)
|
|
(set! (-> *progress-state* current-task) (the-as uint -1))
|
|
(set! (-> *progress-state* first-closed-line-index) -1)
|
|
(set! (-> *progress-state* extra-text-state) -1)
|
|
(set! (-> *progress-state* num-open-tasks-found) 0)
|
|
(set! (-> *progress-state* num-closed-tasks-found) 0)
|
|
(if (< font-alpha 0.0)
|
|
(set! font-alpha (the-as float 0.0))
|
|
)
|
|
(set! (-> font-ctx alpha) font-alpha)
|
|
(set! (-> *game-info* mission-list 0) inprogress-task-info)
|
|
(set! (-> inprogress-task-info description) (text-id progress-missions-in-progress))
|
|
(set! (-> completed-task-info description) (text-id progress-missions-completed))
|
|
(while (< game-task-idx (length (-> *game-info* sub-task-list)))
|
|
(let ((task-info (find-mission-text-at-index game-task-idx))
|
|
(game-task-info-array (-> *game-info* mission-list))
|
|
)
|
|
(when (!= task-info #f)
|
|
(when (and (logtest? (-> task-info flags) (game-task-node-flag closed)) found-closed-task?)
|
|
(set! found-closed-task? (the-as symbol #f))
|
|
(set! (-> game-task-info-array task-info-idx) completed-task-info)
|
|
(set! task-info-idx (+ task-info-idx 1))
|
|
)
|
|
(set! (-> game-task-info-array task-info-idx) task-info)
|
|
(set! task-info-idx (+ task-info-idx 1))
|
|
)
|
|
)
|
|
(set! game-task-idx (+ game-task-idx 1))
|
|
)
|
|
(set! num-task-info task-info-idx)
|
|
(set! (-> *progress-state* total-num-tasks) task-info-idx)
|
|
(sort-task-node-result num-task-info)
|
|
(let ((font-ctx-1 font-ctx))
|
|
(set! (-> font-ctx-1 width) 395.0)
|
|
)
|
|
(set! (-> font-ctx origin x) 60.0)
|
|
(set! (-> font-ctx origin y) 80.0)
|
|
(set-color! font-ctx (font-color progress))
|
|
(when (not (-> *pc-settings* use-vis?))
|
|
;; added to fix widescreen
|
|
(*! (-> font-ctx width) (-> *pc-settings* aspect-ratio-reciprocal))
|
|
(set! (-> font-ctx origin x) (the float (adjust-game-x (-> font-ctx origin x))))
|
|
)
|
|
(let ((page-idx (-> obj page-index)))
|
|
(cond
|
|
((zero? page-idx)
|
|
(draw-missions-decoration obj font-ctx font-alpha (text-id progress-root-missions))
|
|
)
|
|
((= page-idx 1)
|
|
(draw-missions-decoration obj font-ctx font-alpha (text-id progress-root-missions))
|
|
)
|
|
)
|
|
)
|
|
(begin-scissor-missions hud-bounds)
|
|
(set-flags! font-ctx (font-flags kerning large))
|
|
(if (-> *pc-settings* use-vis?)
|
|
(+! (-> font-ctx origin x) 20.0)
|
|
(+! (-> font-ctx origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 20.0)))
|
|
(+! (-> font-ctx origin x) 20.0)
|
|
(case (get-aspect-ratio)
|
|
(('aspect16x9)
|
|
(set! (-> font-ctx origin y) 80.0)
|
|
)
|
|
(('aspect4x3)
|
|
(set! (-> font-ctx origin y) (the float default-y-origin-4x3))
|
|
)
|
|
)
|
|
(let ((font-ctx-4 font-ctx))
|
|
(set! (-> font-ctx-4 scale) font-scale)
|
|
)
|
|
(when (zero? (-> obj page-index))
|
|
(set! game-task-idx (-> obj task-line-index))
|
|
(set! task-info-idx 0)
|
|
(let ((y-offset (+ default-y-origin-4x3 44)))
|
|
(set! default-y-origin-4x3 y-offset)
|
|
(set! (-> font-ctx origin y) (the float (+ y-offset (the int line-height))))
|
|
)
|
|
(set! (-> font-ctx width) 340.0)
|
|
(set! (-> font-ctx height) 44.0)
|
|
(when (!= line-height 0.0)
|
|
(set! (-> *progress-state* missions-total-spacing) 0.0)
|
|
(dotimes (game-task-idx-2 game-task-idx)
|
|
(let* ((game-task-info-2 (-> *game-info* mission-list game-task-idx-2))
|
|
(task-text-id
|
|
(if (and (logtest? (-> game-task-info-2 flags) (game-task-node-flag closed))
|
|
(task-complete? *game-info* (-> game-task-info-2 task))
|
|
)
|
|
(-> *game-info* play-list (-> game-task-info-2 task) text-name)
|
|
(-> game-task-info-2 description)
|
|
)
|
|
)
|
|
(line-text (lookup-text! *common-text* task-text-id #f))
|
|
(line-padding 3.0)
|
|
(print-game-text-fn print-game-text)
|
|
)
|
|
(format (clear *temp-string*) "~S" line-text)
|
|
(set! (-> *progress-state* missions-total-spacing)
|
|
(+ line-padding
|
|
(print-game-text-fn *temp-string* font-ctx #t 44 (bucket-id progress))
|
|
(-> *progress-state* missions-total-spacing)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! default-y-origin-4x3 (- default-y-origin-4x3 (the int (-> *progress-state* missions-total-spacing))))
|
|
(cond
|
|
((< (-> progress sliding-height) 0.0)
|
|
(let* ((game-task-info-3 (-> *game-info* mission-list game-task-idx))
|
|
(task-text-id-2 (if (and (logtest? (-> game-task-info-3 flags) (game-task-node-flag closed))
|
|
(task-complete? *game-info* (-> game-task-info-3 task))
|
|
)
|
|
(-> *game-info* play-list (-> game-task-info-3 task) text-name)
|
|
(-> game-task-info-3 description)
|
|
)
|
|
)
|
|
(line-text-2 (lookup-text! *common-text* task-text-id-2 #f))
|
|
)
|
|
0.0
|
|
(let ((line-padding-2 3.0)
|
|
(print-game-text-fn-2 print-game-text)
|
|
)
|
|
(format (clear *temp-string*) "~S" line-text-2)
|
|
(let ((f0-36 (+ line-padding-2 (print-game-text-fn-2 *temp-string* font-ctx #t 44 (bucket-id progress)))))
|
|
(set! line-height (* (-> progress sliding-height) f0-36))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(let* ((s4-4 (-> *game-info* mission-list (+ game-task-idx -1)))
|
|
(a1-27
|
|
(if (and (logtest? (-> s4-4 flags) (game-task-node-flag closed)) (task-complete? *game-info* (-> s4-4 task)))
|
|
(-> *game-info* play-list (-> s4-4 task) text-name)
|
|
(-> s4-4 description)
|
|
)
|
|
)
|
|
(s4-5 (lookup-text! *common-text* a1-27 #f))
|
|
)
|
|
0.0
|
|
(let ((f30-2 3.0)
|
|
(s3-4 print-game-text)
|
|
)
|
|
(format (clear *temp-string*) "~S" s4-5)
|
|
(let ((f0-40 (+ f30-2 (s3-4 *temp-string* font-ctx #t 44 (bucket-id progress)))))
|
|
(set! line-height (* (-> progress sliding-height) f0-40))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> font-ctx origin y) (the float (+ default-y-origin-4x3 (the int line-height))))
|
|
(while (and (< task-info-idx num-task-info) (< task-info-idx (+ game-task-idx 10)))
|
|
(let* ((s4-6 (-> *game-info* mission-list task-info-idx))
|
|
(s3-5
|
|
(if (and (logtest? (-> s4-6 flags) (game-task-node-flag closed)) (task-complete? *game-info* (-> s4-6 task)))
|
|
(-> *game-info* play-list (-> s4-6 task) text-name)
|
|
(-> s4-6 description)
|
|
)
|
|
)
|
|
(s5-1 (lookup-text! *common-text* s3-5 #f))
|
|
)
|
|
0.0
|
|
(set! f0-50
|
|
(cond
|
|
((>= task-info-idx (+ game-task-idx -1))
|
|
(when (and (!= s3-5 381) (!= s3-5 380))
|
|
(let ((s3-6 print-game-text))
|
|
(format (clear *temp-string*) "~S" (lookup-text!
|
|
*common-text*
|
|
(if (logtest? (-> s4-6 flags) (game-task-node-flag closed))
|
|
(text-id progress-missions-icon-completed)
|
|
(text-id progress-missions-icon-todo)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
(s3-6 *temp-string* font-ctx #f 44 (bucket-id progress))
|
|
)
|
|
)
|
|
(if (-> *pc-settings* use-vis?)
|
|
(+! (-> font-ctx origin x) 20.0)
|
|
(+! (-> font-ctx origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 20.0)))
|
|
(let ((f30-3 3.0)
|
|
(s4-7 print-game-text)
|
|
)
|
|
(format (clear *temp-string*) "~S" s5-1)
|
|
(set! f0-50 (+ f30-3 (s4-7 *temp-string* font-ctx #f 44 (bucket-id progress))))
|
|
)
|
|
(if (-> *pc-settings* use-vis?)
|
|
(+! (-> font-ctx origin x) -20.0)
|
|
(+! (-> font-ctx origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) -20.0)))
|
|
f0-50
|
|
)
|
|
(else
|
|
(let ((f30-4 3.0)
|
|
(s4-8 print-game-text)
|
|
)
|
|
(format (clear *temp-string*) "~S" s5-1)
|
|
(+ f30-4 (s4-8 *temp-string* font-ctx #t 44 (bucket-id progress)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((v1-142 (+ default-y-origin-4x3 (the int f0-50))))
|
|
(set! default-y-origin-4x3 v1-142)
|
|
(set! (-> font-ctx origin y) (the float (+ v1-142 (the int line-height))))
|
|
)
|
|
(set! task-info-idx (+ task-info-idx 1))
|
|
)
|
|
(if (zero? (-> *progress-state* total-num-tasks))
|
|
(print-game-text
|
|
(lookup-text! *common-text* (text-id progress-missions-none) #f)
|
|
font-ctx
|
|
#f
|
|
44
|
|
(bucket-id progress)
|
|
)
|
|
)
|
|
)
|
|
(end-scissor-missions hud-bounds 1.0)
|
|
(draw-missions-up-down font-ctx)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
|
|
(defun draw-secret-list ((arg0 secret-item-option) (arg1 progress) (arg2 font-context) (arg3 int) (arg4 symbol) (arg5 float))
|
|
(let ((s4-0 (and arg4 (= arg3 1))))
|
|
380.0
|
|
270.0
|
|
(set! (-> arg2 origin x) 100.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> arg2 origin x) (the float (adjust-game-x (-> arg2 origin x)))))
|
|
(cond
|
|
((= s4-0 #t)
|
|
(cond
|
|
((= (-> arg0 can-toggle) 'auto)
|
|
)
|
|
((not (-> arg0 can-toggle))
|
|
(case (get-aspect-ratio)
|
|
(('aspect4x3)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> arg2 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) -25.0))
|
|
(+! (-> arg2 origin x) -25.0))
|
|
)
|
|
(('aspect16x9)
|
|
(+! (-> arg2 origin x) -10.0)
|
|
)
|
|
)
|
|
(when (text-language? german)
|
|
(set-scale! arg2 0.43)
|
|
)
|
|
(print-game-text
|
|
(lookup-text! *common-text* (text-id progress-secrets-go-to-title-screen) #f)
|
|
arg2
|
|
#f
|
|
44
|
|
(bucket-id progress)
|
|
)
|
|
)
|
|
((and (= (-> arg0 can-toggle) #t) (logtest? (-> *game-info* secrets) (-> arg0 flag)))
|
|
(set! (-> arg1 selected-option) #f)
|
|
(logclear! (-> *game-info* secrets) (-> arg0 flag))
|
|
)
|
|
((and (= (-> arg0 can-toggle) #t) (not (logtest? (-> *game-info* secrets) (-> arg0 flag))))
|
|
(logior! (-> *game-info* secrets) (-> arg0 flag))
|
|
(set! (-> arg1 selected-option) #f)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(set-color! arg2 (if (= arg3 1)
|
|
(progress-selected 0)
|
|
(font-color progress)))
|
|
(set! (-> arg2 origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
75
|
|
90
|
|
)
|
|
)
|
|
)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> arg2 origin x) (the float (adjust-game-x (-> arg2 origin x)))))
|
|
(cond
|
|
((logtest? (-> *game-info* sub-task-list (-> arg0 avail-after) flags) (game-task-node-flag closed))
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (-> arg0 name) #f)) arg2 #f 44 (bucket-id progress))
|
|
)
|
|
(else
|
|
(print-game-text (string-format "????????") arg2 #f 44 (bucket-id progress))
|
|
)
|
|
)
|
|
(set! (-> arg2 origin x) 360.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> arg2 origin x) (the float (adjust-game-x (-> arg2 origin x)))))
|
|
(set-color! arg2 (font-color progress))
|
|
)
|
|
)
|
|
(cond
|
|
((and (not s4-0) (not (logtest? (-> *game-info* purchase-secrets) (-> arg0 flag))))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> arg2 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 50))
|
|
(+! (-> arg2 origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
50
|
|
45
|
|
))))
|
|
(print-game-text (string-format "~D" (-> arg0 cost)) arg2 #f 44 (bucket-id progress))
|
|
)
|
|
((and (not s4-0) (= (-> arg0 can-toggle) #t) (logtest? (-> *game-info* secrets) (-> arg0 flag)))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> arg2 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 50))
|
|
(+! (-> arg2 origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
50
|
|
45
|
|
))))
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (text-id progress-on) #f)) arg2 #f 44 (bucket-id progress))
|
|
)
|
|
((and (not s4-0) (= (-> arg0 can-toggle) #t) (not (logtest? (-> *game-info* secrets) (-> arg0 flag))))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> arg2 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 50))
|
|
(+! (-> arg2 origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
50
|
|
45
|
|
))))
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (text-id progress-off) #f)) arg2 #f 44 (bucket-id progress))
|
|
)
|
|
((and (not s4-0) (!= (-> arg0 can-toggle) #t))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> arg2 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 80))
|
|
(+! (-> arg2 origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
80
|
|
70
|
|
))))
|
|
(set-flags! arg2 (font-flags kerning right large))
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (text-id progress-secrets-unlocked) #f)) arg2 #f 44 (bucket-id progress))
|
|
(set-flags! arg2 (font-flags kerning large))
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
|
|
(defun draw-cheat-list ((info pc-cheat-info) (progress progress) (font font-context) (draw-selected int) (selected? symbol) (sliding-y float))
|
|
(let ((selected-page? (and selected? (= draw-selected 1)))
|
|
(revealed? (logtest? (-> *pc-settings* cheats-revealed) (-> info flag)))
|
|
(purchased? (logtest? (-> *pc-settings* cheats-purchased) (-> info flag)))
|
|
(unlocked? (logtest? (-> *pc-settings* cheats-unlocked) (-> info flag)))
|
|
)
|
|
380.0
|
|
270.0
|
|
(set! (-> font origin x) 100.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> font origin x) (the float (adjust-game-x (-> font origin x)))))
|
|
(cond
|
|
((= selected-page? #t)
|
|
(set! (-> font origin y) 180.0)
|
|
(set-height! font 116)
|
|
(set-flags! font (font-flags kerning large middle middle-vert))
|
|
(case (get-aspect-ratio)
|
|
(('aspect4x3)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> font origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) -25.0))
|
|
(+! (-> font origin x) -25.0))
|
|
)
|
|
(('aspect16x9)
|
|
(+! (-> font origin x) -10.0)
|
|
)
|
|
)
|
|
(cond
|
|
((and purchased? (not unlocked?))
|
|
|
|
(let ((unlock-text (lookup-text! *common-text* (-> info unlock) #f)))
|
|
(print-game-text
|
|
(case (-> info unlock)
|
|
(((text-id progress-cheats-turbo-board-unlock))
|
|
(string-format unlock-text (lookup-text! *common-text* (text-id progress-missions-sewer-board) #f) (-> *pc-cheat-state* sewer-valve-target-seconds)))
|
|
(((text-id progress-cheats-health-bars-unlock))
|
|
(string-format unlock-text (-> *pc-cheat-state* kill-civvie-target)))
|
|
(((text-id progress-cheats-vehicle-health-bars-unlock))
|
|
(string-format unlock-text (-> *pc-cheat-state* kill-car-target)))
|
|
(else
|
|
unlock-text)
|
|
)
|
|
font #f 44 (bucket-id progress)))
|
|
)
|
|
((= (-> info can-toggle) 'auto)
|
|
)
|
|
(unlocked?
|
|
(print-game-text (lookup-text! *common-text* (text-id progress-secrets-go-to-title-screen) #f) font #f 44 (bucket-id progress))
|
|
)
|
|
)
|
|
(set-flags! font (font-flags kerning large))
|
|
)
|
|
(else
|
|
(set-color! font (if (= draw-selected 1)
|
|
(progress-selected 0)
|
|
(font-color progress)))
|
|
(set! (-> font origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
75
|
|
90
|
|
)
|
|
)
|
|
)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> font origin x) (the float (adjust-game-x (-> font origin x)))))
|
|
(cond
|
|
(revealed?
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (-> info name) #f)) font #f 44 (bucket-id progress))
|
|
)
|
|
(else
|
|
(print-game-text (string-format "????????") font #f 44 (bucket-id progress))
|
|
)
|
|
)
|
|
(set! (-> font origin x) 360.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> font origin x) (the float (adjust-game-x (-> font origin x)))))
|
|
(set-color! font (font-color progress))
|
|
)
|
|
)
|
|
(when (not selected-page?)
|
|
(cond
|
|
((and (= (-> info skill) 0) (not revealed?))
|
|
;; no cost, not discovered yet
|
|
;; draw nothing!
|
|
)
|
|
((or (not revealed?) (not purchased?))
|
|
;; has cost, but not discovered yet OR discovered, but needs more skill
|
|
;; show cost.
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> font origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 50))
|
|
(+! (-> font origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
50
|
|
45
|
|
))))
|
|
(print-game-text (string-format "~D" (-> info skill)) font #f 44 (bucket-id progress))
|
|
)
|
|
((not unlocked?)
|
|
;; revealed and can afford, but not unlocked
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> font origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 80))
|
|
(+! (-> font origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
80
|
|
70
|
|
))))
|
|
(set-flags! font (font-flags kerning right large))
|
|
(print-game-text (lookup-text! *common-text* (text-id progress-cheats-locked) #f) font #f 44 (bucket-id progress))
|
|
(set-flags! font (font-flags kerning large))
|
|
)
|
|
|
|
;; --- from here on, the cheat is fully unlocked! ---
|
|
((= (-> info can-toggle) #t)
|
|
;; simple on-off switch
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> font origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 50))
|
|
(+! (-> font origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
50
|
|
45
|
|
))))
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (if (logtest? (-> *pc-settings* cheats) (-> info flag)) (text-id progress-on) (text-id progress-off)) #f)) font #f 44 (bucket-id progress))
|
|
)
|
|
(else
|
|
;; automatically unlocked cheat, e.g. extra menu
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> font origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 80))
|
|
(+! (-> font origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
80
|
|
70
|
|
))))
|
|
(set-flags! font (font-flags kerning right large))
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (text-id progress-secrets-unlocked) #f)) font #f 44 (bucket-id progress))
|
|
(set-flags! font (font-flags kerning large))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0)
|
|
|
|
(defmethod draw-option ((this menu-secret-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
|
|
(let* (
|
|
(sv-16 (* 2.0 (- 0.5 (-> arg0 menu-transition))))
|
|
(hero? (logtest? (-> *game-info* secrets) (game-secrets hero-mode)))
|
|
(sv-24 (the int (-> *game-info* skill-total)))
|
|
(sv-32 395.0)
|
|
(sv-36 25.0)
|
|
(min-item (if (not hero?)
|
|
0
|
|
(-> this num-items)
|
|
)
|
|
)
|
|
(max-item (if (not hero?)
|
|
(-> this num-items)
|
|
(+ (-> this num-items) (-> this num-hero-items))
|
|
)
|
|
)
|
|
(sliding-y (* (-> arg0 sliding) sv-36))
|
|
(item (-> this item-index))
|
|
(prev (-> this prev-item-index))
|
|
(num-pc-items (-> *pc-cheats-list* length))
|
|
(sv-120 (new 'stack-no-clear 'hud-box))
|
|
(item-y 205)
|
|
(cheats-pad 1.3))
|
|
|
|
(if (< sv-16 0.0)
|
|
(set! sv-16 (the-as float 0.0))
|
|
)
|
|
(cond
|
|
((or (not (-> *bigmap* progress-minimap)) (< (-> this item-index) min-item) (< (+ max-item num-pc-items) (-> this item-index)))
|
|
(draw-busy-loading arg1)
|
|
)
|
|
(else
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(*! sv-32 (-> *pc-settings* aspect-ratio-reciprocal)))
|
|
(set! (-> this sprites 0 tex) (lookup-texture-by-id (new 'static 'texture-id :index #x5 :page #xc93)))
|
|
(set! (-> this sprites 0 flags) (the-as uint 4))
|
|
(set! (-> this sprites 0 scale-x) 0.64)
|
|
(set! (-> this sprites 0 scale-y) 0.64)
|
|
(let ((v1-32 (-> this sprites 0 color2)))
|
|
(set! (-> v1-32 0) 128)
|
|
(set! (-> v1-32 1) 128)
|
|
(set! (-> v1-32 2) 128)
|
|
(set! (-> v1-32 3) (the int (* 128.0 sv-16)))
|
|
)
|
|
(set! (-> this sprites 0 pos z) #xffffff)
|
|
(set! (-> this sprites 0 pos w) 0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set-hud-piece-position! (-> this sprites 0) (adjust-game-x 100.0) 128)
|
|
(set-hud-piece-position! (-> this sprites 0) 100 128))
|
|
(with-dma-buffer-add-bucket ((s3-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id progress)
|
|
)
|
|
(draw (-> this sprites 0) s3-0 (-> *level* default-level))
|
|
)
|
|
(set! (-> arg1 alpha) sv-16)
|
|
(set-flags! arg1 (font-flags kerning middle large))
|
|
(set-color! arg1 (font-color progress))
|
|
(set! (-> arg1 origin x) 59.0)
|
|
(set! (-> arg1 width) sv-32)
|
|
(set! (-> arg1 height) sv-36)
|
|
(set-scale! arg1 1.0)
|
|
(set! (-> arg1 origin y) 82.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> arg1 origin x) (the float (adjust-game-x (-> arg1 origin x)))))
|
|
(draw-decoration-secrets this arg1 sv-16 (text-id progress-root-secrets))
|
|
(set-scale! arg1 0.45)
|
|
(when (text-language? japanese korean) ;; og:preserve-this text-language patch
|
|
(set-scale! arg1 0.53)
|
|
)
|
|
(case (get-aspect-ratio)
|
|
(('aspect4x3)
|
|
(set-height! arg1 185)
|
|
(set! (-> arg1 origin y) 133.0)
|
|
)
|
|
(('aspect16x9)
|
|
(set-height! arg1 185)
|
|
(set! (-> arg1 origin y) 133.0)
|
|
)
|
|
)
|
|
(set-flags! arg1 (font-flags kerning large))
|
|
(set! (-> arg1 origin x) 100.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> arg1 origin x) (the float (adjust-game-x (-> arg1 origin x)))))
|
|
(print-game-text (string-format "x~D ~S" sv-24 (lookup-text! *common-text* (text-id progress-secrets-orb-label) #f)) arg1 #f 44 (bucket-id progress))
|
|
(set! (-> arg1 origin x) 100.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> arg1 origin x) (the float (adjust-game-x (-> arg1 origin x)))))
|
|
(set! (-> arg1 width) (if (= (get-aspect-ratio) 'aspect16x9) 332.0 366.0))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(*! (-> arg1 width) (-> *pc-settings* aspect-ratio-reciprocal)))
|
|
(begin-scissor-secret sv-120 arg0)
|
|
(case (get-aspect-ratio)
|
|
(('aspect16x9)
|
|
(set! item-y 195)
|
|
)
|
|
)
|
|
|
|
(cond
|
|
(arg3
|
|
(set! (-> arg1 origin y) (the float (+ (the int sliding-y) 25 item-y)))
|
|
(if (< item max-item)
|
|
(draw-secret-list (-> this secret-items item) arg0 arg1 1 arg3 sliding-y)
|
|
(draw-cheat-list (-> *pc-cheats-list* (- item max-item)) arg0 arg1 1 arg3 sliding-y))
|
|
)
|
|
((>= (- item prev) 0)
|
|
|
|
(draw-highlight (+ item-y 22) 22 sv-16)
|
|
(dotimes (i 7)
|
|
(let* ((this-item (+ item -3 i)))
|
|
(when (and (>= this-item min-item) (< this-item (+ max-item num-pc-items)))
|
|
(set! (-> arg1 origin y) (the float (+ (the int sliding-y) (+ -50 (* i 25)) item-y)))
|
|
(cond
|
|
((and (< this-item max-item) (= item max-item))
|
|
;; slide more when transitioning between secrets and cheats
|
|
(-! (-> arg1 origin y) (* (- 1.0 (-> arg0 sliding)) sv-36 cheats-pad))
|
|
)
|
|
((and (< this-item max-item) (> item max-item))
|
|
;; otherwise just offset, if we're in the cheats page.
|
|
(-! (-> arg1 origin y) (* cheats-pad 25))
|
|
)
|
|
((and (>= this-item max-item) (= item max-item))
|
|
;; slide more when transitioning
|
|
(+! (-> arg1 origin y) (* (-> arg0 sliding) sv-36 cheats-pad))
|
|
)
|
|
((and (>= this-item max-item) (< item max-item))
|
|
;; for the cheats - offset when not in them
|
|
(+! (-> arg1 origin y) (* cheats-pad 25))
|
|
)
|
|
)
|
|
(when (= this-item max-item)
|
|
;; also draw section header
|
|
(protect ((-> arg1 origin x) (-> arg1 origin y))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> arg1 origin x) (the float (adjust-game-x 100.0)))
|
|
(set! (-> arg1 origin x) (if (= (get-aspect-ratio) 'aspect4x3) 100.0 115.0)))
|
|
(-! (-> arg1 origin y) (+ (* (/ (- cheats-pad 1.0) 2) 25) 25))
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (text-id progress-cheats) #f)) arg1 #f 44 (bucket-id progress))
|
|
)
|
|
)
|
|
(if (< this-item max-item)
|
|
(draw-secret-list (-> this secret-items this-item) arg0 arg1 0 arg3 sliding-y)
|
|
(draw-cheat-list (-> *pc-cheats-list* (- this-item max-item)) arg0 arg1 0 arg3 sliding-y)))
|
|
))
|
|
)
|
|
(else
|
|
|
|
(draw-highlight (+ item-y 22) 22 sv-16)
|
|
(dotimes (i 7)
|
|
(let* ((this-item (+ item -2 i)))
|
|
(when (and (>= this-item min-item) (< this-item (+ max-item num-pc-items)))
|
|
(set! (-> arg1 origin y) (the float (+ (the int sliding-y) (+ -25 (* i 25)) item-y)))
|
|
(cond
|
|
((and (< this-item max-item) (= item (1- max-item)))
|
|
;; slide more when transitioning between secrets and cheats
|
|
(-! (-> arg1 origin y) (* (- (-> arg0 sliding)) sv-36 cheats-pad))
|
|
)
|
|
((and (< this-item max-item) (>= item max-item))
|
|
;; otherwise just offset, if we're in the cheats page.
|
|
(-! (-> arg1 origin y) (* cheats-pad 25))
|
|
)
|
|
((and (>= this-item max-item) (= item (1- max-item)))
|
|
;; slide more when transitioning
|
|
(+! (-> arg1 origin y) (* (- 1.0 (- (-> arg0 sliding))) sv-36 cheats-pad))
|
|
)
|
|
((and (>= this-item max-item) (< item max-item))
|
|
;; for the cheats - offset when not in them
|
|
(+! (-> arg1 origin y) (* cheats-pad 25))
|
|
)
|
|
)
|
|
(when (= this-item max-item)
|
|
;; also draw section header
|
|
(protect ((-> arg1 origin x) (-> arg1 origin y))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(set! (-> arg1 origin x) (the float (adjust-game-x 100.0)))
|
|
(set! (-> arg1 origin x) (if (= (get-aspect-ratio) 'aspect4x3) 100.0 115.0)))
|
|
(-! (-> arg1 origin y) (+ (* (/ (- cheats-pad 1.0) 2) 25) 25))
|
|
(print-game-text (string-format "~S" (lookup-text! *common-text* (text-id progress-cheats) #f)) arg1 #f 44 (bucket-id progress))
|
|
)
|
|
)
|
|
(if (< this-item max-item)
|
|
(draw-secret-list (-> this secret-items this-item) arg0 arg1 0 arg3 sliding-y)
|
|
(draw-cheat-list (-> *pc-cheats-list* (- this-item max-item)) arg0 arg1 0 arg3 sliding-y)))
|
|
))
|
|
)
|
|
)
|
|
(end-scissor-secret sv-120 1.0)
|
|
(draw-up-down arg1)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
))
|
|
|
|
|
|
(defmethod draw-option ((this menu-unlocked-menu-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
|
|
(let ((secrets (memcard-unlocked-secrets? #t))
|
|
(cheats (-> *pc-settings* cheats))
|
|
(alpha (* 2.0 (- 0.5 (-> arg0 menu-transition))))
|
|
)
|
|
(if (< alpha 0.0)
|
|
(set! alpha 0.0)
|
|
)
|
|
(set-scale! arg1 0.6)
|
|
(set-alpha! arg1 alpha)
|
|
(when (nonzero? (-> this name))
|
|
(cond
|
|
((= arg2 (-> arg0 option-index))
|
|
(progress-selected 0)
|
|
(draw-highlight (the int (+ 8.0 (-> arg1 origin y))) 24 alpha)
|
|
)
|
|
(else
|
|
(font-color progress)
|
|
)
|
|
)
|
|
(+! (-> arg1 origin y) 8.0)
|
|
|
|
(let ((available-text (lookup-text! *common-text* (-> this name) #f))
|
|
(locked-text (string-format "?????????")))
|
|
|
|
(case (-> this name)
|
|
(((text-id progress-main-secrets-scrapbook))
|
|
(if (logtest? secrets (game-secrets scrap-book-1))
|
|
(print-game-text available-text arg1 #f 44 (bucket-id progress))
|
|
(print-game-text locked-text arg1 #f 44 (bucket-id progress)))
|
|
)
|
|
(((text-id progress-main-secrets-mega-scrapbook))
|
|
(if (logtest? secrets (game-secrets scrap-book-2))
|
|
(print-game-text available-text arg1 #f 44 (bucket-id progress))
|
|
(print-game-text locked-text arg1 #f 44 (bucket-id progress)))
|
|
)
|
|
(((text-id progress-main-secrets-scrapbook-3))
|
|
(if (logtest? secrets (game-secrets scrap-book-3))
|
|
(print-game-text available-text arg1 #f 44 (bucket-id progress))
|
|
(print-game-text locked-text arg1 #f 44 (bucket-id progress)))
|
|
)
|
|
(((text-id progress-main-secrets-sceneplayer-1))
|
|
(if (logtest? secrets (game-secrets scene-player-1))
|
|
(print-game-text available-text arg1 #f 44 (bucket-id progress))
|
|
(print-game-text locked-text arg1 #f 44 (bucket-id progress)))
|
|
)
|
|
(((text-id progress-main-secrets-sceneplayer-2))
|
|
(if (logtest? secrets (game-secrets scene-player-2))
|
|
(print-game-text available-text arg1 #f 44 (bucket-id progress))
|
|
(print-game-text locked-text arg1 #f 44 (bucket-id progress)))
|
|
)
|
|
(((text-id progress-main-secrets-sceneplayer-3))
|
|
(if (logtest? secrets (game-secrets scene-player-3))
|
|
(print-game-text available-text arg1 #f 44 (bucket-id progress))
|
|
(print-game-text locked-text arg1 #f 44 (bucket-id progress)))
|
|
)
|
|
(((text-id progress-main-secrets-hero-mode))
|
|
(if (logtest? secrets (game-secrets hero-mode))
|
|
(print-game-text available-text arg1 #f 44 (bucket-id progress))
|
|
(print-game-text locked-text arg1 #f 44 (bucket-id progress)))
|
|
)
|
|
(((text-id progress-main-secrets-levelselect))
|
|
(if (logtest? secrets (game-secrets level-select))
|
|
(print-game-text available-text arg1 #f 44 (bucket-id progress))
|
|
(print-game-text locked-text arg1 #f 44 (bucket-id progress)))
|
|
)
|
|
(((text-id progress-music-player))
|
|
(if (pc-cheats? cheats music-player)
|
|
(print-game-text available-text arg1 #f 44 (bucket-id progress))
|
|
(print-game-text locked-text arg1 #f 44 (bucket-id progress)))
|
|
)
|
|
))
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
|
|
(defmacro adjust-x-if-needed (x)
|
|
"adjust an x screen coord if ps2 vis is disabled"
|
|
`(if (not (-> *pc-settings* use-vis?)) (adjust-game-x (the float ,x)) ,x))
|
|
|
|
|
|
(defmethod draw-option ((obj menu-memcard-slot-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
|
|
(local-vars
|
|
(sv-16 float)
|
|
(sv-20 int)
|
|
(sv-24 float)
|
|
(sv-28 float)
|
|
(sv-32 float)
|
|
(sv-36 float)
|
|
(sv-40 int)
|
|
(sv-48 int)
|
|
(sv-56 int)
|
|
(sv-64 int)
|
|
(sv-72 int)
|
|
(sv-80 int)
|
|
(sv-88 int)
|
|
(sv-96 string)
|
|
(sv-112 int)
|
|
)
|
|
(set! sv-16 (* 2.0 (- 0.5 (-> arg0 menu-transition))))
|
|
(set! sv-20 (-> arg0 option-index))
|
|
(set! sv-24 (-> arg1 origin x))
|
|
(set! sv-28 (-> arg1 origin y))
|
|
(set! sv-32 (-> arg1 width))
|
|
(set! sv-36 (-> arg1 height))
|
|
(set! sv-40 (if (= (get-aspect-ratio) 'aspect4x3)
|
|
300
|
|
305
|
|
)
|
|
)
|
|
(set! sv-48 (if (= (get-aspect-ratio) 'aspect4x3)
|
|
140
|
|
140
|
|
)
|
|
)
|
|
(set! sv-56 (if (= (get-aspect-ratio) 'aspect4x3)
|
|
64
|
|
48
|
|
)
|
|
)
|
|
(set! sv-64 69)
|
|
(set! sv-72 110)
|
|
(set! sv-80 176)
|
|
(set! sv-88 54)
|
|
(if (< sv-16 0.0)
|
|
(set! sv-16 (the-as float 0.0))
|
|
)
|
|
(set! (-> arg1 alpha) sv-16)
|
|
(cond
|
|
((not (-> *bigmap* progress-minimap))
|
|
(draw-busy-loading arg1)
|
|
(return 0)
|
|
)
|
|
(else
|
|
(when (not (-> *pc-settings* use-vis?))
|
|
(set! sv-40 (the int (adjust-game-x (the float sv-40))))
|
|
(set! sv-56 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) sv-56)))
|
|
)
|
|
(let ((s2-3 arg1))
|
|
(set! (-> s2-3 color) (if (= arg2 sv-20)
|
|
(the-as font-color (the-as int (progress-selected 0)))
|
|
(font-color progress)
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((= *save-options-title* (-> arg0 current-options))
|
|
(set! (-> arg1 origin y) 80.0)
|
|
(set! (-> arg1 height) 52.0)
|
|
(+! (-> arg1 origin y) (the float (* 42 (+ arg2 1))))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> arg1 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) -100.0))
|
|
(+! (-> arg1 origin x) -100.0))
|
|
)
|
|
(else
|
|
(case (get-aspect-ratio)
|
|
(('aspect16x9)
|
|
(set! (-> arg1 origin y) 74.0)
|
|
(set! (-> arg1 height) 42.0)
|
|
(+! (-> arg1 origin y) (the float (* 60 (+ arg2 1))))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> arg1 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) -90.0))
|
|
(+! (-> arg1 origin x) -90.0))
|
|
)
|
|
(('aspect4x3)
|
|
(set! (-> arg1 origin y) 74.0)
|
|
(set! (-> arg1 height) 42.0)
|
|
(+! (-> arg1 origin y) (the float (* 54 (+ arg2 1))))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> arg1 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) -90.0))
|
|
(+! (-> arg1 origin x) -90.0))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set-vector! (-> obj box 0 color) 64 128 128 (the int (* 128.0 sv-16)))
|
|
(when (= arg2 sv-20)
|
|
(cond
|
|
((!= *save-options-title* (-> arg0 current-options))
|
|
(case (get-aspect-ratio)
|
|
(('aspect16x9)
|
|
(set! sv-64 79)
|
|
(set! sv-72 110)
|
|
(set! sv-80 166)
|
|
(set! sv-88 62)
|
|
)
|
|
)
|
|
(when (not (-> *pc-settings* use-vis?))
|
|
(set! sv-64 (the int (adjust-game-x (the float sv-64))))
|
|
(set! sv-80 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) sv-80)))
|
|
)
|
|
(draw-savegame-box
|
|
obj
|
|
(the float sv-64)
|
|
(the float (+ sv-64 sv-80))
|
|
(the float (+ sv-72 (* sv-88 arg2)))
|
|
(the float (+ sv-72 (* sv-88 arg2)))
|
|
)
|
|
(when (!= arg2 3)
|
|
(draw-savegame-box
|
|
obj
|
|
(the float sv-64)
|
|
(the float (+ sv-64 sv-80))
|
|
(the float (+ sv-72 sv-88 (* sv-88 arg2)))
|
|
(the float (+ sv-72 sv-88 (* sv-88 arg2)))
|
|
)
|
|
(draw-savegame-box
|
|
obj
|
|
(the float (+ sv-64 sv-80))
|
|
(the float (+ sv-64 sv-80))
|
|
(the float (+ sv-72 sv-88 (* sv-88 arg2)))
|
|
(the float (+ (* sv-88 4) 2 sv-72))
|
|
)
|
|
)
|
|
(draw-savegame-box
|
|
obj
|
|
(the float (+ sv-64 sv-80))
|
|
(the float (+ sv-64 sv-80))
|
|
(the float sv-72)
|
|
(the float (+ sv-72 (* sv-88 arg2)))
|
|
)
|
|
(with-dma-buffer-add-bucket ((s1-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id particles)
|
|
)
|
|
(draw-sprite2d-xy
|
|
s1-0
|
|
sv-64
|
|
(+ sv-72 (* sv-88 arg2))
|
|
sv-80
|
|
sv-88
|
|
(new 'static 'rgba :r #x40 :g #x40 :b #x40 :a (the int (* 64.0 sv-16)))
|
|
)
|
|
)
|
|
)
|
|
((= *save-options-title* (-> arg0 current-options))
|
|
(set! sv-88 42)
|
|
(let ((v0-13 (get-aspect-ratio)))
|
|
(when (= v0-13 'aspect16x9)
|
|
(set! sv-64 79)
|
|
(set! sv-72 110)
|
|
(set! sv-80 166)
|
|
(set! sv-88 42)
|
|
(draw-savegame-box
|
|
obj
|
|
(the float (+ sv-64 sv-80))
|
|
(the float (+ sv-64 sv-80))
|
|
(the float (+ sv-72 sv-88 (* sv-88 arg2)))
|
|
(the float (+ sv-72 (* 6 sv-88)))
|
|
)
|
|
)
|
|
)
|
|
(when (not (-> *pc-settings* use-vis?))
|
|
(set! sv-64 (the int (adjust-game-x (the float sv-64))))
|
|
(set! sv-80 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) sv-80)))
|
|
)
|
|
(draw-savegame-box
|
|
obj
|
|
(the float sv-64)
|
|
(the float (+ sv-64 sv-80))
|
|
(the float (+ sv-72 (* sv-88 arg2)))
|
|
(the float (+ sv-72 (* sv-88 arg2)))
|
|
)
|
|
(when (!= arg2 4)
|
|
(draw-savegame-box
|
|
obj
|
|
(the float sv-64)
|
|
(the float (+ sv-64 sv-80))
|
|
(the float (+ sv-72 sv-88 (* sv-88 arg2)))
|
|
(the float (+ sv-72 sv-88 (* sv-88 arg2)))
|
|
)
|
|
(draw-savegame-box
|
|
obj
|
|
(the float (+ sv-64 sv-80))
|
|
(the float (+ sv-64 sv-80))
|
|
(the float (+ sv-72 sv-88 (* sv-88 arg2)))
|
|
(the float (+ (* 5 sv-88) 2 sv-72))
|
|
)
|
|
)
|
|
(draw-savegame-box
|
|
obj
|
|
(the float (+ sv-64 sv-80))
|
|
(the float (+ sv-64 sv-80))
|
|
(the float sv-72)
|
|
(the float (+ sv-72 (* sv-88 arg2)))
|
|
)
|
|
(with-dma-buffer-add-bucket ((s1-1 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id particles)
|
|
)
|
|
(draw-sprite2d-xy
|
|
s1-1
|
|
sv-64
|
|
(+ sv-72 (* sv-88 arg2))
|
|
sv-80
|
|
sv-88
|
|
(new 'static 'rgba :r #x40 :g #x40 :b #x40 :a (the int (* 64.0 sv-16)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((and *progress-save-info*
|
|
(= (-> *progress-save-info* formatted) 1)
|
|
(= (-> *progress-save-info* inited) 1)
|
|
(= (-> *progress-save-info* file arg2 present) 1)
|
|
)
|
|
(cond
|
|
((= arg2 sv-20)
|
|
(set-scale! arg1 0.8)
|
|
)
|
|
(else
|
|
(set-scale! arg1 0.6)
|
|
)
|
|
)
|
|
(set-flags! arg1 (font-flags kerning large))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> arg1 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 100))
|
|
(+! (-> arg1 origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
100
|
|
105
|
|
))))
|
|
(print-game-text (string-format "~S ~D" (lookup-text! *common-text* (text-id progress-unknown-game) #f) (+ arg2 1))
|
|
arg1 #f 44 (bucket-id progress))
|
|
(set-color! arg1 (font-color progress))
|
|
(set! (-> arg1 origin x) 250.0)
|
|
(set! (-> arg1 origin y) 110.0)
|
|
(set! (-> arg1 width) 170.0)
|
|
(set! (-> arg1 height) 190.0)
|
|
(when (not (-> *pc-settings* use-vis?))
|
|
(*! (-> arg1 width) (-> *pc-settings* aspect-ratio-reciprocal))
|
|
(set! (-> arg1 origin x) (the float (adjust-game-x (-> arg1 origin x)))))
|
|
(let ((s2-8 (-> *progress-save-info* file arg2 level-index)))
|
|
(when (= arg2 sv-20)
|
|
(let ((v1-199 (-> obj sprites 0 color2)))
|
|
(set! (-> v1-199 0) 128)
|
|
(set! (-> v1-199 1) 128)
|
|
(set! (-> v1-199 2) 128)
|
|
(set! (-> v1-199 3) (the int (* 128.0 sv-16)))
|
|
)
|
|
(let ((v1-200 (-> obj sprites 1 color2)))
|
|
(set! (-> v1-200 0) 128)
|
|
(set! (-> v1-200 1) 128)
|
|
(set! (-> v1-200 2) 128)
|
|
(set! (-> v1-200 3) (the int (* 128.0 sv-16)))
|
|
)
|
|
(set! (-> obj sprites 1 pos z) #xffffff)
|
|
(set! (-> obj sprites 1 pos w) 1)
|
|
(set! (-> obj sprites 1 tex) (lookup-texture-by-id (get-level-icon-id-01 s2-8)))
|
|
(set! (-> obj sprites 1 scale-x) 1.0)
|
|
(set! (-> obj sprites 1 scale-y) 1.0)
|
|
(set-hud-piece-position! (-> obj sprites 1) sv-40 sv-48)
|
|
(let ((v1-205 (-> obj sprites 2 color2)))
|
|
(set! (-> v1-205 0) 128)
|
|
(set! (-> v1-205 1) 128)
|
|
(set! (-> v1-205 2) 128)
|
|
(set! (-> v1-205 3) (the int (* 128.0 sv-16)))
|
|
)
|
|
(set! (-> obj sprites 2 pos z) #xffffff)
|
|
(set! (-> obj sprites 2 pos w) 1)
|
|
(set! (-> obj sprites 2 tex) (lookup-texture-by-id (get-level-icon-id-02 s2-8)))
|
|
(set! (-> obj sprites 2 scale-x) 1.0)
|
|
(set! (-> obj sprites 2 scale-y) 1.0)
|
|
(set-hud-piece-position! (-> obj sprites 2) (+ sv-40 sv-56) sv-48)
|
|
(let ((v1-211 (-> obj sprites 3 color2)))
|
|
(set! (-> v1-211 0) 128)
|
|
(set! (-> v1-211 1) 128)
|
|
(set! (-> v1-211 2) 128)
|
|
(set! (-> v1-211 3) (the int (* 128.0 sv-16)))
|
|
)
|
|
(set! (-> obj sprites 3 pos z) #xffffff)
|
|
(set! (-> obj sprites 3 pos w) 1)
|
|
(set! (-> obj sprites 3 tex) (lookup-texture-by-id (get-level-icon-id-03 s2-8)))
|
|
(set! (-> obj sprites 3 scale-x) 1.0)
|
|
(set! (-> obj sprites 3 scale-y) 1.0)
|
|
(set-hud-piece-position! (-> obj sprites 3) sv-40 (+ sv-48 64))
|
|
(let ((v1-217 (-> obj sprites 4 color2)))
|
|
(set! (-> v1-217 0) 128)
|
|
(set! (-> v1-217 1) 128)
|
|
(set! (-> v1-217 2) 128)
|
|
(set! (-> v1-217 3) (the int (* 128.0 sv-16)))
|
|
)
|
|
(set! (-> obj sprites 4 pos z) #xffffff)
|
|
(set! (-> obj sprites 4 pos w) 1)
|
|
(set! (-> obj sprites 4 tex) (lookup-texture-by-id (get-level-icon-id-04 s2-8)))
|
|
(set! (-> obj sprites 4 scale-x) 1.0)
|
|
(set! (-> obj sprites 4 scale-y) 1.0)
|
|
(set-hud-piece-position! (-> obj sprites 4) (+ sv-40 sv-56) (+ sv-48 64))
|
|
(with-dma-buffer-add-bucket ((s1-7 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id progress)
|
|
)
|
|
(draw (-> obj sprites 1) s1-7 (-> *level* default-level))
|
|
(draw (-> obj sprites 2) s1-7 (-> *level* default-level))
|
|
(draw (-> obj sprites 3) s1-7 (-> *level* default-level))
|
|
(draw (-> obj sprites 4) s1-7 (-> *level* default-level))
|
|
)
|
|
(set-scale! arg1 0.6)
|
|
(set! (-> arg1 origin x) 265.0)
|
|
(set! (-> arg1 origin y) 263.0)
|
|
(set! (-> arg1 width) 170.0)
|
|
(set! (-> arg1 height) 52.0)
|
|
(when (not (-> *pc-settings* use-vis?))
|
|
(*! (-> arg1 width) (-> *pc-settings* aspect-ratio-reciprocal))
|
|
(set! (-> arg1 origin x) (the float (adjust-game-x (-> arg1 origin x)))))
|
|
(set! (-> obj sprites 0 scale-x) 0.7)
|
|
(set! (-> obj sprites 0 scale-y) 0.7)
|
|
(set! (-> obj sprites 0 tex) (lookup-texture-by-id (new 'static 'texture-id :index #x4 :page #xc93)))
|
|
(set-hud-piece-position! (-> obj sprites 0) (adjust-x-if-needed 265) 263)
|
|
(with-dma-buffer-add-bucket ((s1-8 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id progress)
|
|
)
|
|
(draw (-> obj sprites 0) s1-8 (-> *level* default-level))
|
|
)
|
|
(+! (-> arg1 origin y) 1.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> arg1 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 28))
|
|
(+! (-> arg1 origin x) 28.0))
|
|
(let* ((v1-272 (-> *progress-save-info* file arg2 game-time0))
|
|
(v1-273 (logior (shl (-> *progress-save-info* file arg2 game-time1) 32) v1-272))
|
|
(s2-11 (/ (the-as int v1-273) #x107ac0))
|
|
)
|
|
(set! sv-112 (/ (mod (the-as int v1-273) #x107ac0) #x4650))
|
|
(print-game-text (string-format "~2,'0D:~2,'0D" s2-11 sv-112) arg1 #f 44 (bucket-id progress))
|
|
)
|
|
(set! (-> obj sprites 0 tex) (lookup-texture-by-id (new 'static 'texture-id :index #x6 :page #xc93)))
|
|
(set-hud-piece-position! (-> obj sprites 0) (adjust-x-if-needed 368) 263)
|
|
(with-dma-buffer-add-bucket ((s1-10 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id progress)
|
|
)
|
|
(draw (-> obj sprites 0) s1-10 (-> *level* default-level))
|
|
)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> arg1 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 100))
|
|
(+! (-> arg1 origin x) 100.0))
|
|
(print-game-text (string-format "~D%" (the int (-> *progress-save-info* file arg2 completion-percentage))) arg1 #f 44 (bucket-id progress))
|
|
(set! (-> obj sprites 0 tex) (lookup-texture-by-id (new 'static 'texture-id :index #x5 :page #xc93)))
|
|
(set-hud-piece-position! (-> obj sprites 0) (adjust-x-if-needed 368) 289)
|
|
(with-dma-buffer-add-bucket ((s1-12 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id progress)
|
|
)
|
|
(draw (-> obj sprites 0) s1-12 (-> *level* default-level))
|
|
)
|
|
(+! (-> arg1 origin y) 28.0)
|
|
(print-game-text (string-format "~D" (the int (-> *progress-save-info* file arg2 skill-count))) arg1 #f 44 (bucket-id progress))
|
|
(set! (-> obj sprites 0 scale-x) 0.6)
|
|
(set! (-> obj sprites 0 scale-y) 0.6)
|
|
(set! (-> obj sprites 0 tex) (lookup-texture-by-id (new 'static 'texture-id :index #x82 :page #xc93)))
|
|
(set-hud-piece-position! (-> obj sprites 0) (adjust-x-if-needed 253) 290)
|
|
(with-dma-buffer-add-bucket ((s1-14 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id progress)
|
|
)
|
|
(draw (-> obj sprites 0) s1-14 (-> *level* default-level))
|
|
)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> arg1 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) -100))
|
|
(+! (-> arg1 origin x) -100.0))
|
|
(print-game-text (string-format "~D" (the int (-> *progress-save-info* file arg2 gem-count))) arg1 #f 44 (bucket-id progress))
|
|
)
|
|
)
|
|
)
|
|
((and *progress-save-info*
|
|
(= (-> *progress-save-info* formatted) 1)
|
|
(= (-> *progress-save-info* inited) 1)
|
|
(zero? (-> *progress-save-info* file arg2 present))
|
|
)
|
|
(cond
|
|
((= arg2 sv-20)
|
|
(set-scale! arg1 0.8)
|
|
)
|
|
(else
|
|
(set-scale! arg1 0.6)
|
|
)
|
|
)
|
|
(set-flags! arg1 (font-flags kerning large))
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> arg1 origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 100))
|
|
(+! (-> arg1 origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
100
|
|
105
|
|
))))
|
|
(print-game-text
|
|
(lookup-text! *common-text* (text-id progress-slot-empty) #f)
|
|
arg1
|
|
#f
|
|
44
|
|
(bucket-id progress)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> arg1 origin x) sv-24)
|
|
(set! (-> arg1 origin y) sv-28)
|
|
(set! (-> arg1 width) sv-32)
|
|
(set! (-> arg1 height) sv-36)
|
|
(if (zero? arg2)
|
|
(draw-decoration-load-save obj arg1 sv-16 (if (= (-> arg0 current) 'select-load)
|
|
(text-id progress-select-file-to-load)
|
|
(text-id progress-select-file-to-save)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
|
|
(defmethod draw-option ((this menu-sub-menu-option) (arg0 progress) (fnt font-context) (arg2 int) (arg3 symbol))
|
|
(let ((alpha (* 2.0 (- 0.5 (-> arg0 menu-transition))))
|
|
(y (the int (+ -1.0 (-> fnt origin y))))
|
|
(height 22)
|
|
)
|
|
(if (< alpha 0.0)
|
|
(set! alpha 0.0)
|
|
)
|
|
(set! (-> fnt alpha) alpha)
|
|
(set-scale! fnt 0.6)
|
|
(cond
|
|
((= *title-pc* (-> arg0 current-options))
|
|
(set-scale! fnt 0.65)
|
|
(set! (-> fnt height) 25.0)
|
|
(set! height 28)
|
|
(-! y 4)
|
|
(when (memcard-unlocked-secrets? #f)
|
|
(-! (-> fnt origin y) 30.0)
|
|
(set! height 28)
|
|
(-! y 31)
|
|
)
|
|
)
|
|
((= *options-pc* (-> arg0 current-options))
|
|
(-! (-> fnt origin y) 20.0)
|
|
(set-scale! fnt 0.85)
|
|
(set! (-> fnt height) 40.0)
|
|
(set! height 37)
|
|
(-! y 28)
|
|
)
|
|
)
|
|
(when (nonzero? (-> this name))
|
|
(set-color! fnt (if (= arg2 (-> arg0 option-index))
|
|
(the font-color (the int (progress-selected 0)))
|
|
(font-color progress)
|
|
)
|
|
)
|
|
(cond
|
|
((= arg2 (-> arg0 option-index))
|
|
(set-color! fnt (progress-selected 0))
|
|
)
|
|
(else
|
|
(set-color! fnt (font-color progress))
|
|
)
|
|
)
|
|
(if (and (and (= arg2 (-> arg0 option-index)) (!= 298 (-> this name)))
|
|
(not (and (= (-> this name) (text-id progress-root-secrets))
|
|
(= *title-pc* (-> arg0 current-options))
|
|
(not (memcard-unlocked-secrets? #f))
|
|
(= (-> arg0 option-index) 3)
|
|
)
|
|
)
|
|
)
|
|
(draw-highlight y height alpha)
|
|
)
|
|
(cond
|
|
((= *save-options-title* (-> arg0 current-options))
|
|
(cond
|
|
((= (-> this name) (text-id progress-continue-without-saving))
|
|
(cond
|
|
((= arg2 (-> arg0 option-index))
|
|
(set-scale! fnt 0.5)
|
|
)
|
|
(else
|
|
(set-scale! fnt 0.45)
|
|
)
|
|
)
|
|
(+! (-> fnt origin y) -120.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(-! (-> fnt origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) 10))
|
|
(-! (-> fnt origin x) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
10
|
|
5
|
|
))))
|
|
(set! (-> fnt width) (the float (if (= (get-aspect-ratio) 'aspect4x3)
|
|
180
|
|
170
|
|
)
|
|
)
|
|
)
|
|
(set! (-> fnt height) 260.0)
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(*! (-> fnt width) (-> *pc-settings* aspect-ratio-reciprocal)))
|
|
(print-game-text (lookup-text! *common-text* (-> this name) #f) fnt #f 44 (bucket-id progress))
|
|
(when (= arg2 (-> arg0 option-index))
|
|
(let ((s4-1 69)
|
|
(s2-4 110)
|
|
(s3-1 176)
|
|
(s1-1 42)
|
|
)
|
|
(case (get-aspect-ratio)
|
|
(('aspect16x9)
|
|
(set! s4-1 79)
|
|
(set! s2-4 110)
|
|
(set! s3-1 166)
|
|
(set! s1-1 42)
|
|
(with-dma-buffer-add-bucket ((sv-16 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id progress)
|
|
)
|
|
(draw-sprite2d-xy
|
|
sv-16
|
|
s4-1
|
|
(+ (* s1-1 arg2) 8 s1-1 s2-4)
|
|
s3-1
|
|
(+ s1-1 -8)
|
|
(new 'static 'rgba :r #x40 :g #x40 :b #x40 :a (the int (* 64.0 alpha)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (not (-> *pc-settings* use-vis?))
|
|
(set! s4-1 (adjust-game-x (the float s4-1)))
|
|
(set! s3-1 (the int (* (-> *pc-settings* aspect-ratio-reciprocal) s3-1)))
|
|
)
|
|
(set-vector! (-> this box 0 color) 64 128 128 (the int (* 128.0 alpha)))
|
|
(draw-savegame-box
|
|
this
|
|
(the float s4-1)
|
|
(the float (+ s4-1 s3-1))
|
|
(the float (+ s2-4 (* s1-1 arg2)))
|
|
(the float (+ s2-4 (* s1-1 arg2)))
|
|
)
|
|
(draw-savegame-box
|
|
this
|
|
(the float (+ s4-1 s3-1))
|
|
(the float (+ s4-1 s3-1))
|
|
(the float s2-4)
|
|
(the float (+ s2-4 (* s1-1 arg2)))
|
|
)
|
|
(with-dma-buffer-add-bucket ((s0-3 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id particles)
|
|
)
|
|
(draw-sprite2d-xy
|
|
s0-3
|
|
s4-1
|
|
(+ s2-4 (* s1-1 arg2))
|
|
s3-1
|
|
(+ s1-1 8)
|
|
(new 'static 'rgba :r #x40 :g #x40 :b #x40 :a (the int (* 64.0 alpha)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(if (not (-> *pc-settings* use-vis?))
|
|
(+! (-> fnt origin x) (* (-> *pc-settings* aspect-ratio-reciprocal) -100.0))
|
|
(+! (-> fnt origin x) -100.0))
|
|
(set! (-> fnt origin y) (+ -35.0 (-> fnt origin y)))
|
|
)
|
|
)
|
|
)
|
|
((= *load-save-options* (-> arg0 current-options))
|
|
(+! (-> fnt origin x) -100.0)
|
|
(+! (-> fnt origin y) -25.0)
|
|
(print-menu-text (lookup-text! *common-text* (-> this name) #f) (-> this scale) fnt arg0)
|
|
)
|
|
((and (= *title-pc* (-> arg0 current-options))
|
|
(= (text-id progress-root-secrets) (-> this name))
|
|
(memcard-unlocked-secrets? #f)
|
|
)
|
|
(print-game-text (lookup-text! *common-text* (-> this name) #f) fnt #f 44 (bucket-id progress))
|
|
)
|
|
((!= (-> this name) (text-id progress-root-secrets))
|
|
(print-game-text (lookup-text! *common-text* (-> this name) #f) fnt #f 44 (bucket-id progress))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
|
|
|
|
(defmethod draw-option ((obj menu-icon-info-option) (arg0 progress) (arg1 font-context) (arg2 int) (arg3 symbol))
|
|
(set! (-> arg1 alpha) (- 1.0 (-> arg0 menu-transition)))
|
|
(set-color! arg1 (font-color progress))
|
|
(set-scale! arg1 0.5)
|
|
(set! (-> *bigmap* auto-save-icon-flag) #t)
|
|
(set! (-> obj sprites 0 tex) (lookup-texture-by-id (new 'static 'texture-id :index #x48 :page #x67a)))
|
|
(set! (-> obj sprites 0 scale-x) 1.0)
|
|
(set! (-> obj sprites 0 scale-y) 1.0)
|
|
(let ((v1-6 (-> obj sprites 0 color2)))
|
|
(set! (-> v1-6 0) 128)
|
|
(set! (-> v1-6 1) 128)
|
|
(set! (-> v1-6 2) 128)
|
|
(set! (-> v1-6 3) (the int (* 128.0 (- 1.0 (-> arg0 menu-transition)))))
|
|
)
|
|
(set! (-> obj sprites 0 pos z) #xffffff)
|
|
(set! (-> obj sprites 0 pos w) 0)
|
|
(set-hud-piece-position! (the-as hud-sprite (-> obj sprites)) (adjust-x-if-needed 240) 160)
|
|
(with-dma-buffer-add-bucket ((s3-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id progress)
|
|
)
|
|
(draw (-> obj sprites 0) s3-0 (-> *level* default-level))
|
|
)
|
|
(set-flags! arg1 (font-flags kerning middle middle-vert large))
|
|
(set! (-> arg1 origin x) 90.0)
|
|
(set! (-> arg1 origin y) 80.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))
|
|
)
|
|
(print-game-text
|
|
(lookup-text! *common-text* (text-id progress-autosave-explanation) #f)
|
|
arg1
|
|
#f
|
|
44
|
|
(bucket-id progress)
|
|
)
|
|
(+! (-> arg1 origin y) 115.0)
|
|
(set-height! arg1 95)
|
|
(print-game-text
|
|
(lookup-text! *common-text* (text-id progress-autosave-dont-remove) #f)
|
|
arg1
|
|
#f
|
|
44
|
|
(bucket-id progress)
|
|
)
|
|
(+! (-> arg1 origin y) 90.0)
|
|
(set-height! arg1 50)
|
|
(set-color! arg1 (progress-selected 0))
|
|
(draw-highlight (the int (+ 12.0 (-> arg1 origin y))) 24 (-> arg1 alpha))
|
|
(print-game-text
|
|
(lookup-text! *common-text* (text-id progress-unknown-continue) #f)
|
|
arg1
|
|
#f
|
|
44
|
|
(bucket-id progress)
|
|
)
|
|
0
|
|
(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 progress))
|
|
(set-flags! arg1 (font-flags kerning middle middle-vert large))
|
|
(print-game-text (lookup-text! *common-text* arg3 #f) arg1 #f 44 (bucket-id progress))
|
|
(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)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
(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 progress)
|
|
)
|
|
(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 #x40 :g #x80 :b #x80 :a (the int (* 64.0 alpha))))
|
|
)
|
|
)
|
|
|
|
|
|
(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 progress)
|
|
)
|
|
(draw-sprite2d-xy buf x y w h (new 'static 'rgba :r #x40 :g #x80 :b #x80 :a (the int (* 64.0 alpha))))
|
|
)
|
|
)
|
|
|
|
|
|
(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 progress))
|
|
(set! (-> font origin y) (+ start-y y-down))
|
|
(print-game-text (string-format "~33L~C" 162) font #f 44 (bucket-id progress))
|
|
)
|
|
)
|
|
0)
|
|
|
|
(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))))
|
|
|
|
|
|
(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))
|
|
)
|
|
(max! 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 progress))
|
|
(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 progress))
|
|
|
|
(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 (progress-selected 0))
|
|
(draw-up-down-aspect arg1 21.0 25.0))
|
|
(else
|
|
(set-color! arg1 (font-color progress)))
|
|
)
|
|
(print-game-text (string-format "~D" (-> *pc-settings* aspect-custom-x)) arg1 #f 44 (bucket-id progress))
|
|
(set-scale! arg1 0.55)
|
|
(set-color! arg1 (font-color progress))
|
|
(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 progress))
|
|
|
|
(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 (progress-selected 0))
|
|
(draw-up-down-aspect arg1 21.0 25.0))
|
|
(else
|
|
(set-color! arg1 (font-color progress)))
|
|
)
|
|
(print-game-text (string-format "~D" (-> *pc-settings* aspect-custom-y)) arg1 #f 44 (bucket-id progress))
|
|
(set-scale! arg1 0.55)
|
|
(set-color! arg1 (font-color progress))
|
|
(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 progress))
|
|
)
|
|
|
|
(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 progress))
|
|
)
|
|
)
|
|
(else
|
|
(set-scale! arg1 0.55)
|
|
(set-color! arg1 (font-color progress))
|
|
(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 progress))
|
|
)
|
|
)
|
|
|
|
(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 progress)))
|
|
|
|
(+! (-> arg1 origin y) 80.0)
|
|
(set-scale! arg1 0.45)
|
|
(set-color! arg1 (font-color progress))
|
|
(print-game-text (lookup-text! *common-text* (text-id progress-fps-disclaimer) #f) arg1 #f 44 (bucket-id progress))
|
|
|
|
(+! (-> 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 progress))
|
|
|
|
(+! (-> arg1 origin y) 58.0)
|
|
(set-scale! arg1 0.5)
|
|
(set-height! arg1 50)
|
|
(set-color! arg1 (progress-selected 0))
|
|
(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))
|
|
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))))
|
|
(height 22)
|
|
)
|
|
(if (< alpha 0.0)
|
|
(set! alpha 0.0)
|
|
)
|
|
(set! (-> fnt alpha) alpha)
|
|
(set-scale! fnt 0.65)
|
|
(set! (-> fnt height) 25.0)
|
|
(set! height 28)
|
|
(when (not (memcard-unlocked-secrets? #f))
|
|
(-! (-> fnt origin y) 45.0)
|
|
(-! y 49)
|
|
)
|
|
(when (memcard-unlocked-secrets? #f)
|
|
(-! (-> fnt origin y) 35.0)
|
|
(-! y 38)
|
|
)
|
|
(when (nonzero? (-> this name))
|
|
(set-color! fnt (if (= arg2 (-> progress option-index))
|
|
(the font-color (the int (progress-selected 0)))
|
|
(font-color progress)
|
|
)
|
|
)
|
|
(cond
|
|
((= arg2 (-> progress option-index))
|
|
(set-color! fnt (progress-selected 0))
|
|
(draw-highlight y height alpha)
|
|
)
|
|
(else
|
|
(set-color! fnt (font-color progress))
|
|
)
|
|
)
|
|
(if selected (set-color! fnt (font-color progress-force-selected)))
|
|
(print-game-text (lookup-text! *common-text* (-> this name) #f) fnt #f 44 (bucket-id progress))
|
|
(let ((choice (&-> *progress-state* yes-no-choice)) (str (the string #f)))
|
|
(set! str
|
|
(cond
|
|
(selected
|
|
(set-color! fnt (font-color progress-force-selected))
|
|
(when (memcard-unlocked-secrets? #f)
|
|
(draw-highlight (the int (+ 24.0 (-> fnt origin y))) 24 (-> fnt alpha))
|
|
(+! (-> fnt origin y) 24.0)
|
|
(set-scale! fnt 0.55)
|
|
)
|
|
(when (not (memcard-unlocked-secrets? #f))
|
|
(draw-highlight (the int (+ 23.0 (-> fnt origin y))) 23 (-> fnt alpha))
|
|
(+! (-> fnt origin y) 23.0)
|
|
(set-scale! fnt 0.60)
|
|
)
|
|
(cond
|
|
((-> choice 0)
|
|
(format
|
|
(clear *temp-string*)
|
|
"~33L~S~32L ~S"
|
|
(lookup-text! *common-text* (text-id progress-yes) #f)
|
|
(lookup-text! *common-text* (text-id progress-no) #f)
|
|
)
|
|
(set! str *temp-string*)
|
|
)
|
|
(else
|
|
(format
|
|
(clear *temp-string*)
|
|
"~32L~S ~33L~S~1L"
|
|
(lookup-text! *common-text* (text-id progress-yes) #f)
|
|
(lookup-text! *common-text* (text-id progress-no) #f)
|
|
)
|
|
(set! str *temp-string*)
|
|
)
|
|
)
|
|
str
|
|
)
|
|
(else
|
|
(clear *temp-string*)
|
|
)
|
|
)
|
|
)
|
|
(print-game-text str fnt #f 44 (bucket-id progress))
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
|
|
(defun begin-scissor-music-player ((box hud-box))
|
|
(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 progress)
|
|
)
|
|
(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 progress)
|
|
)
|
|
(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 progress))
|
|
(set-flags! arg1 (font-flags kerning middle middle-vert large))
|
|
(print-game-text (lookup-text! *common-text* arg3 #f) arg1 #f 44 (bucket-id progress))
|
|
(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)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
(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 progress))
|
|
(set! (-> font origin y) (+ 3.0 (-> box max y)))
|
|
(print-game-text (string-format "~33L~C" 162) font #f 44 (bucket-id progress))
|
|
)
|
|
)
|
|
0)
|
|
|
|
|
|
(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)
|
|
)))
|
|
|
|
|
|
(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)
|
|
)))
|
|
(max! 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 progress))
|
|
|
|
(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 (progress-selected 0))
|
|
(set-color! arg1 (font-color progress)))
|
|
(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 progress))
|
|
(print-game-text (lookup-text! *common-text* (text-id progress-music-player-locked) #f) arg1 #f 44 (bucket-id progress)))
|
|
)
|
|
(+! (-> 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 progress-force-selected))
|
|
))
|
|
(else
|
|
(set-color! arg1 (progress-selected 0))
|
|
(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 progress))
|
|
)
|
|
)
|
|
(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 progress))
|
|
(print-game-text (lookup-text! *common-text* (text-id progress-music-player-locked) #f) arg1 #f 44 (bucket-id progress)))
|
|
)
|
|
|
|
(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)
|
|
(max! (-> 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 progress))
|
|
(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 progress)))
|
|
(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 progress))
|
|
|
|
;; 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 progress))
|
|
)
|
|
)
|
|
(else
|
|
(print-game-text (lookup-text! *common-text* (text-id progress-music-player-no-track) #f) arg1 #f 44 (bucket-id progress))
|
|
)
|
|
)
|
|
;; 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 progress))
|
|
(+! (-> 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 progress))
|
|
(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 progress))
|
|
(print-game-text (lookup-text! *common-text* (-> danger-text-list (-> obj excitement)) #f) arg1 #f 44 (bucket-id progress))
|
|
(+! (-> 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 progress))
|
|
(with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id progress)
|
|
)
|
|
(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))
|
|
|
|
|
|
|
|
(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 progress))
|
|
(set-flags! arg1 (font-flags kerning middle large))
|
|
(print-game-text (lookup-text! *common-text* arg3 #f) arg1 #f 44 (bucket-id progress))
|
|
(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)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
(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 progress)
|
|
)
|
|
(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 progress)
|
|
)
|
|
(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))))
|
|
(max! 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 progress))
|
|
(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 (> (abs (- (-> 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 (progress-selected 0))
|
|
(set-color! font (font-color progress)))
|
|
(print-game-text (string-format "~D x ~D" this-w this-h) font #f 44 (bucket-id progress))
|
|
|
|
(+! (-> font origin y) text-height)
|
|
(1+! valid-index)
|
|
))
|
|
)
|
|
|
|
(when (fullscreen?)
|
|
;; draw extra hardcoded cases
|
|
(if (= valid-index (-> this selected-index))
|
|
(set-color! font (progress-selected 0))
|
|
(set-color! font (font-color progress)))
|
|
(print-game-text (string-format "~D x ~D" 512 416) font #f 44 (bucket-id progress))
|
|
(+! (-> font origin y) text-height)
|
|
(1+! valid-index)
|
|
|
|
(if (= valid-index (-> this selected-index))
|
|
(set-color! font (progress-selected 0))
|
|
(set-color! font (font-color progress)))
|
|
(print-game-text (string-format "~D x ~D" 512 208) font #f 44 (bucket-id progress))
|
|
(+! (-> 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 progress))
|
|
)
|
|
)
|
|
|
|
(end-scissor-resolution box 1.0)
|
|
)
|
|
|
|
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))
|
|
(draw-sprite2d-xy buf mx 0 1 416 (static-rgba #xff #xff #xff #x40))
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmacro spawn-draw-mouse-proc ()
|
|
`(process-spawn-function process :name "draw-mouse" :to *display-pool*
|
|
(lambda :behavior process ()
|
|
(loop
|
|
(suspend)
|
|
(draw-mouse))
|
|
)))
|
|
)
|