mirror of
https://github.com/open-goal/jak-project
synced 2026-05-27 08:09:29 -04:00
3826 lines
141 KiB
Common Lisp
3826 lines
141 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: progress.gc
|
|
;; name in dgo: progress
|
|
;; dgos: ENGINE, GAME
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(deftype progress-global-state (basic)
|
|
((aspect-ratio-choice symbol)
|
|
(video-mode-choice symbol)
|
|
(yes-no-choice symbol)
|
|
(on-off-choice symbol)
|
|
(which-slot int32)
|
|
(starting-state symbol)
|
|
(last-slot-saved int32)
|
|
(slider-backup float)
|
|
(language-backup language-enum)
|
|
(center-x-backup int32)
|
|
(center-y-backup int32)
|
|
(aspect-ratio-backup symbol)
|
|
(last-slider-sound time-frame)
|
|
(video-mode-timeout time-frame)
|
|
(progressive-mode-timeout time-frame)
|
|
(current-task-index int32)
|
|
(current-line-index int32)
|
|
(first-closed-line-index int32)
|
|
(extra-text-state int32)
|
|
(current-task uint8)
|
|
(num-open-tasks-found int32)
|
|
(num-closed-tasks-found int32)
|
|
(color-flash-counter int32)
|
|
(num-unlocked-secrets int32)
|
|
(game-options-item-selected int32)
|
|
(game-options-item-picked basic)
|
|
(game-options-last-move time-frame)
|
|
(game-options-vibrations symbol)
|
|
(game-options-subtitles symbol)
|
|
(game-options-language-index int32)
|
|
(game-options-subtitle-language-index int32)
|
|
(graphic-options-item-selected int32)
|
|
(graphic-options-item-picked symbol)
|
|
(graphic-options-last-move time-frame)
|
|
(graphic-options-aspect-ratio symbol)
|
|
(graphic-options-progressive-scan symbol)
|
|
(qr-options-item-selected int32)
|
|
(qr-options-item-picked basic)
|
|
(qr-options-last-move time-frame)
|
|
(qr-options-restart basic)
|
|
(qr-options-quit basic)
|
|
(total-num-tasks int32)
|
|
(scene-player-act int32)
|
|
(stereo-mode-backup int32)
|
|
(secrets-unlocked symbol)
|
|
(missions-total-spacing float)
|
|
(clear-screen symbol)
|
|
)
|
|
)
|
|
|
|
|
|
(define *progress-stack* (the-as (pointer uint8) (malloc 'global DPROCESS_STACK_SIZE)))
|
|
|
|
(define *progress-process* (the-as (pointer progress) #f))
|
|
|
|
(define *progress-state* (new 'static 'progress-global-state :which-slot -1 :last-slot-saved -1))
|
|
|
|
(kmemopen global "mc-slot-info")
|
|
|
|
(define *progress-save-info* (new 'global 'mc-slot-info))
|
|
|
|
(kmemclose)
|
|
|
|
(defun min-max-wrap-around ((arg0 int) (arg1 int) (arg2 int))
|
|
(let ((v1-2 (+ (- 1 arg1) arg2)))
|
|
(while (< arg0 arg1)
|
|
(+! arg0 v1-2)
|
|
)
|
|
(while (< arg2 arg0)
|
|
(set! arg0 (- arg0 v1-2))
|
|
)
|
|
)
|
|
arg0
|
|
)
|
|
|
|
(defun progress-intro-start ((hero-mode? symbol))
|
|
(set! (-> *game-info* mode) 'play)
|
|
(cond
|
|
;; Start a new game differently if speedrunning mode is active
|
|
((= (-> *pc-settings* speedrunner-mode?) #t)
|
|
(if hero-mode?
|
|
(set-category! *speedrun-info* (speedrun-category newgame-heromode))
|
|
(set-category! *speedrun-info* (speedrun-category newgame-normal)))
|
|
(start-run! *speedrun-info*))
|
|
;; start the game normally
|
|
(else
|
|
(if hero-mode?
|
|
(initialize! *game-info* 'game (the-as game-save #f) "intro-start-hero")
|
|
(initialize! *game-info* 'game (the-as game-save #f) "intro-start"))))
|
|
(set-master-mode 'game)
|
|
0)
|
|
|
|
(defmethod init-defaults ((this progress))
|
|
"Initialize default menu settings."
|
|
(set! (-> *progress-state* aspect-ratio-choice) (get-aspect-ratio))
|
|
(set! (-> *progress-state* video-mode-choice) (get-video-mode))
|
|
(set! (-> *progress-state* yes-no-choice) #f)
|
|
(set! (-> *progress-state* on-off-choice) #f)
|
|
(set! (-> *progress-state* color-flash-counter) 0)
|
|
(set! (-> *progress-state* game-options-item-selected) 0)
|
|
(set! (-> *progress-state* game-options-item-picked) #f)
|
|
(set! (-> *progress-state* game-options-vibrations) (-> *setting-control* user-default vibration))
|
|
(set! (-> *progress-state* game-options-subtitles) (-> *setting-control* user-default subtitle))
|
|
(set! (-> *progress-state* game-options-language-index)
|
|
(the-as int (-> *setting-control* user-default language))
|
|
)
|
|
(set! (-> *progress-state* game-options-subtitle-language-index)
|
|
(the-as int (-> *setting-control* user-default subtitle-language))
|
|
)
|
|
(set! (-> *progress-state* graphic-options-item-selected) 0)
|
|
(set! (-> *progress-state* graphic-options-item-picked) #f)
|
|
(set! (-> *progress-state* graphic-options-aspect-ratio) (get-aspect-ratio))
|
|
(set! (-> *progress-state* graphic-options-progressive-scan)
|
|
(-> *setting-control* user-default use-progressive-scan)
|
|
)
|
|
(set! (-> *progress-state* qr-options-item-selected) 0)
|
|
(set! (-> *progress-state* qr-options-item-picked) #f)
|
|
(set! (-> *progress-state* total-num-tasks) 0)
|
|
(set! (-> *progress-state* secrets-unlocked) #f)
|
|
(set! (-> *progress-state* clear-screen) #f)
|
|
(set! (-> this sliding) 0.0)
|
|
(set! (-> this sliding-height) 0.0)
|
|
(set! (-> this sliding-off) 1.0)
|
|
(set! (-> this scanlines-alpha) 0.0)
|
|
(set! (-> (the-as menu-on-off-game-vibrations-option (-> *game-options* options 0)) value-to-modify)
|
|
(&-> *setting-control* user-default vibration)
|
|
)
|
|
(set! (-> (the-as menu-on-off-game-subtitles-option (-> *game-options* options 1)) value-to-modify)
|
|
(&-> *setting-control* user-default subtitle)
|
|
)
|
|
(set! (-> (the-as menu-language-option (-> *game-options* options 2)) language-selection)
|
|
(-> *setting-control* user-current language)
|
|
)
|
|
(set! (-> (the-as menu-language-option (-> *game-options* options 2)) language-direction) #t)
|
|
(set! (-> (the-as menu-language-option (-> *game-options* options 2)) language-transition) #f)
|
|
(set! (-> (the-as menu-language-option (-> *game-options* options 2)) language-x-offset) 0)
|
|
(set! (-> (the-as menu-on-off-option (-> *game-options-japan* options 0)) value-to-modify)
|
|
(&-> *setting-control* user-default vibration)
|
|
)
|
|
(set! (-> (the-as menu-on-off-option (-> *game-options-demo* options 0)) value-to-modify)
|
|
(&-> *setting-control* user-default vibration)
|
|
)
|
|
(set! (-> (the-as menu-on-off-option (-> *graphic-options* options 2)) value-to-modify)
|
|
(&-> *setting-control* user-default use-progressive-scan)
|
|
)
|
|
(set! (-> (the-as menu-on-off-option (-> *graphic-title-options-pal* options 2)) value-to-modify)
|
|
(&-> *setting-control* user-default use-progressive-scan)
|
|
)
|
|
(set! (-> (the-as menu-slider-option (-> *sound-options* options 0)) value-to-modify)
|
|
(&-> *setting-control* user-default sfx-volume)
|
|
)
|
|
(set! (-> (the-as menu-slider-option (-> *sound-options* options 1)) value-to-modify)
|
|
(&-> *setting-control* user-default music-volume)
|
|
)
|
|
(set! (-> (the-as menu-slider-option (-> *sound-options* options 2)) value-to-modify)
|
|
(&-> *setting-control* user-default dialog-volume)
|
|
)
|
|
(set! (-> (the-as menu-missions-option (-> *missions-options* options 0)) task-line-index) 0)
|
|
(set-setting-by-param *setting-control* 'extra-bank '((force2 menu1)) 0 0)
|
|
)
|
|
|
|
(deftype hud-ring-cell (process-drawable)
|
|
((parent (pointer progress) :override)
|
|
(joint-idx int32)
|
|
(init-angle degrees)
|
|
(graphic-index int32)
|
|
)
|
|
(:state-methods
|
|
idle
|
|
)
|
|
)
|
|
|
|
|
|
(defbehavior hud-ring-cell-init-by-other hud-ring-cell ((arg0 int) (arg1 float) (arg2 int))
|
|
(set! (-> self root) (new 'process 'trsqv))
|
|
(initialize-skeleton
|
|
self
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-hud-ring-part" (the-as (pointer uint32) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
(logclear! (-> self mask) (process-mask actor-pause))
|
|
(set! (-> self joint-idx) arg0)
|
|
(set! (-> self init-angle) arg1)
|
|
(set! (-> self graphic-index) arg2)
|
|
(set! (-> self root trans quad) (-> self parent 0 root trans quad))
|
|
(quaternion-copy! (-> self root quat) (-> self parent 0 root quat))
|
|
(quaternion-normalize! (-> self root quat))
|
|
(set! (-> self root scale quad) (-> self parent 0 root scale quad))
|
|
(let ((gp-1 (quaternion-vector-angle! (new 'stack-no-clear 'quaternion) *z-vector* (-> self init-angle))))
|
|
(quaternion-normalize! gp-1)
|
|
(quaternion*! (-> self root quat) (-> self root quat) gp-1)
|
|
)
|
|
(quaternion-normalize! (-> self root quat))
|
|
(set! (-> self draw color-mult x) 0.8)
|
|
(set! (-> self draw color-mult y) 0.8)
|
|
(set! (-> self draw color-mult z) 0.8)
|
|
(logior! (-> self draw global-effect) (draw-control-global-effect title-light))
|
|
(logior! (-> self draw status) (draw-control-status hud))
|
|
(setup-masks (-> self draw) 1 0)
|
|
(setup-masks (-> self draw) 0 2046)
|
|
(cond
|
|
((and (= *cheat-mode* #f) (= *kernel-boot-message* 'kiosk))
|
|
(setup-masks
|
|
(-> self draw)
|
|
(the-as
|
|
int
|
|
(-> *hud-ring-kiosk-graphic-remap*
|
|
(mod (+ (-> self graphic-index) (-> self parent 0 graphic-index)) (-> *hud-ring-kiosk-graphic-remap* length))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
)
|
|
((and (= *cheat-mode* #f) (demo?))
|
|
(setup-masks
|
|
(-> self draw)
|
|
(the-as
|
|
int
|
|
(-> *hud-ring-demo-graphic-remap*
|
|
(mod (+ (-> self graphic-index) (-> self parent 0 graphic-index)) (-> *hud-ring-kiosk-graphic-remap* length))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
)
|
|
(else
|
|
(setup-masks
|
|
(-> self draw)
|
|
(the-as
|
|
int
|
|
(-> *hud-ring-graphic-remap*
|
|
(mod (+ (-> self graphic-index) (-> self parent 0 graphic-index)) (-> *hud-ring-graphic-remap* length))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
(go-virtual idle)
|
|
)
|
|
|
|
(defstate idle (hud-ring-cell)
|
|
:virtual #t
|
|
:code (behavior ()
|
|
(until #f
|
|
(ja :num-func num-func-identity :frame-num 0.0)
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
:post (behavior ()
|
|
(vector<-cspace!
|
|
(-> self root trans)
|
|
(-> (the-as progress (-> self parent 0)) node-list data (-> self joint-idx))
|
|
)
|
|
(when (-> (the-as progress (-> self parent 0)) main-menu)
|
|
(setup-masks (-> self draw) 0 2046)
|
|
(cond
|
|
((and (= *cheat-mode* #f) (= *kernel-boot-message* 'kiosk))
|
|
(setup-masks
|
|
(-> self draw)
|
|
(the-as int (-> *hud-ring-kiosk-graphic-remap*
|
|
(mod
|
|
(+ (-> self graphic-index) (-> (the-as progress (-> self parent 0)) graphic-index))
|
|
(-> *hud-ring-kiosk-graphic-remap* length)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
)
|
|
((and (= *cheat-mode* #f) (demo?))
|
|
(setup-masks
|
|
(-> self draw)
|
|
(the-as int (-> *hud-ring-demo-graphic-remap*
|
|
(mod
|
|
(+ (-> self graphic-index) (-> (the-as progress (-> self parent 0)) graphic-index))
|
|
(-> *hud-ring-kiosk-graphic-remap* length)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
)
|
|
(else
|
|
(setup-masks
|
|
(-> self draw)
|
|
(the-as int (-> *hud-ring-graphic-remap*
|
|
(mod
|
|
(+ (-> self graphic-index) (-> (the-as progress (-> self parent 0)) graphic-index))
|
|
(-> *hud-ring-graphic-remap* length)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (= (-> self init-angle) 0.0)
|
|
(cond
|
|
((= (-> (the-as progress (-> self parent 0)) ring-angle)
|
|
(-> (the-as progress (-> self parent 0)) ring-want-angle)
|
|
)
|
|
(set! (-> self draw color-mult x) 1.2)
|
|
(set! (-> self draw color-mult y) 1.2)
|
|
(set! (-> self draw color-mult z) 1.2)
|
|
)
|
|
(else
|
|
(set! (-> self draw color-mult x) 0.8)
|
|
(set! (-> self draw color-mult y) 0.8)
|
|
(set! (-> self draw color-mult z) 0.8)
|
|
)
|
|
)
|
|
)
|
|
(let* ((t9-6 quaternion-vector-angle!)
|
|
(a0-8 (new 'stack-no-clear 'quaternion))
|
|
(a1-26 *z-vector*)
|
|
(f0-8 (-> self init-angle))
|
|
(f1-2 (-> (the-as progress (-> self parent 0)) ring-angle))
|
|
(gp-0 (t9-6 a0-8 a1-26 (+ f0-8 (- f1-2 (* (the float (the int (/ f1-2 6553.6))) 6553.6)))))
|
|
)
|
|
(quaternion-normalize! gp-0)
|
|
(quaternion-copy! (-> self root quat) (-> (the-as progress (-> self parent 0)) root quat))
|
|
(quaternion-normalize! (-> self root quat))
|
|
(quaternion*! (-> self root quat) (-> self root quat) gp-0)
|
|
)
|
|
(quaternion-normalize! (-> self root quat))
|
|
(ja-post)
|
|
)
|
|
)
|
|
|
|
(defbehavior progress-init-by-other progress ((arg0 symbol))
|
|
(hide-hud #f)
|
|
(disable-level-text-file-loading)
|
|
(logclear! (-> self mask) (process-mask menu progress actor-pause))
|
|
(add-setting! 'process-mask 'set 0.0 (process-mask progress))
|
|
(set! (-> self clock) (-> *display* real-clock))
|
|
(apply-settings *setting-control*)
|
|
(set-blackout-frames 0)
|
|
(set! *pause-lock* #f)
|
|
(set! (-> self root) (new 'process 'trsqv))
|
|
(matrix->quaternion (-> self root quat) (-> *math-camera* inv-camera-rot))
|
|
(let ((a2-2 (quaternion-vector-angle! (new 'stack-no-clear 'quaternion) *y-vector* 32768.0)))
|
|
(quaternion*! (-> self root quat) (-> self root quat) a2-2)
|
|
)
|
|
(quaternion-normalize! (-> self root quat))
|
|
(quaternion-copy! (-> self init-quat) (-> self root quat))
|
|
(set-vector! (-> self root scale) 0.09 0.09 0.09 1.0)
|
|
(initialize-skeleton
|
|
self
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-hud-ring" (the-as (pointer uint32) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
(logior! (-> self draw global-effect) (draw-control-global-effect title-light))
|
|
(logior! (-> self skel status) (joint-control-status sync-math))
|
|
(set! (-> self state-pos) 0)
|
|
(set! (-> self menu-transition) 1.0)
|
|
(set! (-> self anim-frame) 0.0)
|
|
(set! (-> self pos-transition) 1.0)
|
|
(init-defaults self)
|
|
(set-next-state self arg0 0)
|
|
(set! (-> *progress-state* starting-state) (-> self next))
|
|
(set! (-> self current) (-> self next))
|
|
(if (= arg0 'main)
|
|
(set! (-> self next) 'none)
|
|
)
|
|
(set! (-> self ring-angle) 0.0)
|
|
(set! (-> self ring-want-angle) 0.0)
|
|
(set! (-> self option-index) 0)
|
|
(set! (-> self want-option-index) 0)
|
|
(set! (-> self graphic-index) 0)
|
|
(set! (-> self swing) 0.0)
|
|
(set! (-> self main-menu) #f)
|
|
(set-menu-options self (-> self current))
|
|
(logior! (-> self draw status) (draw-control-status hud))
|
|
(let ((f30-0 -6571.804))
|
|
(process-spawn hud-ring-cell 15 (* 0.0 f30-0) 0 :to self)
|
|
(process-spawn hud-ring-cell 9 f30-0 1 :to self)
|
|
(process-spawn hud-ring-cell 8 (* 2.0 f30-0) 2 :to self)
|
|
(process-spawn hud-ring-cell 7 (* 3.0 f30-0) 3 :to self)
|
|
(process-spawn hud-ring-cell 6 (* 4.0 f30-0) 4 :to self)
|
|
(process-spawn hud-ring-cell 16 (* -5.0 f30-0) 5 :to self)
|
|
(process-spawn hud-ring-cell 14 (* -4.0 f30-0) 6 :to self)
|
|
(process-spawn hud-ring-cell 13 (* -3.0 f30-0) 7 :to self)
|
|
(process-spawn hud-ring-cell 12 (* -2.0 f30-0) 8 :to self)
|
|
(process-spawn hud-ring-cell 11 (* -1.0 f30-0) 9 :to self)
|
|
)
|
|
(enable-drawing *bigmap*)
|
|
(go-virtual come-in)
|
|
)
|
|
|
|
(defun set-ring-position ((arg0 progress))
|
|
(let ((s3-0 (new-stack-vector0))
|
|
(s4-0 (new 'stack-no-clear 'vector))
|
|
(s5-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(+! (-> s3-0 y) -8.0)
|
|
(case (get-aspect-ratio)
|
|
(('aspect4x3)
|
|
(position-in-front-of-screen! s4-0 12288.0 s3-0)
|
|
(position-in-front-of-screen! s5-0 -4096.0 s3-0)
|
|
)
|
|
(else
|
|
(position-in-front-of-screen! s4-0 16384.0 s3-0)
|
|
(position-in-front-of-screen! s5-0 -18022.4 s3-0)
|
|
)
|
|
)
|
|
(vector-! s5-0 s5-0 s4-0)
|
|
(set! (-> arg0 root trans x) (+ (-> s4-0 x) (* (-> arg0 pos-transition) (-> s5-0 x))))
|
|
(set! (-> arg0 root trans y) (+ (-> s4-0 y) (* (-> arg0 pos-transition) (-> s5-0 y))))
|
|
(set! (-> arg0 root trans z) (+ (-> s4-0 z) (* (-> arg0 pos-transition) (-> s5-0 z))))
|
|
)
|
|
)
|
|
|
|
(defun activate-progress ((arg0 process) (arg1 symbol))
|
|
(when *target*
|
|
(when (progress-allowed?)
|
|
(when (nonzero? (-> *progress-state* video-mode-timeout))
|
|
(set! (-> *progress-state* video-mode-timeout) 0)
|
|
(set! (-> *progress-state* video-mode-choice) 'pal)
|
|
(set! (-> *setting-control* user-default video-mode) (-> *progress-state* video-mode-choice))
|
|
)
|
|
(when (nonzero? (-> *progress-state* progressive-mode-timeout))
|
|
(set! (-> *progress-state* progressive-mode-timeout) 0)
|
|
(set! (-> *setting-control* user-default use-progressive-scan) #f)
|
|
(set! (-> *progress-state* graphic-options-progressive-scan) #f)
|
|
(set-progressive-scan #f)
|
|
)
|
|
(cond
|
|
(*progress-process*
|
|
(deactivate (-> *progress-process* 0))
|
|
(set! (-> *blit-displays-work* menu-mode) #t)
|
|
(set! *progress-process* (process-spawn progress arg1 :to arg0 :stack (&-> *progress-stack* DPROCESS_STACK_SIZE)))
|
|
(set-master-mode 'progress)
|
|
)
|
|
(else
|
|
(set! *progress-process* (process-spawn progress arg1 :to arg0 :stack (&-> *progress-stack* DPROCESS_STACK_SIZE)))
|
|
(set-master-mode 'progress)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod deactivate ((this progress))
|
|
(remove-setting-by-arg0 *setting-control* 'extra-bank)
|
|
(disable-drawing *bigmap*)
|
|
(set! (-> *blit-displays-work* menu-mode) #f)
|
|
(set! *progress-process* (the-as (pointer progress) #f))
|
|
(enable-level-text-file-loading)
|
|
(persist-with-delay *setting-control* 'allow-progress (seconds 0.1) 'allow-progress #f 0.0 0)
|
|
(persist-with-delay *setting-control* 'allow-pause (seconds 0.1) 'allow-pause #f 0.0 0)
|
|
(call-parent-method this)
|
|
(none)
|
|
)
|
|
|
|
(defun deactivate-progress ()
|
|
(if *progress-process*
|
|
(deactivate (-> *progress-process* 0))
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defun hide-progress-screen ()
|
|
(if (and *progress-process* *progress-state* (!= (-> *progress-state* starting-state) 'title))
|
|
(set-next-state (-> *progress-process* 0) 'go-away 0)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod gone? ((this progress))
|
|
(and *progress-process*
|
|
(-> *progress-process* 0 next-state)
|
|
(= (-> *progress-process* 0 next-state name) 'gone)
|
|
)
|
|
)
|
|
|
|
(defun progress-allowed? ()
|
|
(not (or (-> *setting-control* user-current talking)
|
|
(-> *setting-control* user-current movie)
|
|
(movie?)
|
|
(handle->process (-> *game-info* pov-camera-handle))
|
|
(handle->process (-> *game-info* other-camera-handle))
|
|
(< (-> *display* base-clock frame-counter) (-> *game-info* letterbox-time))
|
|
(< (-> *display* base-clock frame-counter) (-> *game-info* blackout-time))
|
|
(!= (-> *setting-control* user-current bg-a) 0.0)
|
|
(!= (-> *setting-control* user-current bg-a-force) 0.0)
|
|
(not (-> *setting-control* user-current allow-progress))
|
|
(or (and (handle->process (-> *game-info* auto-save-proc))
|
|
(not (send-event (handle->process (-> *game-info* auto-save-proc)) 'progress-allowed?))
|
|
)
|
|
(not *target*)
|
|
(= *cheat-mode* 'camera)
|
|
(= *master-mode* 'freeze)
|
|
*master-exit*
|
|
(not *common-text*)
|
|
(< (memory-free *nk-dead-pool*) #x8000)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod can-go-back? ((this progress))
|
|
(and (= (-> this menu-transition) 0.0)
|
|
(not (-> this selected-option))
|
|
(!= (-> this current) 'loading)
|
|
(!= (-> this current) 'saving)
|
|
(!= (-> this current) 'formatting)
|
|
(!= (-> this current) 'creating)
|
|
(!= (-> this current) 'error-disc-removed)
|
|
(!= (-> this current) 'error-reading)
|
|
(!= (-> this current) 'card-removed)
|
|
(!= (-> this current) 'error-auto-saving)
|
|
(!= (-> this current) 'title)
|
|
(!= (-> this current) 'insufficient-space)
|
|
(!= (-> this current) 'secrets-insufficient-space)
|
|
(!= (-> this current) 'no-memory-card)
|
|
(!= (-> this current) 'icon-info)
|
|
(!= (-> this current) 'insert-card)
|
|
(!= (-> this current) 'progressive-mode-ok)
|
|
(!= (-> this current) 'video-mode-ok)
|
|
(!= (-> this current) 'progressive-mode-warning)
|
|
(!= (-> this current) 'video-mode-warning)
|
|
)
|
|
)
|
|
|
|
;; WARN: Return type mismatch symbol vs none.
|
|
(defun menu-update-purchase-secrets ((arg0 menu-secret-option))
|
|
(let* ((a1-1 (logtest? (-> *game-info* secrets) (game-secrets hero-mode)))
|
|
(v1-3 (if (not a1-1)
|
|
0
|
|
(-> arg0 num-items)
|
|
)
|
|
)
|
|
(a1-3 (if (not a1-1)
|
|
(+ (-> arg0 num-items) -1)
|
|
(+ (-> arg0 num-items) -1 (-> arg0 num-hero-items))
|
|
)
|
|
)
|
|
)
|
|
(while (>= a1-3 v1-3)
|
|
(let* ((a2-1 v1-3)
|
|
(t0-1 (-> arg0 secret-items a2-1 cost))
|
|
(a3-6 (-> arg0 secret-items a2-1 flag))
|
|
(t2-1 (-> arg0 secret-items a2-1 avail-after))
|
|
(t1-5 (the int (-> *game-info* skill-total)))
|
|
)
|
|
(when (and (logtest? (-> *game-info* sub-task-list t2-1 flags) (game-task-node-flag closed)) (>= t1-5 t0-1))
|
|
(logior! (-> *game-info* purchase-secrets) a3-6)
|
|
(if (= (-> arg0 secret-items a2-1 can-toggle) 'auto)
|
|
(logior! (-> *game-info* secrets) a3-6)
|
|
)
|
|
)
|
|
)
|
|
(+! v1-3 1)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(defmethod get-state-check-card ((this progress) (arg0 symbol))
|
|
(let ((v1-0 *progress-save-info*)
|
|
(v0-0 arg0)
|
|
)
|
|
(when v1-0
|
|
(when (and v1-0 (= (-> this menu-transition) 0.0))
|
|
(case arg0
|
|
(('insufficient-space 'no-memory-card 'unformatted-card)
|
|
(cond
|
|
((zero? (-> v1-0 handle))
|
|
(set! v0-0 'no-memory-card)
|
|
)
|
|
((zero? (-> v1-0 formatted))
|
|
(cond
|
|
((or (zero? (-> this state-pos)) (!= (-> *progress-state* starting-state) 'title))
|
|
(set! v0-0 'go-away)
|
|
)
|
|
(else
|
|
(if (!= arg0 'unformatted-card)
|
|
(set! v0-0 'format-card)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((and (zero? (-> v1-0 inited)) (< (-> v1-0 mem-actual) (-> v1-0 mem-required)))
|
|
(set! v0-0 'insufficient-space)
|
|
)
|
|
((or (zero? (-> this state-pos)) (!= (-> *progress-state* starting-state) 'title))
|
|
(set! v0-0 'go-away)
|
|
)
|
|
(else
|
|
(set! v0-0 'select-save)
|
|
)
|
|
)
|
|
)
|
|
(('insert-card)
|
|
(if (= (-> v1-0 inited) 1)
|
|
(set! v0-0 'select-load)
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((zero? (-> v1-0 handle))
|
|
(cond
|
|
((-> *setting-control* user-current auto-save)
|
|
(set! v0-0 'card-removed)
|
|
)
|
|
(else
|
|
(case arg0
|
|
(('select-load)
|
|
(set! v0-0 'insert-card)
|
|
)
|
|
(('format-card
|
|
'insufficient-space
|
|
'unformatted-card
|
|
'select-save
|
|
'select-save-title
|
|
'select-save-title-hero
|
|
'create-game
|
|
'already-exists
|
|
)
|
|
(set! v0-0 'no-memory-card)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((zero? (-> v1-0 formatted))
|
|
(case arg0
|
|
(('select-load)
|
|
(set! v0-0 'insert-card)
|
|
)
|
|
(('select-save 'select-save-title 'select-state-title-hero)
|
|
(set! v0-0 'format-card)
|
|
)
|
|
)
|
|
)
|
|
((zero? (-> v1-0 inited))
|
|
(case arg0
|
|
(('select-save 'select-save-title 'select-save-title-hero)
|
|
(if (>= (-> v1-0 mem-actual) (-> v1-0 mem-required))
|
|
(set! v0-0 'create-game)
|
|
(set! v0-0 'insufficient-space)
|
|
)
|
|
)
|
|
(('select-load)
|
|
(set! v0-0 'insert-card)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
v0-0
|
|
)
|
|
)
|
|
|
|
(defmethod push-state ((this progress))
|
|
(let ((v1-0 (-> this state-pos)))
|
|
(cond
|
|
((< v1-0 5)
|
|
(set! (-> this state-stack v1-0) (-> this current))
|
|
(set! (-> this option-index-stack v1-0) (-> this option-index))
|
|
(set! (-> this state-pos) (+ v1-0 1))
|
|
)
|
|
(else
|
|
(format #t "ERROR: Can't push any more states on the state-stack.~%")
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod pop-state ((this progress))
|
|
(let ((v1-0 (-> this state-pos)))
|
|
(cond
|
|
((> v1-0 0)
|
|
(let ((a2-0 (+ v1-0 -1)))
|
|
(set! (-> this state-pos) a2-0)
|
|
(set-next-state this (-> this state-stack a2-0) (-> this option-index-stack a2-0))
|
|
)
|
|
)
|
|
(else
|
|
(set-next-state this 'go-away 0)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> *progress-state* game-options-item-selected) 0)
|
|
(set! (-> *progress-state* game-options-item-picked) #f)
|
|
(set! (-> *progress-state* graphic-options-item-selected) 0)
|
|
(set! (-> *progress-state* graphic-options-item-picked) #f)
|
|
(set! (-> *progress-state* qr-options-item-selected) 0)
|
|
(set! (-> *progress-state* qr-options-item-picked) #f)
|
|
0
|
|
)
|
|
|
|
(defmethod set-next-state ((this progress) (arg0 symbol) (arg1 int))
|
|
"Set the next menu state specified by arg0 at the index specified by arg1."
|
|
(set! (-> *progress-state* clear-screen) #f)
|
|
(when (!= arg0 (-> this current))
|
|
(set! (-> *progress-state* yes-no-choice) #f)
|
|
(set! (-> this selected-option) #f)
|
|
(set! (-> this next-option-index) arg1)
|
|
(set! (-> this next) arg0)
|
|
(case (-> this next)
|
|
(('select-load 'select-save 'select-save-title 'select-save-title-hero)
|
|
(set! (-> this next) (get-state-check-card this (-> this next)))
|
|
)
|
|
)
|
|
(case (-> this next)
|
|
(('creating)
|
|
(auto-save-command 'create-file 0 0 this #f)
|
|
)
|
|
(('loading)
|
|
(set! (-> *progress-state* last-slot-saved) (-> *progress-state* which-slot))
|
|
(auto-save-command 'restore 0 (-> *progress-state* which-slot) this #f)
|
|
(set! (-> (the-as menu-missions-option (-> (the-as (array menu-option) (-> *missions-options* options)) 0))
|
|
task-line-index
|
|
)
|
|
0
|
|
)
|
|
0
|
|
)
|
|
(('saving)
|
|
(set! (-> *progress-state* last-slot-saved) (-> *progress-state* which-slot))
|
|
(auto-save-command 'save 0 (-> *progress-state* which-slot) this #f)
|
|
)
|
|
(('formatting)
|
|
(auto-save-command 'format-card 0 0 this #f)
|
|
)
|
|
(('select-save 'select-load)
|
|
(set! (-> this next-option-index) (max 0 (-> *progress-state* last-slot-saved)))
|
|
)
|
|
(('card-removed)
|
|
(set! (-> *progress-state* last-slot-saved) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod set-menu-options ((this progress) (arg0 symbol))
|
|
"Set the menu options for the menu state specified by arg0."
|
|
(set! (-> this current-options) #f)
|
|
(case arg0
|
|
(('go-away)
|
|
(go (method-of-object this go-away))
|
|
)
|
|
(('main)
|
|
(set! (-> this current-options) (cond
|
|
(*cheat-mode*
|
|
*main-options*
|
|
)
|
|
((= *kernel-boot-message* 'kiosk)
|
|
*main-kiosk-options*
|
|
)
|
|
((demo?)
|
|
*main-demo-options*
|
|
)
|
|
(else
|
|
*main-options*
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(('game-options)
|
|
(set! (-> this current-options)
|
|
(cond
|
|
((demo?)
|
|
(if (= (scf-get-territory) GAME_TERRITORY_SCEE)
|
|
*game-options*
|
|
*game-options-demo*
|
|
)
|
|
)
|
|
((and (= (scf-get-territory) GAME_TERRITORY_SCEI) (not (and (= *progress-cheat* 'language) (cpad-hold? 0 l2) (cpad-hold? 0 r2))))
|
|
*game-options*
|
|
)
|
|
(else
|
|
*game-options*
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(('graphic-options)
|
|
(set! (-> this current-options)
|
|
(if (or (= (scf-get-territory) GAME_TERRITORY_SCEE) (and (= *progress-cheat* 'pal) (cpad-hold? 0 l2) (cpad-hold? 0 r2)))
|
|
*graphic-title-options-pal*
|
|
*graphic-options*
|
|
)
|
|
)
|
|
)
|
|
(('sound-options)
|
|
(set! (-> this current-options) *sound-options*)
|
|
)
|
|
(('select-load 'select-save)
|
|
(set! (-> this current-options) *load-save-options*)
|
|
)
|
|
(('select-save-title)
|
|
(set! (-> this current-options) *save-options-title*)
|
|
)
|
|
(('select-save-title-hero)
|
|
(logior! (-> *game-info* purchase-secrets) (game-secrets hero-mode))
|
|
(logior! (-> *game-info* secrets) (game-secrets hero-mode))
|
|
(set! (-> this current-options) *save-options-title*)
|
|
)
|
|
(('loading 'saving 'creating 'formatting)
|
|
(set! (-> this current-options) *loading-options*)
|
|
)
|
|
(('unformatted-card 'insufficient-space 'no-memory-card)
|
|
(set! (-> this current-options) *insufficient-space-options*)
|
|
)
|
|
(('secrets-insufficient-space 'secrets-no-memory-card)
|
|
(set! (-> this current-options) *secrets-insufficient-space-options*)
|
|
)
|
|
(('insert-card)
|
|
(set! (-> this current-options) *insert-card-options*)
|
|
)
|
|
(('error-loading 'error-saving 'error-formatting 'error-creating)
|
|
(set! (-> this current-options) *error-loading-options*)
|
|
)
|
|
(('error-auto-saving)
|
|
(set! (-> this current-options) *error-auto-saving-options*)
|
|
)
|
|
(('card-removed)
|
|
(set! (-> this current-options) *card-removed-options*)
|
|
)
|
|
(('error-disc-removed)
|
|
(set! (-> this current-options) *error-disc-removed-options*)
|
|
)
|
|
(('error-reading)
|
|
(set! (-> this current-options) *error-reading-options*)
|
|
)
|
|
(('icon-info)
|
|
(set! (-> this current-options) *icon-info-options*)
|
|
)
|
|
(('format-card)
|
|
(set! (-> this current-options) *format-card-options*)
|
|
)
|
|
(('already-exists)
|
|
(set! (-> this current-options) *already-exists-options*)
|
|
)
|
|
(('create-game)
|
|
(set! (-> this current-options) *create-game-options*)
|
|
)
|
|
(('video-mode-warning)
|
|
(set! (-> this current-options) *video-mode-warning-options*)
|
|
)
|
|
(('video-mode-ok)
|
|
(set! (-> this current-options) *video-mode-ok-options*)
|
|
)
|
|
(('progressive-mode-warning)
|
|
(set! (-> this current-options) *progressive-mode-warning-options*)
|
|
)
|
|
(('progressive-mode-ok)
|
|
(set! (-> this current-options) *progressive-mode-ok-options*)
|
|
)
|
|
(('quit)
|
|
(set! (-> this current-options) *quit-options*)
|
|
)
|
|
(('title)
|
|
(set! (-> this current-options) *title*)
|
|
)
|
|
(('title-options)
|
|
(set! (-> this current-options) *options*)
|
|
)
|
|
(('select-start 'select-pre-start 'select-kiosk-start)
|
|
(set! (-> this current-options) *select-start-options*)
|
|
(set! (-> (the-as menu-select-start-option (-> (the-as (array menu-option) (-> *select-start-options* options)) 0))
|
|
task-index
|
|
)
|
|
0
|
|
)
|
|
0
|
|
)
|
|
(('select-scene)
|
|
(set! (-> this current-options) *select-scene-options*)
|
|
(set! (-> (the-as menu-select-scene-option (-> (the-as (array menu-option) (-> *select-scene-options* options)) 0))
|
|
task-index
|
|
)
|
|
0
|
|
)
|
|
0
|
|
)
|
|
(('select-scene-special)
|
|
(set! (-> *progress-state* starting-state) 'title)
|
|
(set! (-> this state-pos) 0)
|
|
(let ((v1-67 (-> this state-pos)))
|
|
(set! (-> this state-stack v1-67) 'title)
|
|
(set! (-> this option-index-stack v1-67) 3)
|
|
(let ((v1-68 (+ v1-67 1)))
|
|
(set! (-> this state-stack v1-68) 'unlocked-secrets)
|
|
(set! (-> this option-index-stack v1-68) (-> this option-index))
|
|
(set! (-> this state-pos) (+ v1-68 1))
|
|
)
|
|
)
|
|
(dotimes (s5-1 (-> this state-pos))
|
|
(format
|
|
#t
|
|
"select-scene-special: ~S ~D~%"
|
|
(symbol->string (-> this state-stack s5-1))
|
|
(-> this option-index-stack s5-1)
|
|
)
|
|
)
|
|
(set! (-> this current-options) *select-scene-options*)
|
|
)
|
|
(('bigmap)
|
|
(set! (-> this current-options) *bigmap-options*)
|
|
)
|
|
(('missions)
|
|
(set! (-> *progress-state* missions-total-spacing) 0.0)
|
|
(set! (-> (the-as menu-missions-option (-> (the-as (array menu-option) (-> *missions-options* options)) 0))
|
|
task-line-index
|
|
)
|
|
0
|
|
)
|
|
(set! (-> this current-options) *missions-options*)
|
|
)
|
|
(('highscores)
|
|
(set! (-> (the-as menu-highscores-option (-> (the-as (array menu-option) (-> *highscores-options* options)) 0))
|
|
page-index
|
|
)
|
|
0
|
|
)
|
|
(set! (-> (the-as menu-highscores-option (-> (the-as (array menu-option) (-> *highscores-options* options)) 0))
|
|
prev-page-index
|
|
)
|
|
0
|
|
)
|
|
(set! (-> this current-options) *highscores-options*)
|
|
)
|
|
(('secret)
|
|
(set! (-> this secret-buying) #f)
|
|
(set! (-> this current-options) *secret-options*)
|
|
)
|
|
(('quit-restart)
|
|
(set! (-> this current-options) *quit-restart-options*)
|
|
)
|
|
(('unlocked-secrets)
|
|
(set! (-> this current-options) *unlocked-secrets*)
|
|
)
|
|
)
|
|
(when (= (-> this current-options) #f)
|
|
(format #t "Didn't find new menu settings!!~%")
|
|
(pop-state this)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-to-cpad ((this progress))
|
|
(mc-get-slot-info 0 *progress-save-info*)
|
|
(when (-> this current-options)
|
|
(let ((option-array (-> this current-options options)))
|
|
(when (and option-array (= (-> this menu-transition) 0.0))
|
|
(respond-progress
|
|
(the-as menu-option (-> option-array (-> this option-index)))
|
|
this
|
|
(and (= (-> this menu-transition) 0.0) (-> this selected-option))
|
|
)
|
|
(cond
|
|
((-> this selected-option)
|
|
(cond
|
|
((cpad-pressed? 0 confirm)
|
|
(set! (-> this selected-option) #f)
|
|
)
|
|
((cpad-pressed? 0 triangle)
|
|
(if (= (-> this current-options) *main-options*)
|
|
(sound-play "window-contract")
|
|
(sound-play "generic-beep")
|
|
)
|
|
(set! (-> this selected-option) #f)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(cond
|
|
((cpad-pressed? 0 up l-analog-up)
|
|
(cond
|
|
((= (-> this current-options) *main-options*)
|
|
(sound-play "ring-select")
|
|
)
|
|
((!= (length option-array) 1)
|
|
(sound-play "roll-over")
|
|
)
|
|
)
|
|
(if (and (= *title* (-> this current-options)) (not (memcard-unlocked-secrets? #f)) (zero? (-> this option-index)))
|
|
(set! (-> this option-index) 3)
|
|
)
|
|
(cond
|
|
((> (-> this want-option-index) 0)
|
|
(set! (-> this want-option-index) -1)
|
|
)
|
|
((< -2 (-> this want-option-index))
|
|
(+! (-> this want-option-index) -1)
|
|
)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 down l-analog-down)
|
|
(cond
|
|
((= (-> this current-options) *main-options*)
|
|
(sound-play "ring-select")
|
|
)
|
|
((!= (length option-array) 1)
|
|
(sound-play "roll-over")
|
|
)
|
|
)
|
|
(cond
|
|
((< (-> this want-option-index) 0)
|
|
(set! (-> this want-option-index) 1)
|
|
)
|
|
((< (-> this want-option-index) 2)
|
|
(+! (-> this want-option-index) 1)
|
|
)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(if (not (-> *progress-state* clear-screen))
|
|
(sound-play "generic-beep")
|
|
)
|
|
(set! (-> this selected-option) #t)
|
|
)
|
|
((cpad-pressed? 0 triangle)
|
|
(when (can-go-back? this)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
(if (and (= (-> *progress-state* starting-state) 'main) (!= (-> this current-options) *main-options*))
|
|
(sound-play "window-contract")
|
|
(sound-play "generic-beep")
|
|
)
|
|
(pop-state this)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defbehavior progress-trans progress ()
|
|
;; og:preserve-this pc port note : added variable
|
|
(let ((speed-mod (if (-> *pc-settings* fast-progress?) (-> *pc-cheat-state* progress-speed) 1.0)))
|
|
(cond
|
|
((and (= (-> self next) 'none)
|
|
(or (= (-> *progress-state* starting-state) 'main) (= (-> self anim-frame) 1.0))
|
|
)
|
|
(set! (-> self menu-transition)
|
|
(seek-ease
|
|
(-> self menu-transition)
|
|
0.0
|
|
(* speed-mod 0.1 (-> self clock time-adjust-ratio))
|
|
0.4
|
|
(* 0.01 (-> self clock time-adjust-ratio))
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(seek! (-> self menu-transition) 1.0 (* 0.1 (-> self clock time-adjust-ratio)))
|
|
(when (and (= (-> self menu-transition) 1.0)
|
|
(or (and (nonzero? (-> self state-pos)) (= (-> self anim-frame) 1.0))
|
|
(or (and (zero? (-> self state-pos)) (= (-> self anim-frame) 0.0))
|
|
(and (!= (-> *progress-state* starting-state) 'main) (!= (-> self next) 'none))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self current) (-> self next))
|
|
(set! (-> self next) 'none)
|
|
(set! (-> self option-index) (-> self next-option-index))
|
|
(set! (-> self want-option-index) 0)
|
|
(set-menu-options self (-> self current))
|
|
(set! (-> self scanlines-alpha) 0.0)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self main-menu)
|
|
(and (zero? (-> self state-pos)) (and (= (-> self menu-transition) 0.0)
|
|
(= (-> self next) 'none)
|
|
(or (= (-> self state-stack 0) 'main) (= (-> self current) 'main))
|
|
)
|
|
)
|
|
)
|
|
(when *cheat-mode*
|
|
(when (zero? (-> self state-pos))
|
|
(cond
|
|
((and (cpad-hold? 0 l2) (cpad-hold? 0 r1))
|
|
(if (= (-> self current-options) *main-options*)
|
|
(set! (-> self current-options) *main-options-debug*)
|
|
)
|
|
)
|
|
((= (-> self current-options) *main-options-debug*)
|
|
(set! (-> self current-options) *main-options*)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (= (-> self ring-angle) (-> self ring-want-angle))
|
|
(respond-to-cpad self)
|
|
)
|
|
(let ((f30-0 (* 0.005 (-> self clock time-adjust-ratio))))
|
|
(cond
|
|
((= (-> self menu-transition) 1.0)
|
|
(if (and (zero? (-> self state-pos)) (= (-> *progress-state* starting-state) 'main))
|
|
(seek! (-> self anim-frame) 0.0 (* 0.02 (-> self clock time-adjust-ratio)))
|
|
(seek! (-> self anim-frame) 1.0 (* 0.02 (-> self clock time-adjust-ratio)))
|
|
)
|
|
(let ((f0-27 (if (and (zero? (-> self state-pos)) (!= (-> *progress-state* starting-state) 'title))
|
|
0.0
|
|
0.2
|
|
)
|
|
)
|
|
)
|
|
(when (= (-> self next) 'bigmap)
|
|
(set! f0-27 0.4)
|
|
(set! f30-0 (* 0.008 (-> self clock time-adjust-ratio)))
|
|
)
|
|
(seek! (-> self pos-transition) f0-27 f30-0)
|
|
)
|
|
)
|
|
((zero? (-> self state-pos))
|
|
(if (= (-> self current) 'bigmap)
|
|
(set! f30-0 (* 0.05 (-> self clock time-adjust-ratio)))
|
|
)
|
|
(if (!= (-> *progress-state* starting-state) 'title)
|
|
(seek! (-> self pos-transition) 0.0 f30-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (!= (-> *progress-state* starting-state) 'main)
|
|
(set! (-> self pos-transition) 0.2)
|
|
)
|
|
(set-ring-position self)
|
|
(when (= (-> self ring-angle) (-> self ring-want-angle))
|
|
(cond
|
|
((< (-> self want-option-index) 0)
|
|
(cond
|
|
((and (= *cheat-mode* #f) (= *kernel-boot-message* 'kiosk))
|
|
(if (> (-> self option-index) 0)
|
|
(+! (-> self option-index) -1)
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> self option-index)
|
|
(min-max-wrap-around (+ (-> self option-index) -1) 0 (+ (length (-> self current-options options)) -1))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self graphic-index) (-> self option-index))
|
|
(+! (-> self want-option-index) 1)
|
|
)
|
|
((> (-> self want-option-index) 0)
|
|
(cond
|
|
((and (= *cheat-mode* #f) (= *kernel-boot-message* 'kiosk))
|
|
(if (< (-> self option-index) (+ (length (-> self current-options options)) -1))
|
|
(+! (-> self option-index) 1)
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> self option-index)
|
|
(min-max-wrap-around (+ (-> self option-index) 1) 0 (+ (length (-> self current-options options)) -1))
|
|
)
|
|
)
|
|
)
|
|
(+! (-> self want-option-index) -1)
|
|
)
|
|
)
|
|
)
|
|
(if (= (-> self anim-frame) 0.0)
|
|
(set! (-> self swing) (seek-ease
|
|
(-> self swing)
|
|
4.0
|
|
(* 0.05 (-> self clock time-adjust-ratio))
|
|
0.5
|
|
(* 0.005 (-> self clock time-adjust-ratio))
|
|
)
|
|
)
|
|
(set! (-> self swing) (seek-ease
|
|
(-> self swing)
|
|
0.0
|
|
(* 0.07 (-> self clock time-adjust-ratio))
|
|
0.5
|
|
(* 0.007 (-> self clock time-adjust-ratio))
|
|
)
|
|
)
|
|
)
|
|
(when (-> self main-menu)
|
|
(set! (-> self ring-want-angle) (ceil (* 182.04445 (* 36.0 (the float (-> self option-index))))))
|
|
(if (and (= (-> self ring-want-angle) 0.0) (< 32768.0 (-> self ring-angle)))
|
|
(set! (-> self ring-want-angle) 65536.0)
|
|
)
|
|
(let ((f0-54 (- (-> self ring-want-angle) (-> self ring-angle))))
|
|
(when (< 32768.0 (fabs f0-54))
|
|
(if (< 0.0 f0-54)
|
|
(+! (-> self ring-angle) 65536.0)
|
|
(+! (-> self ring-angle) -65536.0)
|
|
)
|
|
)
|
|
)
|
|
(seek! (-> self ring-angle) (-> self ring-want-angle) (* speed-mod 455.1111 (-> self clock time-adjust-ratio)))
|
|
)
|
|
(let ((gp-4 (quaternion-vector-angle!
|
|
(new 'stack-no-clear 'quaternion)
|
|
*x-vector*
|
|
(* 182.04445 (* (-> self swing) (sin (the float (* 40 (current-time))))))
|
|
)
|
|
)
|
|
(s5-4 (quaternion-vector-angle!
|
|
(new 'stack-no-clear 'quaternion)
|
|
*y-vector*
|
|
(* 182.04445 (* (-> self swing) (sin (the float (* 0 (current-time))))))
|
|
)
|
|
)
|
|
)
|
|
(quaternion*! (-> self root quat) (-> self init-quat) gp-4)
|
|
(quaternion*! (-> self root quat) (-> self root quat) s5-4)
|
|
)
|
|
(quaternion-normalize! (-> self root quat))
|
|
(if (= (-> self ring-angle) (-> self ring-want-angle))
|
|
(set! (-> self graphic-index) (-> self option-index))
|
|
)
|
|
0
|
|
(none)
|
|
))
|
|
|
|
(defun begin-scan ((arg0 hud-box) (arg1 progress))
|
|
(cond
|
|
((or (= (-> arg1 current) 'bigmap) (= (-> arg1 next) 'bigmap))
|
|
(case (get-aspect-ratio)
|
|
(('aspect4x3)
|
|
(set! (-> arg0 min x) 0.0)
|
|
(set! (-> arg0 min y) 0.0)
|
|
(set! (-> arg0 max x) 512.0)
|
|
(set! (-> arg0 max y) 416.0)
|
|
)
|
|
(('aspect16x9)
|
|
(set! (-> arg0 min x) 0.0)
|
|
(set! (-> arg0 min y) 0.0)
|
|
(set! (-> arg0 max x) 512.0)
|
|
(set! (-> arg0 max y) 424.0)
|
|
)
|
|
)
|
|
)
|
|
((= (get-aspect-ratio) 'aspect16x9)
|
|
(set! (-> arg0 min x) 19.0)
|
|
(set! (-> arg0 min y) 38.0)
|
|
(set! (-> arg0 max x) 494.0)
|
|
(set! (-> arg0 max y) 362.0)
|
|
)
|
|
(else
|
|
(set! (-> arg0 min x) 70.0)
|
|
(set! (-> arg0 min y) 70.0)
|
|
(set! (-> arg0 max x) 444.0)
|
|
(set! (-> arg0 max y) 329.0)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defun end-scan ((arg0 hud-box) (arg1 float))
|
|
(with-dma-buffer-add-bucket ((s5-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(bucket-id progress)
|
|
)
|
|
(draw-scan-and-line arg0 s5-0 arg1)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defbehavior progress-post progress ()
|
|
(local-vars (sv-144 font-context) (sv-148 int) (sv-152 hud-box) (sv-156 symbol))
|
|
(when (-> self current-options)
|
|
(let ((gp-0 (-> self current-options options))
|
|
(s4-0 (-> self current-options y-center))
|
|
(s5-0 (-> self current-options y-space))
|
|
)
|
|
(set! sv-144
|
|
(new 'stack 'font-context *font-default-matrix* 0 0 0.0 (font-color default) (font-flags shadow kerning))
|
|
)
|
|
(set! sv-148 (- s4-0 (/ (* s5-0 (length gp-0)) 2)))
|
|
(set! sv-152 (new 'stack-no-clear 'hud-box))
|
|
(set! sv-156 (and (!= (-> self current) 'main) (or (= (-> self next) 'none) (> (-> self state-pos) 0))))
|
|
(if sv-156
|
|
(begin-scan sv-152 self)
|
|
)
|
|
;; og:preserve-this
|
|
(if (or (= (-> self current-options) *title-pc*) (= (-> self current-options) *options-pc*))
|
|
(+! s5-0 10)
|
|
)
|
|
(dotimes (s4-1 (length gp-0))
|
|
(let ((v1-24 sv-144))
|
|
(set! (-> v1-24 scale) 0.5)
|
|
)
|
|
(set! (-> sv-144 origin x) 79.0)
|
|
(set! (-> sv-144 origin y) (the float sv-148))
|
|
(set-width! sv-144 355)
|
|
(set-height! sv-144 30)
|
|
(set! (-> sv-144 flags) (if (= (-> *setting-control* user-default language) (language-enum japanese))
|
|
(font-flags middle middle-vert large)
|
|
(font-flags kerning middle middle-vert large)
|
|
)
|
|
)
|
|
(let ((s3-0 sv-144))
|
|
(set! (-> s3-0 color) (if (and (= s4-1 (-> self option-index)) (= (-> self menu-transition) 0.0))
|
|
(progress-selected 0)
|
|
(font-color progress)
|
|
)
|
|
)
|
|
)
|
|
;; og:preserve-this added for proper aspect ratio-ing
|
|
(#when PC_PORT
|
|
(when (not (-> *pc-settings* use-vis?))
|
|
(set! (-> sv-144 origin x) (the float (the int (adjust-game-x (-> sv-144 origin x)))))
|
|
(set! (-> sv-144 width) (the float (the int (* (-> sv-144 width) (-> *pc-settings* aspect-ratio-reciprocal)))))
|
|
)
|
|
)
|
|
(draw-option
|
|
(-> gp-0 s4-1)
|
|
self
|
|
sv-144
|
|
s4-1
|
|
(and (= (-> self menu-transition) 0.0) (-> self selected-option) (= s4-1 (-> self option-index)))
|
|
)
|
|
(if (!= (-> self current-options) *unlocked-secrets*)
|
|
(set! sv-148 (+ s5-0 7 sv-148))
|
|
(set! sv-148 (+ sv-148 s5-0))
|
|
)
|
|
)
|
|
)
|
|
(when sv-156
|
|
(set! (-> self scanlines-alpha) (seek-ease
|
|
(-> self scanlines-alpha)
|
|
(- 1.0 (-> self menu-transition))
|
|
(* 0.05 (-> self clock time-adjust-ratio))
|
|
0.3
|
|
(* 0.001 (-> self clock time-adjust-ratio))
|
|
)
|
|
)
|
|
(end-scan sv-152 (-> self scanlines-alpha))
|
|
)
|
|
)
|
|
(when (and (< 0.8 (-> self anim-frame)) (or (= (-> self current) 'bigmap) (= (-> self next) 'bigmap)))
|
|
(cond
|
|
((>= (-> self pos-transition) 0.38)
|
|
(draw *bigmap* 1792 1840 2304 2256)
|
|
)
|
|
(else
|
|
(let ((s4-2 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 21)))
|
|
(s3-1 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 24)))
|
|
(gp-1 (new 'stack-no-clear 'vector4w))
|
|
)
|
|
(set! (-> gp-1 quad) (the-as uint128 0))
|
|
(let ((s5-1 (new 'stack-no-clear 'vector4w)))
|
|
(set! (-> s5-1 quad) (the-as uint128 0))
|
|
(if (and (transform-point-qword! gp-1 s4-2) (transform-point-qword! s5-1 s3-1))
|
|
(draw *bigmap* (/ (-> s5-1 x) 16) (/ (-> s5-1 y) 16) (/ (-> gp-1 x) 16) (/ (-> gp-1 y) 16))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(ja-post)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defstate come-in (progress)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(sound-play "ring-appear")
|
|
(set! (-> self pos-transition) 1.0)
|
|
)
|
|
:trans (behavior ()
|
|
(let ((f30-0 (if (= (-> *progress-state* starting-state) 'main)
|
|
0.0
|
|
0.2
|
|
)
|
|
)
|
|
;; og:preserve-this added variable
|
|
(speed-mod (if (-> *pc-settings* fast-progress?) (-> *pc-cheat-state* progress-speed) 1.0))
|
|
)
|
|
(when (hud-hidden?)
|
|
(set! (-> *blit-displays-work* menu-mode) #t)
|
|
(set! (-> self pos-transition) (seek-ease
|
|
(-> self pos-transition)
|
|
f30-0
|
|
(* speed-mod 0.03 (-> self clock time-adjust-ratio))
|
|
0.4
|
|
(* 0.003 (-> self clock time-adjust-ratio))
|
|
)
|
|
)
|
|
)
|
|
(set-ring-position self)
|
|
(if (= (-> self pos-transition) f30-0)
|
|
(go-virtual idle)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(until #f
|
|
(suspend)
|
|
(ja :num-func num-func-identity :frame-num 0.0)
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
(defstate idle (progress)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block))
|
|
(the-as
|
|
object
|
|
(case event-type
|
|
(('notify)
|
|
(cond
|
|
((= (-> event param 0) 'done)
|
|
(let ((t9-0 format)
|
|
(a0-3 #t)
|
|
(a1-1 "DONE NOTIFY: ~S ~S~%")
|
|
(v1-3 (the-as mc-status-code (-> event param 1)))
|
|
)
|
|
(t9-0
|
|
a0-3
|
|
a1-1
|
|
(cond
|
|
((= v1-3 (mc-status-code bad-version))
|
|
"bad-version"
|
|
)
|
|
((= v1-3 (mc-status-code no-save))
|
|
"no-save"
|
|
)
|
|
((= v1-3 (mc-status-code no-last))
|
|
"no-last"
|
|
)
|
|
((= v1-3 (mc-status-code no-space))
|
|
"no-space"
|
|
)
|
|
((= v1-3 (mc-status-code internal-error))
|
|
"internal-error"
|
|
)
|
|
((= v1-3 (mc-status-code no-memory))
|
|
"no-memory"
|
|
)
|
|
((= v1-3 (mc-status-code bad-handle))
|
|
"bad-handle"
|
|
)
|
|
((= v1-3 (mc-status-code busy))
|
|
"busy"
|
|
)
|
|
((= v1-3 (mc-status-code write-error))
|
|
"write-error"
|
|
)
|
|
((= v1-3 (mc-status-code read-error))
|
|
"read-error"
|
|
)
|
|
((= v1-3 (mc-status-code no-card))
|
|
"no-card"
|
|
)
|
|
((= v1-3 (mc-status-code no-format))
|
|
"no-format"
|
|
)
|
|
((= v1-3 (mc-status-code ok))
|
|
"ok"
|
|
)
|
|
((= v1-3 (mc-status-code no-process))
|
|
"no-process"
|
|
)
|
|
((= v1-3 (mc-status-code no-auto-save))
|
|
"no-auto-save"
|
|
)
|
|
((= v1-3 (mc-status-code no-file))
|
|
"no-file"
|
|
)
|
|
((= v1-3 (mc-status-code format-failed))
|
|
"format-failed"
|
|
)
|
|
((= v1-3 (mc-status-code new-game))
|
|
"new-game"
|
|
)
|
|
(else
|
|
"*unknown*"
|
|
)
|
|
)
|
|
(symbol->string (-> self current))
|
|
)
|
|
)
|
|
(case (-> self next) ;; og:preserve-this patched to next instead of current because we save synchronously
|
|
(('saving)
|
|
(cond
|
|
((= (-> self state-stack 0) 'title)
|
|
(let ((gp-1 (-> *setting-control* user-default auto-save)))
|
|
(sound-volume-off)
|
|
(let ((v0-0 (progress-intro-start (logtest? (-> *game-info* purchase-secrets) (game-secrets hero-mode)))))
|
|
(set! (-> *setting-control* user-default auto-save) gp-1)
|
|
v0-0
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(pop-state self)
|
|
)
|
|
)
|
|
)
|
|
(('formatting)
|
|
(set-next-state self 'creating 0)
|
|
)
|
|
(('creating)
|
|
(if (= (-> self state-stack 0) 'title)
|
|
(set-next-state self 'select-save-title 0)
|
|
(set-next-state self 'select-save 0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((= (-> event param 0) 'error)
|
|
(let ((t9-7 format)
|
|
(a0-18 #t)
|
|
(a1-5 "ERROR NOTIFY: ~S ~S ~S~%")
|
|
(v1-19 (the-as mc-status-code (-> event param 1)))
|
|
)
|
|
(t9-7
|
|
a0-18
|
|
a1-5
|
|
(cond
|
|
((= v1-19 (mc-status-code bad-version))
|
|
"bad-version"
|
|
)
|
|
((= v1-19 (mc-status-code no-save))
|
|
"no-save"
|
|
)
|
|
((= v1-19 (mc-status-code no-last))
|
|
"no-last"
|
|
)
|
|
((= v1-19 (mc-status-code no-space))
|
|
"no-space"
|
|
)
|
|
((= v1-19 (mc-status-code internal-error))
|
|
"internal-error"
|
|
)
|
|
((= v1-19 (mc-status-code no-memory))
|
|
"no-memory"
|
|
)
|
|
((= v1-19 (mc-status-code bad-handle))
|
|
"bad-handle"
|
|
)
|
|
((= v1-19 (mc-status-code busy))
|
|
"busy"
|
|
)
|
|
((= v1-19 (mc-status-code write-error))
|
|
"write-error"
|
|
)
|
|
((= v1-19 (mc-status-code read-error))
|
|
"read-error"
|
|
)
|
|
((= v1-19 (mc-status-code no-card))
|
|
"no-card"
|
|
)
|
|
((= v1-19 (mc-status-code no-format))
|
|
"no-format"
|
|
)
|
|
((= v1-19 (mc-status-code ok))
|
|
"ok"
|
|
)
|
|
((= v1-19 (mc-status-code no-process))
|
|
"no-process"
|
|
)
|
|
((= v1-19 (mc-status-code no-auto-save))
|
|
"no-auto-save"
|
|
)
|
|
((= v1-19 (mc-status-code no-file))
|
|
"no-file"
|
|
)
|
|
((= v1-19 (mc-status-code format-failed))
|
|
"format-failed"
|
|
)
|
|
((= v1-19 (mc-status-code new-game))
|
|
"new-game"
|
|
)
|
|
(else
|
|
"*unknown*"
|
|
)
|
|
)
|
|
(-> self current)
|
|
(-> self next)
|
|
)
|
|
)
|
|
(case (-> event param 1)
|
|
((14)
|
|
(set-next-state self 'insufficient-space 0)
|
|
)
|
|
(else
|
|
(case (-> self next) ;; og:preserve-this patched to next instead of current because we save synchronously
|
|
(('formatting 'format-card)
|
|
(set-next-state self 'error-formatting 0)
|
|
) ;; og:preserve-this jp patch
|
|
(('creating 'create-game)
|
|
(set-next-state self 'error-creating 0)
|
|
) ;; jp patch
|
|
(('saving 'select-save 'select-save-title 'select-save-title-hero 'already-exists)
|
|
(set-next-state self 'error-saving 0)
|
|
)
|
|
(('loading 'select-load)
|
|
(set-next-state self 'error-loading 0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set! (-> self menu-transition) 1.0)
|
|
)
|
|
:trans progress-trans
|
|
:code (behavior ()
|
|
(until #f
|
|
(ja :num-func num-func-identity :frame-num (* 12.0 (-> self anim-frame)))
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
:post progress-post
|
|
)
|
|
|
|
(defstate go-away (progress)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(remove-setting-by-arg0 *setting-control* 'extra-bank)
|
|
(let ((v1-2 *blit-displays-work*))
|
|
(set! (-> v1-2 progress-interp-dest) 0.0)
|
|
(set! (-> v1-2 progress-interp-speed) (/ 1.0 45))
|
|
(#when PC_PORT
|
|
(when (-> *pc-settings* fast-progress?)
|
|
(*! (-> v1-2 progress-interp-speed) (-> *pc-cheat-state* progress-speed))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
;; og:preserve-this added variable
|
|
(let ((speed-mod (if (-> *pc-settings* fast-progress?) (-> *pc-cheat-state* progress-speed) 1.0)))
|
|
(seek! (-> self anim-frame) 0.0 (* speed-mod 0.02 (-> self clock time-adjust-ratio)))
|
|
(cond
|
|
((= (-> self anim-frame) 0.0)
|
|
(seek! (-> self pos-transition) 1.0 (* speed-mod 0.02 (-> self clock time-adjust-ratio)))
|
|
(if (= (-> self pos-transition) 1.0)
|
|
(go-virtual gone)
|
|
)
|
|
)
|
|
(else
|
|
(seek! (-> self pos-transition) 0.0 (* speed-mod 0.02 (-> self clock time-adjust-ratio)))
|
|
)
|
|
)
|
|
(set-ring-position self)
|
|
))
|
|
:code (behavior ()
|
|
(let ((gp-0 #f))
|
|
(until #f
|
|
(when (and (not gp-0) (= (-> self anim-frame) 0.0))
|
|
(sound-play "ring-disappear")
|
|
(set! gp-0 #t)
|
|
)
|
|
(ja :num-func num-func-identity :frame-num (* 12.0 (-> self anim-frame)))
|
|
(suspend)
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
(defstate gone (progress)
|
|
:virtual #t
|
|
:code (behavior ()
|
|
(disable-drawing *bigmap*)
|
|
(set! (-> *blit-displays-work* menu-mode) #f)
|
|
(while (or (-> *blit-displays-work* screen-copied) (nonzero? (-> *blit-displays-work* count-down)))
|
|
(suspend)
|
|
)
|
|
(remove-setting! 'process-mask)
|
|
(set-master-mode *last-master-mode*)
|
|
(logior! (-> self mask) (process-mask sleep))
|
|
(suspend)
|
|
0
|
|
)
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-on-off-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(let ((v1-1 (&-> *progress-state* on-off-choice))
|
|
(gp-0 #f)
|
|
)
|
|
(cond
|
|
(arg1
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(when (not (-> v1-1 0))
|
|
(set! gp-0 #t)
|
|
(when (= (-> this value-to-modify) (&-> *setting-control* user-default vibration))
|
|
(set! (-> *cpad-list* cpads 0 buzz-pause-val 0) (the-as uint 255))
|
|
(set! (-> *cpad-list* cpads 0 buzz-pause-time) (the-as uint 15))
|
|
)
|
|
(set! (-> v1-1 0) #t)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(set! gp-0 (-> v1-1 0))
|
|
(set! (-> v1-1 0) #f)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(cond
|
|
((and (-> v1-1 0) (= (-> this value-to-modify) (&-> *setting-control* user-default use-progressive-scan)))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(push-state arg0)
|
|
(set-next-state arg0 'progressive-mode-warning 0)
|
|
)
|
|
(else
|
|
(set! (-> this value-to-modify 0) (-> *progress-state* on-off-choice))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(if (cpad-pressed? 0 confirm)
|
|
(set! (-> *progress-state* on-off-choice) (-> this value-to-modify 0))
|
|
)
|
|
)
|
|
)
|
|
(if gp-0
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-yes-no-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(let ((v1-1 (&-> *progress-state* yes-no-choice))
|
|
(gp-0 #f)
|
|
)
|
|
(when arg1
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(when (not (-> v1-1 0))
|
|
(set! gp-0 #t)
|
|
(set! (-> v1-1 0) #t)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(set! gp-0 (-> v1-1 0))
|
|
(set! (-> v1-1 0) #f)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(cond
|
|
((and (-> v1-1 0) (= (-> this name) (text-id progress-root-restart-mission)))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(restart-mission)
|
|
(set-next-state arg0 'go-away 0)
|
|
)
|
|
((and (-> v1-1 0) (= (-> this name) (text-id progress-quit)))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(initialize! *game-info* 'game (the-as game-save #f) "title-restart")
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if gp-0
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-slider-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(when (-> *bigmap* progress-minimap)
|
|
(let ((gp-0 (-> this value-to-modify))
|
|
(s4-0 #f)
|
|
)
|
|
(cond
|
|
(arg1
|
|
(cond
|
|
((cpad-hold? 0 left l-analog-left)
|
|
(seek! (-> (the-as (pointer float) gp-0)) 0.0 (* 0.02 (-> self clock time-adjust-ratio)))
|
|
(if (!= (-> (the-as (pointer float) gp-0)) 0.0)
|
|
(set! s4-0 #t)
|
|
)
|
|
)
|
|
((cpad-hold? 0 right l-analog-right)
|
|
(seek! (-> (the-as (pointer float) gp-0)) 1.0 (* 0.02 (-> self clock time-adjust-ratio)))
|
|
(if (!= (-> (the-as (pointer float) gp-0)) 1.0)
|
|
(set! s4-0 #t)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 triangle)
|
|
(set! (-> (the-as (pointer float) gp-0)) (-> *progress-state* slider-backup))
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(cond
|
|
((cpad-hold? 0 left l-analog-left)
|
|
(seek! (-> (the-as (pointer float) gp-0)) 0.0 (* 0.02 (-> self clock time-adjust-ratio)))
|
|
(if (!= (-> (the-as (pointer float) gp-0)) 0.0)
|
|
(set! s4-0 #t)
|
|
)
|
|
)
|
|
((cpad-hold? 0 right l-analog-right)
|
|
(seek! (-> (the-as (pointer float) gp-0)) 1.0 (* 0.02 (-> self clock time-adjust-ratio)))
|
|
(if (!= (-> (the-as (pointer float) gp-0)) 1.0)
|
|
(set! s4-0 #t)
|
|
)
|
|
)
|
|
)
|
|
(when (cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
)
|
|
(when (cpad-pressed? 0 triangle)
|
|
(cond
|
|
((!= (-> *progress-state* starting-state) 'title)
|
|
)
|
|
(else
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when s4-0
|
|
(let ((f30-0 1.0))
|
|
(case (-> this name)
|
|
(((text-id progress-sound-music-volume) (text-id progress-sound-speech-volume))
|
|
(set! f30-0 (-> (the-as (pointer float) gp-0)))
|
|
)
|
|
)
|
|
(when (< (seconds 0.03) (- (current-time) (-> *progress-state* last-slider-sound)))
|
|
(set! (-> *progress-state* last-slider-sound) (current-time))
|
|
(sound-play-by-name
|
|
(static-sound-name "menu-slide")
|
|
(new-sound-id)
|
|
(the int (* 1024.0 f30-0))
|
|
0
|
|
0
|
|
(sound-group sfx)
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-stereo-mode-sound-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(when (-> *bigmap* progress-minimap)
|
|
(let ((a0-1 (-> *setting-control* user-default stereo-mode))
|
|
(v1-4 #f)
|
|
)
|
|
(let ((a3-0 2))
|
|
(cond
|
|
(arg1
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(set! (-> *setting-control* user-default stereo-mode) (min-max-wrap-around (+ a0-1 -1) 0 a3-0))
|
|
(set! v1-4 #t)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(set! (-> *setting-control* user-default stereo-mode) (min-max-wrap-around (+ a0-1 1) 0 a3-0))
|
|
(set! v1-4 #t)
|
|
)
|
|
((cpad-pressed? 0 triangle)
|
|
(set! (-> *setting-control* user-default stereo-mode) (-> *progress-state* stereo-mode-backup))
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(if (cpad-pressed? 0 confirm)
|
|
(set! (-> *progress-state* stereo-mode-backup) (-> *setting-control* user-default stereo-mode))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if v1-4
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-main-menu-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(cond
|
|
((cpad-pressed? 0 start)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
(when (and (= (-> arg0 ring-angle) (-> arg0 ring-want-angle)) #t)
|
|
(cond
|
|
((= (-> this name) (text-id progress-demo-exit))
|
|
(case *kernel-boot-message*
|
|
(('demo-shared)
|
|
(set! *master-exit* 'force)
|
|
(set-master-mode 'game)
|
|
)
|
|
(('demo)
|
|
(set! (-> *game-info* mode) 'play)
|
|
(initialize! *game-info* 'game (the-as game-save #f) "demo-restart")
|
|
)
|
|
)
|
|
)
|
|
((or (= (-> this name) (text-id progress-main-secrets-sceneplayer-1))
|
|
(= (-> this name) (text-id progress-main-secrets-sceneplayer-2))
|
|
(= (-> this name) (text-id progress-main-secrets-sceneplayer-3))
|
|
)
|
|
(case (-> this name)
|
|
(((text-id progress-main-secrets-sceneplayer-2))
|
|
(set! (-> *progress-state* scene-player-act) 2)
|
|
)
|
|
(((text-id progress-main-secrets-sceneplayer-3))
|
|
(set! (-> *progress-state* scene-player-act) 3)
|
|
)
|
|
(else
|
|
(set! (-> *progress-state* scene-player-act) 1)
|
|
)
|
|
)
|
|
(sound-play "window-expand")
|
|
(push-state arg0)
|
|
(set-next-state arg0 (-> this next-state) 0)
|
|
)
|
|
((= (-> this next-state) 'back)
|
|
(pop-state arg0)
|
|
)
|
|
((= (-> this next-state) 'restart)
|
|
(sound-volume-off)
|
|
(restart-mission)
|
|
(pop-state arg0)
|
|
)
|
|
(else
|
|
(sound-play "window-expand")
|
|
(push-state arg0)
|
|
(set-next-state arg0 (-> this next-state) 0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((not (-> arg0 selected-option))
|
|
(let ((a0-53 (-> arg0 current-options options)))
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(if (!= (length a0-53) 1)
|
|
(sound-play "ring-select")
|
|
)
|
|
(cond
|
|
((> (-> arg0 want-option-index) 0)
|
|
(set! (-> arg0 want-option-index) -1)
|
|
)
|
|
((< -2 (-> arg0 want-option-index))
|
|
(+! (-> arg0 want-option-index) -1)
|
|
)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(if (!= (length a0-53) 1)
|
|
(sound-play "ring-select")
|
|
)
|
|
(cond
|
|
((< (-> arg0 want-option-index) 0)
|
|
(set! (-> arg0 want-option-index) 1)
|
|
)
|
|
((< (-> arg0 want-option-index) 2)
|
|
(+! (-> arg0 want-option-index) 1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-sub-menu-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(when (and (-> *progress-state* secrets-unlocked)
|
|
(not (memcard-unlocked-secrets? #f))
|
|
(or (= (-> arg0 current-options) *title*)
|
|
(= (-> arg0 current-options) *unlocked-secrets*)
|
|
(= (-> arg0 current-options) *select-scene-options*)
|
|
(= (-> arg0 current-options) *select-start-options*)
|
|
(= (-> arg0 current-options) *save-options-title*)
|
|
)
|
|
)
|
|
(set! (-> *progress-state* secrets-unlocked) #f)
|
|
(set! (-> arg0 state-pos) 0)
|
|
(set-next-state arg0 'secrets-insufficient-space 0)
|
|
)
|
|
(when (= (-> this name) (text-id progress-continue-without-saving))
|
|
(let ((a1-3 (get-state-check-card arg0 (-> arg0 current))))
|
|
(set-next-state arg0 a1-3 0)
|
|
)
|
|
)
|
|
(when (and (= (-> this name) (text-id progress-root-secrets))
|
|
(= *title* (-> arg0 current-options))
|
|
(not (memcard-unlocked-secrets? #f))
|
|
(= (-> arg0 option-index) 3)
|
|
)
|
|
(set! (-> arg0 option-index) 0)
|
|
0
|
|
)
|
|
(when (cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(cond
|
|
((= (-> this name) (text-id progress-demo-exit))
|
|
(case *kernel-boot-message*
|
|
(('demo-shared)
|
|
(set! *master-exit* 'force)
|
|
(set-master-mode 'game)
|
|
)
|
|
(('demo)
|
|
(set! (-> *game-info* mode) 'play)
|
|
(initialize! *game-info* 'game (the-as game-save #f) "demo-restart")
|
|
)
|
|
)
|
|
)
|
|
((= (-> this name) (text-id progress-continue-without-saving))
|
|
(progress-intro-start (logtest? (-> *game-info* purchase-secrets) (game-secrets hero-mode)))
|
|
)
|
|
((= (-> this next-state) 'back)
|
|
(pop-state arg0)
|
|
)
|
|
(else
|
|
(sound-play "generic-beep")
|
|
(push-state arg0)
|
|
(set-next-state arg0 (-> this next-state) 0)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-unlocked-menu-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(let ((s4-0 (memcard-unlocked-secrets? #t)))
|
|
(logclear! (-> *game-info* purchase-secrets) (game-secrets hero-mode))
|
|
(logclear! (-> *game-info* secrets) (game-secrets hero-mode))
|
|
(when (not (-> *progress-state* secrets-unlocked))
|
|
(set! (-> *progress-state* secrets-unlocked) #f)
|
|
(set! (-> arg0 state-pos) 0)
|
|
(set-next-state arg0 'secrets-insufficient-space 0)
|
|
)
|
|
(cond
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(cond
|
|
((and (= (-> this name) (text-id progress-main-secrets-scrapbook)) (logtest? s4-0 (game-secrets scrap-book-1)))
|
|
(sound-play "generic-beep")
|
|
(cond
|
|
((send-event (handle->process (-> *game-info* controller 0)) 'scrap-book 1)
|
|
(set-next-state arg0 'go-away 0)
|
|
)
|
|
(else
|
|
(set! (-> *game-info* demo-state) (the-as uint 201))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(initialize! *game-info* 'game (the-as game-save #f) "title-restart")
|
|
)
|
|
)
|
|
)
|
|
((and (= (-> this name) (text-id progress-main-secrets-mega-scrapbook))
|
|
(logtest? s4-0 (game-secrets scrap-book-2))
|
|
)
|
|
(sound-play "generic-beep")
|
|
(cond
|
|
((send-event (handle->process (-> *game-info* controller 0)) 'scrap-book 2)
|
|
(set-next-state arg0 'go-away 0)
|
|
)
|
|
(else
|
|
(set! (-> *game-info* demo-state) (the-as uint 202))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(initialize! *game-info* 'game (the-as game-save #f) "title-restart")
|
|
)
|
|
)
|
|
)
|
|
((and (= (-> this name) (text-id progress-main-secrets-scrapbook-3))
|
|
(logtest? s4-0 (game-secrets scrap-book-3))
|
|
)
|
|
(sound-play "generic-beep")
|
|
(cond
|
|
((send-event (handle->process (-> *game-info* controller 0)) 'scrap-book 3)
|
|
(set-next-state arg0 'go-away 0)
|
|
)
|
|
(else
|
|
(set! (-> *game-info* demo-state) (the-as uint 203))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(initialize! *game-info* 'game (the-as game-save #f) "title-restart")
|
|
)
|
|
)
|
|
)
|
|
((and (= (-> this name) (text-id progress-main-secrets-sceneplayer-1))
|
|
(logtest? s4-0 (game-secrets scene-player-1))
|
|
)
|
|
(set! (-> *progress-state* scene-player-act) 1)
|
|
(sound-play "generic-beep")
|
|
(push-state arg0)
|
|
(set-next-state arg0 'select-scene 0)
|
|
)
|
|
((and (= (-> this name) (text-id progress-main-secrets-sceneplayer-2))
|
|
(logtest? s4-0 (game-secrets scene-player-2))
|
|
)
|
|
(set! (-> *progress-state* scene-player-act) 2)
|
|
(sound-play "generic-beep")
|
|
(push-state arg0)
|
|
(set-next-state arg0 'select-scene 0)
|
|
)
|
|
((and (= (-> this name) (text-id progress-main-secrets-sceneplayer-3))
|
|
(logtest? s4-0 (game-secrets scene-player-3))
|
|
)
|
|
(set! (-> *progress-state* scene-player-act) 3)
|
|
(sound-play "generic-beep")
|
|
(push-state arg0)
|
|
(set-next-state arg0 'select-scene 0)
|
|
)
|
|
((and (= (-> this name) (text-id progress-main-secrets-hero-mode)) (logtest? s4-0 (game-secrets hero-mode)))
|
|
(sound-play "generic-beep")
|
|
(push-state arg0)
|
|
(set-next-state arg0 'select-save-title-hero 0)
|
|
)
|
|
((and (= (-> this name) (text-id progress-main-secrets-levelselect))
|
|
(logtest? s4-0 (game-secrets level-select))
|
|
)
|
|
(sound-play "generic-beep")
|
|
(push-state arg0)
|
|
(set-next-state arg0 'select-start 0)
|
|
)
|
|
((= (-> this next-state) 'back)
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
)
|
|
((not (-> arg0 selected-option))
|
|
(let ((a0-131 (-> arg0 current-options options)))
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(when (!= (length a0-131) 1)
|
|
)
|
|
(cond
|
|
((> (-> arg0 want-option-index) 0)
|
|
(set! (-> arg0 want-option-index) -1)
|
|
)
|
|
((< -2 (-> arg0 want-option-index))
|
|
(+! (-> arg0 want-option-index) -1)
|
|
)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(when (!= (length a0-131) 1)
|
|
)
|
|
(cond
|
|
((< (-> arg0 want-option-index) 0)
|
|
(set! (-> arg0 want-option-index) 1)
|
|
)
|
|
((< (-> arg0 want-option-index) 2)
|
|
(+! (-> arg0 want-option-index) 1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-memcard-slot-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(memcard-unlocked-secrets? #t)
|
|
(let ((a1-2 (get-state-check-card arg0 (-> arg0 current))))
|
|
(set-next-state arg0 a1-2 0)
|
|
)
|
|
(set! (-> arg0 selected-option) #f)
|
|
(when (-> *bigmap* progress-minimap)
|
|
(cond
|
|
((cpad-pressed? 0 triangle)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(let ((s5-0 #f))
|
|
*progress-save-info*
|
|
(set! (-> *progress-state* which-slot) (-> arg0 option-index))
|
|
(cond
|
|
((= (-> arg0 current) 'select-load)
|
|
(when (= (-> *progress-save-info* file (-> arg0 option-index) present) 1)
|
|
(set! s5-0 #t)
|
|
(set-next-state arg0 'loading 0)
|
|
)
|
|
)
|
|
((= (-> *progress-save-info* file (-> *progress-state* which-slot) present) 1)
|
|
(set! s5-0 #t)
|
|
(menu-update-purchase-secrets (the-as menu-secret-option (-> *secret-options* options 0)))
|
|
(set-next-state arg0 'already-exists 0)
|
|
)
|
|
(else
|
|
(set! s5-0 #t)
|
|
(menu-update-purchase-secrets (the-as menu-secret-option (-> *secret-options* options 0)))
|
|
(set-next-state arg0 'saving 0)
|
|
)
|
|
)
|
|
(if s5-0
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-already-exists-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(let ((s4-0 (&-> *progress-state* yes-no-choice))
|
|
(a1-2 (get-state-check-card arg0 'select-save))
|
|
(gp-0 #f)
|
|
)
|
|
(if (!= a1-2 'select-save)
|
|
(set-next-state arg0 a1-2 0)
|
|
)
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(set! gp-0 (not (-> s4-0 0)))
|
|
(set! (-> s4-0 0) #t)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(set! gp-0 (-> s4-0 0))
|
|
(set! (-> s4-0 0) #f)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(cond
|
|
((-> *progress-state* yes-no-choice)
|
|
(sound-play "generic-beep")
|
|
(set-next-state arg0 'saving 0)
|
|
)
|
|
((begin (sound-play "generic-beep") (= (-> arg0 state-stack 0) 'title))
|
|
(set-next-state arg0 'select-save-title 0)
|
|
)
|
|
(else
|
|
(set-next-state arg0 'select-save 0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if gp-0
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-create-game-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(let ((s4-0 (&-> *progress-state* yes-no-choice))
|
|
(gp-0 #f)
|
|
)
|
|
(let ((a1-2 (get-state-check-card arg0 'select-save)))
|
|
(if (!= a1-2 'select-save)
|
|
(set-next-state arg0 a1-2 0)
|
|
)
|
|
)
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(set! gp-0 (not (-> s4-0 0)))
|
|
(set! (-> s4-0 0) #t)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(set! gp-0 (-> s4-0 0))
|
|
(set! (-> s4-0 0) #f)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(cond
|
|
((-> *progress-state* yes-no-choice)
|
|
(set-next-state arg0 'creating 0)
|
|
)
|
|
((= (-> arg0 state-stack 0) 'title)
|
|
(sound-play "generic-beep")
|
|
(sound-volume-off)
|
|
(progress-intro-start (logtest? (-> *game-info* purchase-secrets) (game-secrets hero-mode)))
|
|
)
|
|
(else
|
|
(sound-play "generic-beep")
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if gp-0
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-insufficient-space-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(let ((s5-0 (&-> *progress-state* yes-no-choice))
|
|
(s3-0 (get-state-check-card arg0 'select-save))
|
|
)
|
|
(cond
|
|
((or (= (-> *progress-state* starting-state) 'insufficient-space)
|
|
(= (-> *progress-state* starting-state) 'no-memory-card)
|
|
)
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(when (and (not (-> s5-0 0)) (not (-> *progress-state* clear-screen)))
|
|
(sound-play "generic-beep")
|
|
(set! (-> s5-0 0) #t)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(when (and (-> s5-0 0) (not (-> *progress-state* clear-screen)))
|
|
(sound-play "generic-beep")
|
|
(set! (-> s5-0 0) #f)
|
|
)
|
|
)
|
|
((and (cpad-pressed? 0 confirm) (!= (-> arg0 current) 'none))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(set! (-> *progress-state* clear-screen) #t)
|
|
(cond
|
|
((-> s5-0 0)
|
|
(sound-play "generic-beep")
|
|
(pop-state arg0)
|
|
)
|
|
((and (not (-> s5-0 0))
|
|
(!= (get-state-check-card arg0 'select-save) 'insufficient-space)
|
|
(!= (get-state-check-card arg0 'select-save) 'no-memory-card)
|
|
)
|
|
(pop-state arg0)
|
|
)
|
|
(else
|
|
(sound-play "generic-beep")
|
|
(set! (-> this last-move) (current-time))
|
|
(set! (-> arg0 current) 'none)
|
|
(set-next-state arg0 s3-0 0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(let ((a1-9 'select-save-title-hero))
|
|
'select-save
|
|
(cond
|
|
((and (= (-> *progress-state* starting-state) 'main)
|
|
(not (logtest? (-> *game-info* purchase-secrets) (game-secrets hero-mode)))
|
|
)
|
|
(set! a1-9 'select-save)
|
|
)
|
|
((and (= (-> *progress-state* starting-state) 'title)
|
|
(not (logtest? (-> *game-info* purchase-secrets) (game-secrets hero-mode)))
|
|
)
|
|
(set! a1-9 'select-save-title)
|
|
)
|
|
)
|
|
(let ((a1-10 (get-state-check-card arg0 a1-9)))
|
|
(set-next-state arg0 a1-10 0)
|
|
)
|
|
)
|
|
(cond
|
|
((and (cpad-pressed? 0 triangle)
|
|
(or (= (-> *progress-state* starting-state) 'title) (= (-> *progress-state* starting-state) 'main))
|
|
)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(cond
|
|
((= (-> arg0 state-stack 0) 'title)
|
|
(sound-play "generic-beep")
|
|
(sound-volume-off)
|
|
(progress-intro-start (logtest? (-> *game-info* purchase-secrets) (game-secrets hero-mode)))
|
|
)
|
|
(else
|
|
(sound-play "generic-beep")
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-secrets-insufficient-space-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(&-> *progress-state* yes-no-choice)
|
|
(cond
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(sound-play "generic-beep")
|
|
(set-next-state arg0 'title 0)
|
|
)
|
|
((cpad-pressed? 0 triangle)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-video-mode-warning-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(let ((v1-1 (&-> *progress-state* yes-no-choice))
|
|
(gp-0 #f)
|
|
)
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(set! gp-0 (not (-> v1-1 0)))
|
|
(set! (-> v1-1 0) #t)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(set! gp-0 (-> v1-1 0))
|
|
(set! (-> v1-1 0) #f)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(set! (-> *progress-state* video-mode-timeout) 0)
|
|
(cond
|
|
((-> *progress-state* yes-no-choice)
|
|
(set! (-> *setting-control* user-default video-mode) (-> *progress-state* video-mode-choice))
|
|
(set! (-> *progress-state* video-mode-timeout) (current-time))
|
|
(set-next-state arg0 'video-mode-ok 0)
|
|
)
|
|
(else
|
|
(set! (-> *progress-state* video-mode-choice) 'pal)
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if gp-0
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-video-mode-ok-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(let ((v1-1 (&-> *progress-state* yes-no-choice))
|
|
(s5-0 #f)
|
|
)
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(set! s5-0 (not (-> v1-1 0)))
|
|
(set! (-> v1-1 0) #t)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(set! s5-0 (-> v1-1 0))
|
|
(set! (-> v1-1 0) #f)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(cond
|
|
((not (-> *progress-state* yes-no-choice))
|
|
(set! (-> *progress-state* video-mode-choice) 'pal)
|
|
(set! (-> *setting-control* user-default video-mode) (-> *progress-state* video-mode-choice))
|
|
(sound-play "generic-beep")
|
|
)
|
|
(else
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
(set! (-> *progress-state* video-mode-timeout) 0)
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
(if s5-0
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
(when (and (nonzero? (-> *progress-state* video-mode-timeout))
|
|
(< (seconds 10) (- (current-time) (-> *progress-state* video-mode-timeout)))
|
|
)
|
|
(set! (-> *progress-state* video-mode-timeout) 0)
|
|
(set! (-> *progress-state* video-mode-choice) 'pal)
|
|
(set! (-> *setting-control* user-default video-mode) (-> *progress-state* video-mode-choice))
|
|
(pop-state arg0)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-progressive-mode-warning-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(let ((v1-1 (&-> *progress-state* yes-no-choice))
|
|
(gp-0 #f)
|
|
)
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(set! gp-0 (not (-> v1-1 0)))
|
|
(set! (-> v1-1 0) #t)
|
|
(set! (-> *progress-state* graphic-options-progressive-scan) #t)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(set! gp-0 (-> v1-1 0))
|
|
(set! (-> *progress-state* graphic-options-progressive-scan) #f)
|
|
(set! (-> v1-1 0) #f)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(set! (-> *progress-state* progressive-mode-timeout) 0)
|
|
(cond
|
|
((-> *progress-state* yes-no-choice)
|
|
(sound-play "generic-beep")
|
|
(set-progressive-scan #t)
|
|
(set! (-> *progress-state* graphic-options-progressive-scan) #t)
|
|
(set! (-> *progress-state* progressive-mode-timeout) (current-time))
|
|
(set-next-state arg0 'progressive-mode-ok 0)
|
|
)
|
|
(else
|
|
(sound-play "generic-beep")
|
|
(set! (-> *progress-state* on-off-choice) #f)
|
|
(set! (-> *progress-state* graphic-options-progressive-scan) #f)
|
|
(set-progressive-scan #f)
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if gp-0
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-progressive-mode-ok-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(let ((v1-1 (&-> *progress-state* yes-no-choice))
|
|
(s5-0 #f)
|
|
)
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(set! s5-0 (not (-> v1-1 0)))
|
|
(set! (-> v1-1 0) #t)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(set! s5-0 (-> v1-1 0))
|
|
(set! (-> v1-1 0) #f)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(cond
|
|
((not (-> *progress-state* yes-no-choice))
|
|
(set! (-> *setting-control* user-default use-progressive-scan) #f)
|
|
(set! (-> *progress-state* graphic-options-progressive-scan) #f)
|
|
(sound-play "generic-beep")
|
|
)
|
|
(else
|
|
(sound-play "generic-beep")
|
|
(set! (-> *progress-state* graphic-options-progressive-scan) #t)
|
|
)
|
|
)
|
|
(set! (-> *progress-state* progressive-mode-timeout) 0)
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
(if s5-0
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
(when (and (nonzero? (-> *progress-state* progressive-mode-timeout))
|
|
(< (seconds 10) (- (current-time) (-> *progress-state* progressive-mode-timeout)))
|
|
)
|
|
(set! (-> *progress-state* progressive-mode-timeout) 0)
|
|
(set! (-> *setting-control* user-default use-progressive-scan) #f)
|
|
(set! (-> *progress-state* graphic-options-progressive-scan) #f)
|
|
(set-progressive-scan #f)
|
|
(pop-state arg0)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-card-removed-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(when (cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(sound-play "generic-beep")
|
|
(pop-state arg0)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-insert-card-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
*progress-save-info*
|
|
(cond
|
|
((= (get-state-check-card arg0 'select-load) 'select-load)
|
|
(set-next-state arg0 'select-load 0)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(sound-play "generic-beep")
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-error-loading-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(when (cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(sound-play "generic-beep")
|
|
(pop-state arg0)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-error-auto-saving-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(when (cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(sound-play "generic-beep")
|
|
(pop-state arg0)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-error-disc-removed-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(when (cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(when (is-cd-in?)
|
|
(sound-play "generic-beep")
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-error-reading-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(when (cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(sound-play "generic-beep")
|
|
(pop-state arg0)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-icon-info-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(when (cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(sound-play "generic-beep")
|
|
(pop-state arg0)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-quit-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(let ((v1-1 (&-> *progress-state* yes-no-choice))
|
|
(gp-0 #f)
|
|
)
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(set! gp-0 (not (-> v1-1 0)))
|
|
(set! (-> v1-1 0) #t)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(set! gp-0 (-> v1-1 0))
|
|
(set! (-> v1-1 0) #f)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(cond
|
|
((-> *progress-state* yes-no-choice)
|
|
(sound-volume-off)
|
|
(set! (-> *game-info* mode) 'play)
|
|
(case *kernel-boot-message*
|
|
(('demo-shared 'demo)
|
|
(initialize! *game-info* 'game (the-as game-save #f) "demo-start")
|
|
)
|
|
(else
|
|
(initialize! *game-info* 'game (the-as game-save #f) "title-restart")
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(sound-play "generic-beep")
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if gp-0
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-format-card-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(let ((s4-0 (&-> *progress-state* yes-no-choice))
|
|
(gp-0 #f)
|
|
)
|
|
(let ((a1-2 (get-state-check-card arg0 (-> arg0 current))))
|
|
(set-next-state arg0 a1-2 0)
|
|
)
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(set! gp-0 (not (-> s4-0 0)))
|
|
(set! (-> s4-0 0) #t)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(set! gp-0 (-> s4-0 0))
|
|
(set! (-> s4-0 0) #f)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(cond
|
|
((-> *progress-state* yes-no-choice)
|
|
(sound-play "generic-beep")
|
|
(set-next-state arg0 'formatting 0)
|
|
)
|
|
((= (-> arg0 state-stack 0) 'title)
|
|
(sound-play "generic-beep")
|
|
(sound-volume-off)
|
|
(progress-intro-start (logtest? (-> *game-info* purchase-secrets) (game-secrets hero-mode)))
|
|
)
|
|
(else
|
|
(sound-play "generic-beep")
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if gp-0
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
;; WARN: disable def twice: 110. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare.
|
|
(defmethod respond-progress ((this menu-select-start-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(set! (-> arg0 sliding-height) (seek-ease
|
|
(-> arg0 sliding-height)
|
|
0.0
|
|
(* 0.1 (-> self clock time-adjust-ratio))
|
|
0.3
|
|
(* 0.001 (-> self clock time-adjust-ratio))
|
|
)
|
|
)
|
|
(let ((s4-0 #f))
|
|
(memcard-unlocked-secrets? #t)
|
|
(when (not (-> *progress-state* secrets-unlocked))
|
|
(set! (-> *progress-state* secrets-unlocked) #f)
|
|
(set! (-> arg0 state-pos) 0)
|
|
(set-next-state arg0 'secrets-insufficient-space 0)
|
|
)
|
|
(cond
|
|
((or (cpad-pressed? 0 up l-analog-up)
|
|
(and (cpad-hold? 0 up l-analog-up) (>= (- (current-time) (-> this last-move)) (seconds 0.2)))
|
|
)
|
|
(set! (-> this last-move) (current-time))
|
|
(when (> (-> this task-index) 0)
|
|
(set! s4-0 #t)
|
|
(+! (-> this task-index) -1)
|
|
(set! (-> arg0 sliding-height) -1.0)
|
|
)
|
|
)
|
|
((or (cpad-pressed? 0 down l-analog-down)
|
|
(and (cpad-hold? 0 down l-analog-down) (>= (- (current-time) (-> this last-move)) (seconds 0.2)))
|
|
)
|
|
(set! (-> this last-move) (current-time))
|
|
(let ((s3-0 -1))
|
|
(dotimes (s2-0 (-> *game-info* play-list length))
|
|
(let* ((v1-41 (-> *game-info* play-list s2-0))
|
|
(a0-20 (-> arg0 current))
|
|
(a0-22 (cond
|
|
((= a0-20 'select-pre-start)
|
|
(or (-> v1-41 play-continue) (-> v1-41 pre-play-continue))
|
|
)
|
|
((= a0-20 'select-kiosk-start)
|
|
(-> v1-41 kiosk-play-continue)
|
|
)
|
|
(else
|
|
(-> v1-41 play-continue)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (and a0-22 (lookup-text! *common-text* (-> v1-41 text-name) #t))
|
|
(+! s3-0 1)
|
|
)
|
|
)
|
|
)
|
|
(when (< (-> this task-index) s3-0)
|
|
(set! s4-0 #t)
|
|
(+! (-> this task-index) 1)
|
|
(set! (-> arg0 sliding-height) 1.0)
|
|
)
|
|
)
|
|
)
|
|
;; og:preserve-this - Added to make scrolling these menus faster (jak3 has this)
|
|
((or (cpad-pressed? 0 left l-analog-left) (and (cpad-hold? 0 left l-analog-left) (>= (- (current-time) (-> this last-move)) (seconds 0.075))))
|
|
(when (> (-> this task-index) 0)
|
|
(set! (-> this last-move) (current-time))
|
|
(set! s4-0 #t)
|
|
(set! (-> this task-index) (max (- (-> this task-index) 5) 0))
|
|
(set! (-> arg0 sliding-height) 0.0)))
|
|
;; og:preserve-this - Added to make scrolling these menus faster (jak3 has this)
|
|
((or (cpad-pressed? 0 right l-analog-right) (and (cpad-hold? 0 right l-analog-right) (>= (- (current-time) (-> this last-move)) (seconds 0.075))))
|
|
(let ((max-task-index -1))
|
|
(dotimes (s2-0 (-> *game-info* play-list length))
|
|
(let* ((v1-41 (-> *game-info* play-list s2-0))
|
|
(a0-20 (-> arg0 current))
|
|
(a0-22 (cond
|
|
((= a0-20 'select-pre-start)
|
|
(or (-> v1-41 play-continue) (-> v1-41 pre-play-continue))
|
|
)
|
|
((= a0-20 'select-kiosk-start)
|
|
(-> v1-41 kiosk-play-continue)
|
|
)
|
|
(else
|
|
(-> v1-41 play-continue)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (and a0-22 (lookup-text! *common-text* (-> v1-41 text-name) #t))
|
|
(+! max-task-index 1)
|
|
)
|
|
)
|
|
)
|
|
(when (< (-> this task-index) max-task-index)
|
|
(set! (-> this last-move) (current-time))
|
|
(set! s4-0 #t)
|
|
(set! (-> this task-index) (min (+ (-> this task-index) 5) max-task-index))
|
|
(set! (-> arg0 sliding-height) 0.0))))
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(sound-play "generic-beep")
|
|
(let* ((t9-6 play-task)
|
|
(a0-40 (-> this real-task-index))
|
|
(a1-8 'debug)
|
|
(v1-64 (-> arg0 current))
|
|
(a1-9 (t9-6 (the-as game-task a0-40) a1-8 (cond
|
|
((= v1-64 'select-pre-start)
|
|
'pre-play
|
|
)
|
|
((= v1-64 'select-kiosk-start)
|
|
'kiosk
|
|
)
|
|
(else
|
|
'play
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(start 'play (get-continue-by-name *game-info* a1-9))
|
|
)
|
|
(set-master-mode 'game)
|
|
)
|
|
)
|
|
(if s4-0
|
|
(sound-play "secrets-scroll")
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-select-scene-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(set! (-> arg0 sliding-height) (seek-ease
|
|
(-> arg0 sliding-height)
|
|
0.0
|
|
(* 0.1 (-> self clock time-adjust-ratio))
|
|
0.3
|
|
(* 0.01 (-> self clock time-adjust-ratio))
|
|
)
|
|
)
|
|
(let ((gp-0 #f))
|
|
(let ((s4-0 *hud-select-scene-act1*))
|
|
(memcard-unlocked-secrets? #t)
|
|
(when (not (-> *progress-state* secrets-unlocked))
|
|
(set! (-> *progress-state* secrets-unlocked) #f)
|
|
(set! (-> arg0 state-pos) 0)
|
|
(set-next-state arg0 'secrets-insufficient-space 0)
|
|
)
|
|
(case (-> *progress-state* scene-player-act)
|
|
((1)
|
|
(set! s4-0 *hud-select-scene-act1*)
|
|
)
|
|
((2)
|
|
(set! s4-0 *hud-select-scene-act2*)
|
|
)
|
|
((3)
|
|
(set! s4-0 *hud-select-scene-act3*)
|
|
)
|
|
)
|
|
(cond
|
|
((or (cpad-pressed? 0 up l-analog-up)
|
|
(and (cpad-hold? 0 up l-analog-up) (>= (- (current-time) (-> this last-move)) (seconds 0.2)))
|
|
)
|
|
(set! (-> this last-move) (current-time))
|
|
(when (> (-> this task-index) 0)
|
|
(set! gp-0 #t)
|
|
(+! (-> this task-index) -1)
|
|
(set! (-> arg0 sliding-height) -1.0)
|
|
)
|
|
)
|
|
((or (cpad-pressed? 0 down l-analog-down)
|
|
(and (cpad-hold? 0 down l-analog-down) (>= (- (current-time) (-> this last-move)) (seconds 0.2)))
|
|
)
|
|
(set! (-> this last-move) (current-time))
|
|
(when (< (-> this task-index) (+ (length s4-0) -1))
|
|
(set! gp-0 #t)
|
|
(+! (-> this task-index) 1)
|
|
(set! (-> arg0 sliding-height) 1.0)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(sound-play "generic-beep")
|
|
(let ((s3-2 *display-profile*))
|
|
(play-clean 'debug)
|
|
(set! *display-profile* s3-2)
|
|
)
|
|
(set! (-> *game-info* mode) 'play)
|
|
(let ((s5-1 (-> s4-0 (-> this task-index))))
|
|
(set! (-> *game-info* demo-state) (the-as uint 100))
|
|
(logior! (-> *game-info* secrets) (game-secrets scene-player-1))
|
|
(process-spawn scene-player :init scene-player-init (-> s5-1 info) #t (-> s5-1 continue))
|
|
)
|
|
(set-master-mode 'game)
|
|
)
|
|
)
|
|
)
|
|
(if gp-0
|
|
(sound-play "secrets-scroll")
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-bigmap-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(handle-cpad-inputs *bigmap*)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-missions-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(set! (-> arg0 sliding-height) (seek-ease
|
|
(-> arg0 sliding-height)
|
|
0.0
|
|
(* 0.1 (-> self clock time-adjust-ratio))
|
|
0.3
|
|
(* 0.01 (-> self clock time-adjust-ratio))
|
|
)
|
|
)
|
|
(let ((s5-0 #f))
|
|
(cond
|
|
((or (cpad-pressed? 0 up l-analog-up)
|
|
(and (cpad-hold? 0 up l-analog-up) (>= (- (current-time) (-> this last-move)) (seconds 0.2)))
|
|
)
|
|
(set! (-> this last-move) (current-time))
|
|
(when (> (-> this task-line-index) 0)
|
|
(set! s5-0 #t)
|
|
(+! (-> this task-line-index) -1)
|
|
(set! (-> arg0 sliding-height) -1.0)
|
|
)
|
|
)
|
|
((or (cpad-pressed? 0 down l-analog-down)
|
|
(and (cpad-hold? 0 down l-analog-down) (>= (- (current-time) (-> this last-move)) (seconds 0.2)))
|
|
)
|
|
(set! (-> this last-move) (current-time))
|
|
(when (< (-> this task-line-index) (+ (-> *progress-state* total-num-tasks) -1))
|
|
(+! (-> this task-line-index) 1)
|
|
(set! (-> arg0 sliding-height) 1.0)
|
|
(set! s5-0 #t)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 triangle confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle confirm))
|
|
(if (!= (-> *progress-state* starting-state) 'title)
|
|
(sound-play "window-contract")
|
|
(sound-play "generic-beep")
|
|
)
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
(if s5-0
|
|
(sound-play "mission-scroll")
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-highscores-option) (progress progress) (selected? symbol))
|
|
"Handle progress menu navigation logic."
|
|
(set! (-> progress sliding) (seek-ease
|
|
(-> progress sliding)
|
|
0.0
|
|
(* 0.1 (-> self clock time-adjust-ratio))
|
|
0.3
|
|
(* 0.001 (-> self clock time-adjust-ratio))
|
|
)
|
|
)
|
|
(set! (-> progress sliding-off) (seek-ease
|
|
(-> progress sliding-off)
|
|
1.0
|
|
(* 0.1 (-> self clock time-adjust-ratio))
|
|
-0.3
|
|
(* 0.001 (-> self clock time-adjust-ratio))
|
|
)
|
|
)
|
|
(when (-> *bigmap* progress-minimap)
|
|
(let ((play-sound? #f))
|
|
(cond
|
|
((or (cpad-pressed? 0 right l-analog-right)
|
|
(and (cpad-hold? 0 right l-analog-right) (>= (- (current-time) (-> this last-move)) (seconds 0.2)))
|
|
)
|
|
(when (< 1 (get-num-highscores))
|
|
(set! (-> this last-move) (current-time))
|
|
(set! play-sound? #t)
|
|
(set! (-> this prev-page-index) (-> this page-index))
|
|
(set! (-> this page-index) (get-next-highscore (-> this page-index)))
|
|
(set! (-> progress sliding) 1.0)
|
|
(set! (-> progress sliding-off) 0.0)
|
|
(set! (-> this slide-dir) -1.0)
|
|
)
|
|
)
|
|
((or (cpad-pressed? 0 left l-analog-left)
|
|
(and (cpad-hold? 0 left l-analog-left) (>= (- (current-time) (-> this last-move)) (seconds 0.2)))
|
|
)
|
|
(when (< 1 (get-num-highscores))
|
|
(set! (-> this last-move) (current-time))
|
|
(set! (-> this prev-page-index) (-> this page-index))
|
|
(set! (-> this page-index) (get-prev-highscore (-> this page-index)))
|
|
(set! play-sound? #t)
|
|
(set! (-> progress sliding) -1.0)
|
|
(set! (-> progress sliding-off) 0.0)
|
|
(set! (-> this slide-dir) 1.0)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 triangle confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle confirm))
|
|
(set! (-> progress sliding) 0.0)
|
|
(set! (-> progress sliding-off) 1.0)
|
|
(if (!= (-> *progress-state* starting-state) 'title)
|
|
(sound-play "window-contract")
|
|
(sound-play "generic-beep")
|
|
)
|
|
(pop-state progress)
|
|
)
|
|
)
|
|
(if play-sound?
|
|
(sound-play "score-slide")
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-secret-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(let* ((s5-1 (logtest? (-> *game-info* secrets) (game-secrets hero-mode)))
|
|
(s3-0 (if (not s5-1)
|
|
0
|
|
(-> this num-items)
|
|
)
|
|
)
|
|
(s2-0 (if (not s5-1)
|
|
(+ (-> this num-items) -1)
|
|
(+ (-> this num-items) -1 (-> this num-hero-items))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> arg0 sliding) (seek-ease
|
|
(-> arg0 sliding)
|
|
0.0
|
|
(* 0.1 (-> self clock time-adjust-ratio))
|
|
0.3
|
|
(* 0.001 (-> self clock time-adjust-ratio))
|
|
)
|
|
)
|
|
(cond
|
|
((and s5-1 (< (-> this item-index) s3-0))
|
|
(set! (-> this item-index) s3-0)
|
|
(set! (-> this prev-item-index) s3-0)
|
|
)
|
|
((and (not s5-1) (< s2-0 (-> this item-index)))
|
|
(set! (-> this item-index) s3-0)
|
|
(set! (-> this prev-item-index) s3-0)
|
|
)
|
|
)
|
|
(menu-update-purchase-secrets this)
|
|
(when (-> *bigmap* progress-minimap)
|
|
(let ((s5-2 #f))
|
|
(cond
|
|
((= arg1 #t)
|
|
(when (cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(sound-play "generic-beep")
|
|
(set! (-> arg0 selected-option) #f)
|
|
)
|
|
)
|
|
(else
|
|
(cond
|
|
((or (cpad-pressed? 0 down l-analog-down)
|
|
(and (cpad-hold? 0 down l-analog-down) (>= (- (current-time) (-> this last-move)) (seconds 0.2)))
|
|
)
|
|
(set! (-> this last-move) (current-time))
|
|
(when (< (-> this item-index) s2-0)
|
|
(set! (-> this prev-item-index) (-> this item-index))
|
|
(set! s5-2 #t)
|
|
(+! (-> this item-index) 1)
|
|
(set! (-> arg0 sliding) 1.0)
|
|
(set! (-> arg0 sliding-off) 0.0)
|
|
)
|
|
)
|
|
((or (cpad-pressed? 0 up l-analog-up)
|
|
(and (cpad-hold? 0 up l-analog-up) (>= (- (current-time) (-> this last-move)) (seconds 0.2)))
|
|
)
|
|
(set! (-> this last-move) (current-time))
|
|
(when (< s3-0 (-> this item-index))
|
|
(set! (-> this prev-item-index) (-> this item-index))
|
|
(+! (-> this item-index) -1)
|
|
(set! s5-2 #t)
|
|
(set! (-> arg0 sliding) -1.0)
|
|
(set! (-> arg0 sliding-off) 0.0)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(let ((v1-74 (-> this item-index)))
|
|
(-> this secret-items v1-74 cost)
|
|
(let ((a0-54 (-> this secret-items v1-74 flag))
|
|
(a1-9 (= (-> this secret-items v1-74 can-toggle) #t))
|
|
)
|
|
(-> this secret-items v1-74 avail-after)
|
|
(the int (-> *game-info* skill))
|
|
(cond
|
|
((and (logtest? (-> *game-info* purchase-secrets) a0-54) a1-9)
|
|
(set! (-> arg0 selected-option) #t)
|
|
(sound-play "generic-beep")
|
|
)
|
|
((= (-> this secret-items v1-74 can-toggle) 'auto)
|
|
)
|
|
((logtest? (-> *game-info* purchase-secrets) a0-54)
|
|
(set! (-> arg0 selected-option) #t)
|
|
(sound-play "generic-beep")
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 triangle)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
(if (!= (-> *progress-state* starting-state) 'title)
|
|
(sound-play "window-contract")
|
|
(sound-play "generic-beep")
|
|
)
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
(if s5-2
|
|
(sound-play "secrets-scroll")
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-game-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(-> *progress-state* game-options-vibrations)
|
|
(-> *progress-state* game-options-subtitles)
|
|
(let ((gp-0 #f))
|
|
(load-level-text-files (the-as int (-> *setting-control* user-current language)))
|
|
(cond
|
|
((= (-> *progress-state* game-options-item-picked) #f)
|
|
(cond
|
|
((or (cpad-pressed? 0 down l-analog-down)
|
|
(and (cpad-hold? 0 down l-analog-down)
|
|
(>= (- (current-time) (the-as int (-> *progress-state* game-options-last-move))) (seconds 0.5))
|
|
)
|
|
)
|
|
(set! (-> *progress-state* game-options-last-move) (current-time))
|
|
(cond
|
|
((< (-> *progress-state* game-options-item-selected) 3)
|
|
(+! (-> *progress-state* game-options-item-selected) 1)
|
|
)
|
|
(else
|
|
(set! (-> *progress-state* game-options-item-selected) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((or (cpad-pressed? 0 up l-analog-up)
|
|
(and (cpad-hold? 0 up l-analog-up)
|
|
(>= (- (current-time) (the-as int (-> *progress-state* game-options-last-move))) (seconds 0.5))
|
|
)
|
|
)
|
|
(set! (-> *progress-state* game-options-last-move) (current-time))
|
|
(if (> (-> *progress-state* game-options-item-selected) 0)
|
|
(+! (-> *progress-state* game-options-item-selected) -1)
|
|
(set! (-> *progress-state* game-options-item-selected) 3)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(set! (-> *progress-state* game-options-last-move) (current-time))
|
|
(set! (-> *progress-state* game-options-item-picked) (the-as basic #t))
|
|
(sound-play "generic-beep")
|
|
)
|
|
((cpad-pressed? 0 triangle)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
(if (= (-> *progress-state* starting-state) 'main)
|
|
(sound-play "window-contract")
|
|
(sound-play "generic-beep")
|
|
)
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
)
|
|
((-> *progress-state* game-options-item-picked)
|
|
(cond
|
|
((cpad-pressed? 0 triangle)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
(set! (-> *progress-state* game-options-item-picked) #f)
|
|
(set! (-> *progress-state* game-options-vibrations) (-> *setting-control* user-default vibration))
|
|
(set! (-> *progress-state* game-options-subtitles) (-> *setting-control* user-default subtitle))
|
|
(set! (-> *progress-state* game-options-language-index)
|
|
(the-as int (-> *setting-control* user-default language))
|
|
)
|
|
(set! (-> *progress-state* game-options-subtitle-language-index)
|
|
(the-as int (-> *setting-control* user-default subtitle-language))
|
|
)
|
|
)
|
|
((cpad-pressed? 0 up l-analog-up)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons up l-analog-up))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons up l-analog-up))
|
|
)
|
|
((cpad-pressed? 0 down l-analog-down)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons down l-analog-down))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons down l-analog-down))
|
|
)
|
|
((and (zero? (-> *progress-state* game-options-item-selected)) (cpad-pressed? 0 left l-analog-left))
|
|
(sound-play "generic-beep")
|
|
(when (not (-> *progress-state* game-options-vibrations))
|
|
(set! (-> *cpad-list* cpads 0 buzz-pause-val 0) (the-as uint 255))
|
|
(set! (-> *cpad-list* cpads 0 buzz-pause-time) (the-as uint 15))
|
|
(set! (-> *progress-state* game-options-vibrations) #t)
|
|
)
|
|
)
|
|
((and (= (-> *progress-state* game-options-item-selected) 1) (cpad-pressed? 0 left l-analog-left))
|
|
(sound-play "generic-beep")
|
|
(if (not (-> *progress-state* game-options-subtitles))
|
|
(set! (-> *progress-state* game-options-subtitles) #t)
|
|
)
|
|
)
|
|
((and (= (-> *progress-state* game-options-item-selected) 2) (cpad-pressed? 0 left l-analog-left))
|
|
(sound-play "generic-beep")
|
|
(if (zero? (-> *progress-state* game-options-subtitle-language-index))
|
|
(set! (-> *progress-state* game-options-subtitle-language-index) 6)
|
|
(+! (-> *progress-state* game-options-subtitle-language-index) -1)
|
|
)
|
|
)
|
|
((and (= (-> *progress-state* game-options-item-selected) 3) (cpad-pressed? 0 left l-analog-left))
|
|
(sound-play "generic-beep")
|
|
(if (zero? (-> *progress-state* game-options-language-index))
|
|
(set! (-> *progress-state* game-options-language-index) 6)
|
|
(+! (-> *progress-state* game-options-language-index) -1)
|
|
)
|
|
)
|
|
((and (zero? (-> *progress-state* game-options-item-selected)) (cpad-pressed? 0 right l-analog-right))
|
|
(sound-play "generic-beep")
|
|
(set! (-> *progress-state* game-options-vibrations) #f)
|
|
)
|
|
((and (= (-> *progress-state* game-options-item-selected) 1) (cpad-pressed? 0 right l-analog-right))
|
|
(sound-play "generic-beep")
|
|
(set! (-> *progress-state* game-options-subtitles) #f)
|
|
)
|
|
((and (= (-> *progress-state* game-options-item-selected) 2) (cpad-pressed? 0 right l-analog-right))
|
|
(sound-play "generic-beep")
|
|
(cond
|
|
((= (-> *progress-state* game-options-subtitle-language-index) 6)
|
|
(set! (-> *progress-state* game-options-subtitle-language-index) 0)
|
|
0
|
|
)
|
|
(else
|
|
(+! (-> *progress-state* game-options-subtitle-language-index) 1)
|
|
)
|
|
)
|
|
)
|
|
((and (= (-> *progress-state* game-options-item-selected) 3) (cpad-pressed? 0 right l-analog-right))
|
|
(sound-play "generic-beep")
|
|
(cond
|
|
((= (-> *progress-state* game-options-language-index) 6)
|
|
(set! (-> *progress-state* game-options-language-index) 0)
|
|
0
|
|
)
|
|
(else
|
|
(+! (-> *progress-state* game-options-language-index) 1)
|
|
)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(sound-play "generic-beep")
|
|
(if (zero? (-> *progress-state* game-options-item-selected))
|
|
(set! (-> *setting-control* user-default vibration) (-> *progress-state* game-options-vibrations))
|
|
)
|
|
(if (= (-> *progress-state* game-options-item-selected) 1)
|
|
(set! (-> *setting-control* user-default subtitle) (-> *progress-state* game-options-subtitles))
|
|
)
|
|
(if (= (-> *progress-state* game-options-item-selected) 2)
|
|
(set! (-> *setting-control* user-default subtitle-language)
|
|
(the-as language-enum (-> *progress-state* game-options-subtitle-language-index))
|
|
)
|
|
)
|
|
(when (= (-> *progress-state* game-options-item-selected) 3)
|
|
(set! (-> *setting-control* user-default language)
|
|
(the-as language-enum (-> *progress-state* game-options-language-index))
|
|
)
|
|
(load-level-text-files (-> *progress-state* game-options-language-index))
|
|
)
|
|
(set! (-> *progress-state* game-options-item-picked) #f)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (and gp-0 (-> *progress-state* game-options-item-picked))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defun update-center-screen ((arg0 menu-graphic-option) (arg1 progress) (arg2 symbol))
|
|
(let ((v1-0 #f))
|
|
(cond
|
|
(#t
|
|
(cond
|
|
((cpad-hold? 0 left l-analog-left)
|
|
(set! (-> *setting-control* user-default display-dx)
|
|
(min-max-wrap-around (+ (-> *setting-control* user-default display-dx) -2) -96 96)
|
|
)
|
|
(set! v1-0 #t)
|
|
)
|
|
((cpad-hold? 0 right l-analog-right)
|
|
(set! (-> *setting-control* user-default display-dx)
|
|
(min-max-wrap-around (+ (-> *setting-control* user-default display-dx) 2) -96 96)
|
|
)
|
|
(set! v1-0 #t)
|
|
)
|
|
((cpad-hold? 0 up l-analog-up)
|
|
(set! (-> *setting-control* user-default display-dy)
|
|
(min-max-wrap-around (+ (-> *setting-control* user-default display-dy) -2) -48 48)
|
|
)
|
|
(set! v1-0 #f)
|
|
)
|
|
((cpad-hold? 0 down l-analog-down)
|
|
(set! (-> *setting-control* user-default display-dy)
|
|
(min-max-wrap-around (+ (-> *setting-control* user-default display-dy) 2) -48 48)
|
|
)
|
|
(set! v1-0 #f)
|
|
)
|
|
((cpad-pressed? 0 triangle)
|
|
(set! (-> *setting-control* user-default display-dx) (-> *progress-state* center-x-backup))
|
|
(set! (-> *setting-control* user-default display-dy) (-> *progress-state* center-y-backup))
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(when (cpad-pressed? 0 confirm)
|
|
(set! (-> *progress-state* center-x-backup) (-> *setting-control* user-default display-dx))
|
|
(set! (-> *progress-state* center-y-backup) (-> *setting-control* user-default display-dy))
|
|
)
|
|
)
|
|
)
|
|
(when v1-0
|
|
(when (< (seconds 0.3) (- (current-time) (-> *progress-state* last-slider-sound)))
|
|
(set! (-> *progress-state* last-slider-sound) (current-time))
|
|
(sound-play "roll-over")
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-graphic-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(-> *progress-state* graphic-options-aspect-ratio)
|
|
(-> *progress-state* graphic-options-progressive-scan)
|
|
(-> *progress-state* video-mode-choice)
|
|
(cond
|
|
((= (-> *progress-state* graphic-options-item-picked) #f)
|
|
(cond
|
|
((or (cpad-pressed? 0 down l-analog-down)
|
|
(and (cpad-hold? 0 down l-analog-down)
|
|
(>= (- (current-time) (-> *progress-state* graphic-options-last-move)) (seconds 0.5))
|
|
)
|
|
)
|
|
(set! (-> *progress-state* graphic-options-last-move) (current-time))
|
|
(set! (-> arg0 selected-option) #f)
|
|
(cond
|
|
((< (-> *progress-state* graphic-options-item-selected) (if (= (scf-get-territory) GAME_TERRITORY_SCEE)
|
|
3
|
|
2
|
|
)
|
|
)
|
|
(+! (-> *progress-state* graphic-options-item-selected) 1)
|
|
(set! (-> arg0 option-index) (-> *progress-state* graphic-options-item-selected))
|
|
)
|
|
(else
|
|
(set! (-> *progress-state* graphic-options-item-selected) 0)
|
|
(set! (-> arg0 option-index) (-> *progress-state* graphic-options-item-selected))
|
|
)
|
|
)
|
|
)
|
|
((or (cpad-pressed? 0 up l-analog-up)
|
|
(and (cpad-hold? 0 up l-analog-up)
|
|
(>= (- (current-time) (-> *progress-state* graphic-options-last-move)) (seconds 0.5))
|
|
)
|
|
)
|
|
(set! (-> *progress-state* graphic-options-last-move) (current-time))
|
|
(set! (-> arg0 selected-option) #f)
|
|
(cond
|
|
((> (-> *progress-state* graphic-options-item-selected) 0)
|
|
(+! (-> *progress-state* graphic-options-item-selected) -1)
|
|
(set! (-> arg0 option-index) (-> *progress-state* graphic-options-item-selected))
|
|
)
|
|
(else
|
|
(set! (-> *progress-state* graphic-options-item-selected) (if (= (scf-get-territory) GAME_TERRITORY_SCEE)
|
|
3
|
|
2
|
|
)
|
|
)
|
|
(set! (-> arg0 option-index) (-> *progress-state* graphic-options-item-selected))
|
|
)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(set! (-> *progress-state* graphic-options-last-move) (current-time))
|
|
(set! (-> *progress-state* graphic-options-item-picked) #t)
|
|
(set! (-> arg0 selected-option) #f)
|
|
(sound-play "generic-beep")
|
|
)
|
|
((cpad-pressed? 0 triangle)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
(if (= (-> *progress-state* starting-state) 'main)
|
|
(sound-play "window-contract")
|
|
(sound-play "generic-beep")
|
|
)
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
)
|
|
((-> *progress-state* graphic-options-item-picked)
|
|
(cond
|
|
((and (cpad-pressed? 0 square) (zero? (-> *progress-state* graphic-options-item-selected)))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons square))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons square))
|
|
(set! (-> *setting-control* user-default display-dx) 0)
|
|
(set! (-> *setting-control* user-default display-dy) 8)
|
|
(sound-play "generic-beep")
|
|
)
|
|
((cpad-pressed? 0 triangle)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
(set! (-> *progress-state* graphic-options-item-picked) #f)
|
|
(set! (-> *progress-state* graphic-options-aspect-ratio) (get-aspect-ratio))
|
|
(set! (-> *progress-state* graphic-options-progressive-scan)
|
|
(-> *setting-control* user-default use-progressive-scan)
|
|
)
|
|
(set! (-> *progress-state* video-mode-choice) (get-video-mode))
|
|
)
|
|
((and (zero? (-> *progress-state* graphic-options-item-selected))
|
|
(cpad-pressed? 0 up right down left l-analog-up l-analog-right l-analog-down l-analog-left)
|
|
)
|
|
(update-center-screen this arg0 #t)
|
|
)
|
|
((and (= (-> *progress-state* graphic-options-item-selected) 1) (cpad-pressed? 0 left l-analog-left))
|
|
(sound-play "generic-beep")
|
|
(set! (-> *progress-state* graphic-options-aspect-ratio) 'aspect4x3)
|
|
)
|
|
((and (= (-> *progress-state* graphic-options-item-selected) 2) (cpad-pressed? 0 left l-analog-left))
|
|
(sound-play "generic-beep")
|
|
(if (not (-> *progress-state* graphic-options-progressive-scan))
|
|
(set! (-> *progress-state* graphic-options-progressive-scan) #t)
|
|
)
|
|
)
|
|
((and (= (-> *progress-state* graphic-options-item-selected) 3) (cpad-pressed? 0 left l-analog-left))
|
|
(sound-play "generic-beep")
|
|
(if (!= (-> *progress-state* video-mode-choice) 'pal)
|
|
(set! (-> *progress-state* video-mode-choice) 'pal)
|
|
)
|
|
)
|
|
((and (= (-> *progress-state* graphic-options-item-selected) 1) (cpad-pressed? 0 right l-analog-right))
|
|
(sound-play "generic-beep")
|
|
(set! (-> *progress-state* graphic-options-aspect-ratio) 'aspect16x9)
|
|
)
|
|
((and (= (-> *progress-state* graphic-options-item-selected) 2) (cpad-pressed? 0 right l-analog-right))
|
|
(when (-> *progress-state* graphic-options-progressive-scan)
|
|
(sound-play "generic-beep")
|
|
(set! (-> *progress-state* graphic-options-progressive-scan) #f)
|
|
(set! (-> *setting-control* user-default use-progressive-scan) #f)
|
|
)
|
|
)
|
|
((and (= (-> *progress-state* graphic-options-item-selected) 3) (cpad-pressed? 0 right l-analog-right))
|
|
(sound-play "generic-beep")
|
|
(if (!= (-> *progress-state* video-mode-choice) 'ntsc)
|
|
(set! (-> *progress-state* video-mode-choice) 'ntsc)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(sound-play "generic-beep")
|
|
(if (zero? (-> *progress-state* graphic-options-item-selected))
|
|
(update-center-screen this arg0 #t)
|
|
)
|
|
(when (= (-> *progress-state* graphic-options-item-selected) 1)
|
|
(if (!= (-> *progress-state* graphic-options-aspect-ratio) (-> *setting-control* user-default aspect-ratio))
|
|
(set! (-> *setting-control* user-default aspect-ratio) (-> *progress-state* graphic-options-aspect-ratio))
|
|
)
|
|
)
|
|
(when (and (= (-> *progress-state* graphic-options-item-selected) 2)
|
|
(-> *progress-state* graphic-options-progressive-scan)
|
|
(not (-> *setting-control* user-default use-progressive-scan))
|
|
)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(push-state arg0)
|
|
(set-next-state arg0 'progressive-mode-warning 0)
|
|
)
|
|
(when (and (= (-> *progress-state* graphic-options-item-selected) 3)
|
|
(!= (-> *setting-control* user-default video-mode) (-> *progress-state* video-mode-choice))
|
|
)
|
|
(let ((a0-173 (-> *progress-state* video-mode-choice)))
|
|
(case a0-173
|
|
(('pal)
|
|
(set! (-> *setting-control* user-default video-mode) a0-173)
|
|
)
|
|
(('ntsc)
|
|
(push-state arg0)
|
|
(set-next-state arg0 'video-mode-warning 0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> *progress-state* graphic-options-item-picked) #f)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defun update-restart-quit ((arg0 menu-option) (arg1 progress) (arg2 symbol))
|
|
(let ((v1-1 (&-> *progress-state* yes-no-choice))
|
|
(gp-0 #f)
|
|
)
|
|
(when arg2
|
|
(cond
|
|
((cpad-pressed? 0 left l-analog-left)
|
|
(when (not (-> v1-1 0))
|
|
(set! gp-0 #t)
|
|
(set! (-> v1-1 0) #t)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 right l-analog-right)
|
|
(set! gp-0 (-> v1-1 0))
|
|
(set! (-> v1-1 0) #f)
|
|
(format #t "HL ~A~%" (-> v1-1 0))
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(cond
|
|
((and (-> v1-1 0) (= (-> arg0 name) (text-id progress-root-restart-mission)))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(restart-mission)
|
|
(set-next-state arg1 'go-away 0)
|
|
)
|
|
((and (-> v1-1 0) (= (-> arg0 name) (text-id progress-quit)))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(initialize! *game-info* 'game (the-as game-save #f) "title-restart")
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when gp-0
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod respond-progress ((this menu-qr-option) (arg0 progress) (arg1 symbol))
|
|
"Handle progress menu navigation logic."
|
|
(-> *progress-state* qr-options-restart)
|
|
(-> *progress-state* qr-options-quit)
|
|
(cond
|
|
((= (-> *progress-state* qr-options-item-picked) #f)
|
|
(set! (-> arg0 selected-option) #f)
|
|
(set! (-> arg0 option-index) (-> *progress-state* qr-options-item-selected))
|
|
(cond
|
|
((or (cpad-pressed? 0 down l-analog-down)
|
|
(and (cpad-hold? 0 down l-analog-down)
|
|
(>= (- (current-time) (the-as int (-> *progress-state* qr-options-last-move))) (seconds 0.5))
|
|
)
|
|
)
|
|
(set! (-> *progress-state* qr-options-last-move) (current-time))
|
|
(cond
|
|
((< (-> *progress-state* qr-options-item-selected) 1)
|
|
(+! (-> *progress-state* qr-options-item-selected) 1)
|
|
(set! (-> arg0 selected-option) #f)
|
|
(set! (-> arg0 option-index) 0)
|
|
0
|
|
)
|
|
(else
|
|
(set! (-> *progress-state* qr-options-item-selected) 0)
|
|
(set! (-> arg0 selected-option) #f)
|
|
(set! (-> arg0 option-index) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((or (cpad-pressed? 0 up l-analog-up)
|
|
(and (cpad-hold? 0 up l-analog-up)
|
|
(>= (- (current-time) (the-as int (-> *progress-state* qr-options-last-move))) (seconds 0.5))
|
|
)
|
|
)
|
|
(set! (-> *progress-state* qr-options-last-move) (current-time))
|
|
(cond
|
|
((> (-> *progress-state* qr-options-item-selected) 0)
|
|
(+! (-> *progress-state* qr-options-item-selected) -1)
|
|
(set! (-> arg0 selected-option) #f)
|
|
(set! (-> arg0 option-index) 1)
|
|
)
|
|
(else
|
|
(set! (-> *progress-state* qr-options-item-selected) 1)
|
|
(set! (-> arg0 selected-option) #f)
|
|
(set! (-> arg0 option-index) 1)
|
|
)
|
|
)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(set! (-> *progress-state* qr-options-last-move) (current-time))
|
|
(set! (-> *progress-state* qr-options-item-picked) (the-as basic #t))
|
|
(set! (-> arg0 selected-option) #t)
|
|
(sound-play "generic-beep")
|
|
)
|
|
((cpad-pressed? 0 triangle)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
(if (!= (-> *progress-state* starting-state) 'title)
|
|
(sound-play "window-contract")
|
|
(sound-play "generic-beep")
|
|
)
|
|
(pop-state arg0)
|
|
)
|
|
)
|
|
)
|
|
((-> *progress-state* qr-options-item-picked)
|
|
(cond
|
|
((and (cpad-pressed? 0 triangle) (zero? (-> *progress-state* qr-options-item-selected)))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
(sound-play "generic-beep")
|
|
(set! (-> *progress-state* qr-options-item-picked) #f)
|
|
(set! (-> arg0 selected-option) #f)
|
|
(set! (-> *progress-state* yes-no-choice) #f)
|
|
)
|
|
((and (cpad-pressed? 0 triangle) (= (-> *progress-state* qr-options-item-selected) 1))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
(sound-play "generic-beep")
|
|
(set! (-> *progress-state* qr-options-item-picked) #f)
|
|
(set! (-> arg0 selected-option) #f)
|
|
(set! (-> *progress-state* yes-no-choice) #f)
|
|
)
|
|
((and (zero? (-> *progress-state* qr-options-item-selected)) (cpad-pressed? 0 left l-analog-left))
|
|
(sound-play "generic-beep")
|
|
(update-restart-quit this arg0 #t)
|
|
)
|
|
((and (zero? (-> *progress-state* qr-options-item-selected)) (cpad-pressed? 0 right l-analog-right))
|
|
(sound-play "generic-beep")
|
|
(update-restart-quit this arg0 #t)
|
|
)
|
|
((and (= (-> *progress-state* qr-options-item-selected) 1) (cpad-pressed? 0 left l-analog-left))
|
|
(sound-play "generic-beep")
|
|
(update-restart-quit this arg0 #t)
|
|
)
|
|
((and (= (-> *progress-state* qr-options-item-selected) 1) (cpad-pressed? 0 right l-analog-right))
|
|
(sound-play "generic-beep")
|
|
(update-restart-quit this arg0 #t)
|
|
)
|
|
((cpad-pressed? 0 triangle)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
(set! (-> *progress-state* qr-options-item-picked) #f)
|
|
(set! (-> arg0 selected-option) #f)
|
|
(set! (-> *progress-state* yes-no-choice) #f)
|
|
)
|
|
((cpad-pressed? 0 confirm)
|
|
(sound-play "generic-beep")
|
|
(when (zero? (-> *progress-state* qr-options-item-selected))
|
|
(set! (-> arg0 selected-option) #t)
|
|
(set! (-> arg0 option-index) 0)
|
|
(update-restart-quit this arg0 #t)
|
|
)
|
|
(when (= (-> *progress-state* qr-options-item-selected) 1)
|
|
(set! (-> arg0 selected-option) #t)
|
|
(set! (-> arg0 option-index) 1)
|
|
(update-restart-quit this arg0 #t)
|
|
)
|
|
(set! (-> *progress-state* qr-options-item-picked) #f)
|
|
(set! (-> *progress-state* yes-no-choice) #f)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|