;;-*-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 (text-language? japanese) ;; og:preserve-this text-language patch (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) ) ;; added for pc port ((and (= (-> this name) (text-id progress-music-player)) (pc-cheats? (-> *pc-settings* cheats) music-player) ) (sound-play "generic-beep") (push-state arg0) (set-next-state arg0 'music-player 0) ) ) ) ((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* ((hero? (logtest? (-> *game-info* secrets) (game-secrets hero-mode))) (min-item (if (not hero?) 0 (-> this num-items) ) ) (max-item (if (not hero?) (+ (-> 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 hero? (< (-> this item-index) min-item)) (set! (-> this item-index) min-item) (set! (-> this prev-item-index) min-item) ) ((and (not hero?) (< max-item (-> this item-index))) (set! (-> this item-index) min-item) (set! (-> this prev-item-index) min-item) ) ) (menu-update-purchase-secrets this) (when (-> *bigmap* progress-minimap) (let ((scroll-sound? #f)) (cond ((= arg1 #t) (when (cpad-pressed? 0 confirm) (cpad-clear! 0 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) (time-elapsed? (-> this last-move) (seconds 0.2))) ) (set-time! (-> this last-move)) (when (< (-> this item-index) max-item) (set! (-> this prev-item-index) (-> this item-index)) (set! scroll-sound? #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) (time-elapsed? (-> this last-move) (seconds 0.2))) ) (set-time! (-> this last-move)) (when (< min-item (-> this item-index)) (set! (-> this prev-item-index) (-> this item-index)) (+! (-> this item-index) -1) (set! scroll-sound? #t) (set! (-> arg0 sliding) -1.0) (set! (-> arg0 sliding-off) 0.0) ) ) ((cpad-pressed? 0 confirm) (cpad-clear! 0 confirm) (let ((item (-> this item-index))) (-> this secret-items item cost) (let ((flag (-> this secret-items item flag)) (on-off? (= (-> this secret-items item can-toggle) #t)) ) (-> this secret-items item avail-after) (the int (-> *game-info* skill)) (cond ((and (logtest? (-> *game-info* purchase-secrets) flag) on-off?) (set! (-> arg0 selected-option) #t) (sound-play "generic-beep") ) ((= (-> this secret-items item can-toggle) 'auto) ) ((logtest? (-> *game-info* purchase-secrets) flag) (set! (-> arg0 selected-option) #t) (sound-play "generic-beep") ) ) ) ) ) ((cpad-pressed? 0 triangle) (cpad-clear! 0 triangle) (if (!= (-> *progress-state* starting-state) 'title) (sound-play "window-contract") (sound-play "generic-beep") ) (pop-state arg0) ) ) (if scroll-sound? (sound-play "secrets-scroll") ) ) ) ) ) ) (cpad-clear! 0 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 (#if PC_PORT (-> *pc-settings* text-language) (-> *setting-control* user-current language)))) ;; og:preserve-this text-language patch (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 )