mirror of
https://github.com/open-goal/jak-project
synced 2026-08-13 12:19:35 -04:00
93afb02cf4
This includes all the collision stuff needed to spawn `target`, decompiles the sparticle code and adds some of the PC hacks needed for merc to run (it doesn't work quite right and looks bad, likely due to a combination of code copied from Jak 2 and the time of day hacks). There are a bunch of temporary hacks (see commits) in place to prevent the game from crashing quite as much, but it is still extremely prone to doing so due to lots of missing functions/potentially bad decomp. --------- Co-authored-by: water <awaterford111445@gmail.com>
2018 lines
69 KiB
Common Lisp
Vendored
Generated
2018 lines
69 KiB
Common Lisp
Vendored
Generated
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; definition for function set-letterbox-frames
|
|
;; WARN: Return type mismatch time-frame vs none.
|
|
(defun set-letterbox-frames ((arg0 time-frame))
|
|
"Enable letterbox for the given amount of time."
|
|
(with-pp
|
|
(set! (-> *game-info* letterbox-time)
|
|
(+ (-> *display* base-clock frame-counter)
|
|
(the int (/ (* (the float arg0) (-> *display* game-clock clock-ratio)) (-> pp clock clock-ratio)))
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
;; definition for function letterbox
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defun letterbox ((arg0 bucket-id) (arg1 float))
|
|
"Draw letterbox"
|
|
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
arg0
|
|
)
|
|
(draw-sprite2d-xy-absolute s4-0 0 0 512 (the int (* 46.0 arg1)) (new 'static 'rgba :a #x80) #x3fffff)
|
|
(draw-sprite2d-xy-absolute
|
|
s4-0
|
|
0
|
|
(- 416 (the int (* 46.0 arg1)))
|
|
512
|
|
(+ (the int (* 46.0 arg1)) 1)
|
|
(new 'static 'rgba :a #x80)
|
|
#x3fffff
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for function set-blackout-frames
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defun set-blackout-frames ((arg0 time-frame))
|
|
"Enable blackout for the given amount of time."
|
|
(with-pp
|
|
(if (zero? arg0)
|
|
(set! (-> *game-info* blackout-time) (-> *display* base-clock frame-counter))
|
|
(set! (-> *game-info* blackout-time)
|
|
(the-as
|
|
time-frame
|
|
(max
|
|
(-> *game-info* blackout-time)
|
|
(+ (-> *display* base-clock frame-counter)
|
|
(the int (/ (* (the float arg0) (-> *display* game-clock clock-ratio)) (-> pp clock clock-ratio)))
|
|
arg0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
;; definition for function blackout
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defun blackout ((arg0 bucket-id))
|
|
"Draw blackout as a sprite."
|
|
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
arg0
|
|
)
|
|
(draw-sprite2d-xy-absolute s4-0 0 0 512 416 (new 'static 'rgba :a #x80) #x3fffff)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for function add-blackout
|
|
(defun add-blackout ((arg0 time-frame) (r int) (g int) (b int) (arg4 int))
|
|
"Update display settings to do blackout with GS pmode alp."
|
|
(let ((v1-0 *display*))
|
|
(let ((a0-1 (new 'static 'array time-frame 2 (seconds 0) (seconds 0))))
|
|
(set! (-> v1-0 bgcolor r) r)
|
|
(set! (-> v1-0 bgcolor g) g)
|
|
(set! (-> v1-0 bgcolor b) b)
|
|
(set! (-> v1-0 pmode alp) (- 255 arg4))
|
|
(set! (-> a0-1 0) 0)
|
|
(set! (-> a0-1 1) 0)
|
|
)
|
|
(if (nonzero? arg4)
|
|
(set! (-> v1-0 force-sync) (the-as uint (max 4 (the-as int (-> v1-0 force-sync)))))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
;; definition for function paused?
|
|
(defun paused? ()
|
|
"Are we paused? Counts any type of pause/menu/freeze."
|
|
(or (= *master-mode* 'pause) (= *master-mode* 'progress) (= *master-mode* 'menu) (= *master-mode* 'freeze))
|
|
)
|
|
|
|
;; definition for function movie?
|
|
(defun movie? ()
|
|
"Are we in a movie?"
|
|
(logtest? (-> *kernel-context* prevent-from-run) (process-mask movie))
|
|
)
|
|
|
|
;; definition for function scene-select?
|
|
(defun scene-select? ()
|
|
(and (>= (-> *game-info* demo-state) (the-as uint 100)) (< (-> *game-info* demo-state) (the-as uint 200)))
|
|
)
|
|
|
|
;; definition for function demo?
|
|
(defun demo? ()
|
|
"Is this a demo version?"
|
|
(or (= *kernel-boot-message* 'demo) (= *kernel-boot-message* 'demo-shared))
|
|
)
|
|
|
|
;; definition for function kiosk?
|
|
(defun kiosk? ()
|
|
"Is this a kiosk version of the game?"
|
|
(= *kernel-boot-message* 'kiosk)
|
|
)
|
|
|
|
;; definition for symbol *last-master-mode*, type symbol
|
|
(define *last-master-mode* 'game)
|
|
|
|
;; definition for function set-master-mode
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defun set-master-mode ((arg0 symbol))
|
|
"Change the master mode and adjust a few masks"
|
|
(when (!= arg0 *master-mode*)
|
|
(set! *last-master-mode* *master-mode*)
|
|
(set! *master-mode* arg0)
|
|
(case *master-mode*
|
|
(('pause)
|
|
(if (not *debug-pause*)
|
|
(logior! (-> *setting-control* user-default process-mask) (process-mask pause))
|
|
)
|
|
(logclear! (-> *setting-control* user-default process-mask) (process-mask freeze menu))
|
|
(set! *pause-lock* #f)
|
|
(sound-group-pause (the-as sound-group #xffffffff))
|
|
(set! (-> *game-info* pause-start-time) (-> *display* real-clock frame-counter))
|
|
)
|
|
(('freeze)
|
|
(logior! (-> *setting-control* user-default process-mask) (process-mask freeze))
|
|
(logclear! (-> *setting-control* user-default process-mask) (process-mask pause menu))
|
|
(sound-group-pause (sound-group sfx ambient))
|
|
(set! (-> *game-info* pause-start-time) (-> *display* real-clock frame-counter))
|
|
)
|
|
(('menu)
|
|
(logior! (-> *setting-control* user-default process-mask) (process-mask menu))
|
|
(logclear! (-> *setting-control* user-default process-mask) (process-mask freeze pause progress))
|
|
(sound-group-pause (the-as sound-group #xffffffff))
|
|
(set! *pause-lock* #f)
|
|
)
|
|
(('progress)
|
|
(logclear! (-> *setting-control* user-default process-mask) (process-mask freeze pause menu))
|
|
(sound-group-pause (the-as sound-group #xffffffff))
|
|
(when (not *progress-process*)
|
|
(activate-progress *dproc* 'main)
|
|
(if (not *progress-process*)
|
|
(set-master-mode 'game)
|
|
)
|
|
)
|
|
(set! (-> *game-info* pause-start-time) (-> *display* real-clock frame-counter))
|
|
)
|
|
(('game)
|
|
(logclear! (-> *setting-control* user-default process-mask) (process-mask freeze pause menu))
|
|
(sound-group-continue (the-as sound-group #xffffffff))
|
|
)
|
|
)
|
|
(apply-settings *setting-control*)
|
|
)
|
|
(if *debug-segment*
|
|
(menu-respond-to-pause)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for function pause-allowed?
|
|
(defun pause-allowed? ()
|
|
"Should we allow a pause?"
|
|
(not (or (< (-> *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-pause))
|
|
(handle->process (-> *game-info* auto-save-proc))
|
|
(= *master-mode* 'freeze)
|
|
(not *target*)
|
|
*master-exit*
|
|
(not *common-text*)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for function toggle-pause
|
|
(defun toggle-pause ()
|
|
"Update the pause state. Call this if the user presses a pause button
|
|
This function will check the button and state and do a pause if needed."
|
|
(case *master-mode*
|
|
(('game)
|
|
(set-master-mode
|
|
(cond
|
|
((and (logtest? (-> *cpad-list* cpads 0 valid) 128)
|
|
*target*
|
|
(>= (-> *display* base-clock frame-counter) (-> *game-info* blackout-time))
|
|
(= (-> *setting-control* user-current bg-a) 0.0)
|
|
(and (= (-> *setting-control* user-current bg-a-force) 0.0)
|
|
(< (seconds 1003) (-> *display* real-clock frame-counter))
|
|
)
|
|
)
|
|
(if (or *progress-process* (not (-> *setting-control* user-current allow-pause)))
|
|
*master-mode*
|
|
'pause
|
|
)
|
|
)
|
|
((and (cpad-pressed? 0 select start) (cpad-hold? 0 l3) *debug-segment*)
|
|
'menu
|
|
)
|
|
((and (or (cpad-hold? 0 select) (cpad-hold? 0 r2)) *debug-segment*)
|
|
'pause
|
|
)
|
|
((and (not *debug-segment*) (not (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons start))))
|
|
(if (pause-allowed?)
|
|
'pause
|
|
*master-mode*
|
|
)
|
|
)
|
|
((not (progress-allowed?))
|
|
(if (pause-allowed?)
|
|
'pause
|
|
*master-mode*
|
|
)
|
|
)
|
|
((cpad-hold? 0 start)
|
|
'progress
|
|
)
|
|
(else
|
|
*master-mode*
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(('menu)
|
|
(set-master-mode (cond
|
|
((and *debug-segment* (cpad-hold? 0 l3) (cpad-pressed? 0 select start))
|
|
'menu
|
|
)
|
|
((cpad-hold? 0 select r2)
|
|
(if *debug-segment*
|
|
'pause
|
|
*master-mode*
|
|
)
|
|
)
|
|
((cpad-hold? 0 r3 r2 triangle circle)
|
|
'game
|
|
)
|
|
((cpad-hold? 0 start)
|
|
'game
|
|
)
|
|
(else
|
|
*master-mode*
|
|
)
|
|
)
|
|
)
|
|
(set! *pause-lock* #f)
|
|
)
|
|
(('pause)
|
|
(set-master-mode (cond
|
|
((and (cpad-pressed? 0 select start) (cpad-hold? 0 l3) *debug-segment*)
|
|
'menu
|
|
)
|
|
((and (or (not *debug-segment*) (not *cheat-mode*)) (cpad-hold? 0 select))
|
|
'game
|
|
)
|
|
((and *cheat-mode* (cpad-hold? 0 select r2))
|
|
'game
|
|
)
|
|
((cpad-hold? 0 start)
|
|
'game
|
|
)
|
|
(else
|
|
*master-mode*
|
|
)
|
|
)
|
|
)
|
|
(set! *pause-lock* (and *cheat-mode* (cpad-hold? 0 r2)))
|
|
)
|
|
(('freeze)
|
|
(set-master-mode (if (and (cpad-pressed? 0 select start) (cpad-hold? 0 l3) *debug-segment*)
|
|
'menu
|
|
*master-mode*
|
|
)
|
|
)
|
|
)
|
|
(('progress)
|
|
(if (cpad-hold? 0 start)
|
|
(hide-progress-screen)
|
|
)
|
|
(set! *pause-lock* (and *cheat-mode* (cpad-hold? 0 r2)))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
;; definition for symbol *screen-filter*, type screen-filter
|
|
(define *screen-filter* (new 'static 'screen-filter :draw? #f :bucket (bucket-id tex-hud-pris2)))
|
|
|
|
;; definition for method 9 of type screen-filter
|
|
;; WARN: Return type mismatch int vs none.
|
|
;; WARN: Function (method 9 screen-filter) has a return type of none, but the expression builder found a return statement.
|
|
(defmethod draw ((this screen-filter))
|
|
"Add DMA data to our bucket to draw the filter."
|
|
(local-vars (v1-1 float))
|
|
(rlet ((vf0 :class vf)
|
|
(vf1 :class vf)
|
|
(vf2 :class vf)
|
|
(vf3 :class vf)
|
|
(vf4 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(when (not (paused?))
|
|
(.lvf vf4 (&-> this extra quad))
|
|
(.lvf vf1 (&-> this color-dest quad))
|
|
(.lvf vf2 (&-> this color quad))
|
|
(.sub.vf vf3 vf1 vf2)
|
|
(.add.x.vf vf4 vf4 vf4 :mask #b10)
|
|
(.min.w.vf vf4 vf4 vf0 :mask #b10)
|
|
(.max.y.vf vf4 vf4 vf0 :mask #b10)
|
|
(.mul.y.vf vf3 vf3 vf4)
|
|
(.add.vf vf1 vf2 vf3)
|
|
(.svf (&-> this extra quad) vf4)
|
|
(.svf (&-> this color quad) vf1)
|
|
(.mov v1-1 vf1)
|
|
)
|
|
(let ((f0-0 0.1))
|
|
(when (and (>= f0-0 (fabs (- (-> this color-dest x) (-> this color x))))
|
|
(>= f0-0 (fabs (- (-> this color-dest y) (-> this color y))))
|
|
(>= f0-0 (fabs (- (-> this color-dest z) (-> this color z))))
|
|
(>= f0-0 (fabs (- (-> this color-dest w) (-> this color w))))
|
|
(>= f0-0 (-> this color w))
|
|
)
|
|
(disable this)
|
|
(return 0)
|
|
)
|
|
)
|
|
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
|
(-> this bucket)
|
|
)
|
|
(dma-buffer-add-gs-set s4-0 (test-1 (-> this ztest)))
|
|
(let ((t1-0 (new 'static 'rgba
|
|
:r (the int (-> this color x))
|
|
:g (the int (-> this color y))
|
|
:b (the int (-> this color z))
|
|
:a (the int (-> this color w))
|
|
)
|
|
)
|
|
)
|
|
(draw-sprite2d-xy s4-0 -256 -208 512 416 t1-0 (-> this depth))
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
)
|
|
|
|
;; definition for method 10 of type screen-filter
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod setup ((this screen-filter)
|
|
(arg0 vector)
|
|
(arg1 vector)
|
|
(arg2 float)
|
|
(arg3 bucket-id)
|
|
(arg4 int)
|
|
(arg5 int)
|
|
(arg6 symbol)
|
|
)
|
|
"Initialize the screen-filter with the given settings."
|
|
(set! (-> this draw?) #t)
|
|
(set! (-> this color quad) (-> arg0 quad))
|
|
(set! (-> this color-src quad) (-> arg0 quad))
|
|
(set! (-> this color-dest quad) (-> arg1 quad))
|
|
(set! (-> this extra x) arg2)
|
|
(set! (-> this extra y) 0.0)
|
|
(set! (-> this bucket) arg3)
|
|
(set! (-> this depth) arg4)
|
|
(set! (-> this ztest) (the-as uint arg5))
|
|
(set! (-> this lock-vsync?) arg6)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 11 of type screen-filter
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod disable ((this screen-filter))
|
|
(set! (-> this draw?) #f)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for symbol *cheat-temp*, type (pointer int32)
|
|
(define *cheat-temp* (the-as (pointer int32) (malloc 'global 20)))
|
|
|
|
;; definition for symbol *master-exit*, type symbol
|
|
(define *master-exit* #f)
|
|
|
|
;; definition for symbol *progress-cheat*, type symbol
|
|
(define *progress-cheat* #f)
|
|
|
|
;; definition for symbol *first-boot*, type symbol
|
|
(define *first-boot* #t)
|
|
|
|
;; definition for function main-timeouts
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defun main-timeouts ()
|
|
"Maybe reset/restart the game if no input has been given.
|
|
Mainly used for kiosk/demo modes."
|
|
(when (demo?)
|
|
(let ((gp-0 (scf-get-timeout))
|
|
(v1-1 (scf-get-inactive-timeout))
|
|
)
|
|
(when (and (or (and (nonzero? gp-0)
|
|
(>= (+ -300000 (-> *display* real-clock frame-counter)) (the int (* 300.0 (the float gp-0))))
|
|
)
|
|
(and (nonzero? v1-1)
|
|
(or (and (>= (- (-> *display* base-clock frame-counter) (-> *cpad-list* cpads 0 change-time))
|
|
(the int (* 300.0 (the float v1-1)))
|
|
)
|
|
(>= (- (-> *display* game-clock frame-counter) (-> *game-info* kiosk-timeout))
|
|
(the int (* 300.0 (the float v1-1)))
|
|
)
|
|
)
|
|
(and (or (= *master-mode* 'pause) (= *master-mode* 'progress) (= *master-mode* 'freeze))
|
|
(>= (- (-> *display* real-clock frame-counter) (-> *game-info* pause-start-time))
|
|
(the int (* 300.0 (the float v1-1)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(or (= *master-exit* 'force) (= *master-exit* 'movie))
|
|
)
|
|
(or *master-exit* (-> *setting-control* user-current allow-timeout))
|
|
(!= *master-exit* #t)
|
|
)
|
|
(cond
|
|
((and (= *kernel-boot-message* 'demo) (not *master-exit*))
|
|
(let ((v1-17 (level-get-target-inside *level*)))
|
|
(when (and v1-17 (!= (-> v1-17 name) 'demo) (not (logtest? (-> v1-17 info level-flags) (level-flags lf0))))
|
|
(persist-with-delay *setting-control* 'sfx-volume (seconds 0.5) 'sfx-volume 'abs 0.0 0)
|
|
(persist-with-delay *setting-control* 'music-volume (seconds 0.5) 'music-volume 'abs 0.0 0)
|
|
(persist-with-delay *setting-control* 'dialog-volume (seconds 0.5) 'dialog-volume 'abs 0.0 0)
|
|
(persist-with-delay *setting-control* 'ambient-volume (seconds 0.5) 'ambient-volume 'abs 0.0 0)
|
|
(set! (-> *setting-control* user-current sfx-volume) 0.01)
|
|
(set! (-> *setting-control* user-current music-volume) 0.01)
|
|
(set! (-> *setting-control* user-current dialog-volume) 0.01)
|
|
(set! (-> *setting-control* user-current ambient-volume) 0.01)
|
|
(apply-settings *setting-control*)
|
|
(set! (-> *game-info* mode) 'play)
|
|
(initialize! *game-info* 'game (the-as game-save #f) "title-restart" (the-as resetter-spec #f))
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(when (process-spawn-function
|
|
process
|
|
(lambda ((arg0 int))
|
|
(set-blackout-frames (seconds 100))
|
|
(set! (-> *setting-control* user-default allow-pause) #f)
|
|
(set! (-> *setting-control* user-default allow-progress) #f)
|
|
(apply-settings *setting-control*)
|
|
(set! (-> *setting-control* user-default sfx-volume) 0.0)
|
|
(set! (-> *setting-control* user-default music-volume) 0.0)
|
|
(set! (-> *setting-control* user-default dialog-volume) 0.0)
|
|
(set! (-> *setting-control* user-default ambient-volume) 0.0)
|
|
(let ((s5-0 (current-time)))
|
|
(until (time-elapsed? s5-0 (seconds 0.1))
|
|
(suspend)
|
|
)
|
|
)
|
|
(kernel-shutdown arg0)
|
|
(none)
|
|
)
|
|
(if (= *master-exit* 'movie)
|
|
2
|
|
1
|
|
)
|
|
:to *display-pool*
|
|
)
|
|
(set! (-> *setting-control* user-default sfx-volume) 0.0)
|
|
(set! (-> *setting-control* user-default music-volume) 0.0)
|
|
(set! (-> *setting-control* user-default dialog-volume) 0.0)
|
|
(set! (-> *setting-control* user-default ambient-volume) 0.0)
|
|
(set! *master-exit* #t)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(case *kernel-boot-message*
|
|
(('kiosk)
|
|
(if (and (= *master-mode* 'pause)
|
|
(>= (- (-> *display* real-clock frame-counter) (-> *cpad-list* cpads 0 real-change-time)) (seconds 60))
|
|
)
|
|
(set-master-mode 'game)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for function main-cheats
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defun main-cheats ()
|
|
(when (and (cpad-hold? 0 l3) (or *cheat-mode* (not (demo?))))
|
|
((lambda ()
|
|
(when (nonzero? (-> *cpad-list* cpads 0 button0-rel 0))
|
|
(let ((v1-5 (-> *cheat-temp* 0)))
|
|
(cond
|
|
((zero? v1-5)
|
|
(cond
|
|
((cpad-pressed? 0 up)
|
|
(+! (-> *cheat-temp* 0) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-5 1)
|
|
(cond
|
|
((cpad-pressed? 0 up)
|
|
(+! (-> *cheat-temp* 0) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-5 2)
|
|
(cond
|
|
((cpad-pressed? 0 down)
|
|
(+! (-> *cheat-temp* 0) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-5 3)
|
|
(cond
|
|
((cpad-pressed? 0 down)
|
|
(+! (-> *cheat-temp* 0) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-5 4)
|
|
(cond
|
|
((cpad-pressed? 0 left)
|
|
(+! (-> *cheat-temp* 0) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-5 5)
|
|
(cond
|
|
((cpad-pressed? 0 right)
|
|
(+! (-> *cheat-temp* 0) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-5 6)
|
|
(cond
|
|
((cpad-pressed? 0 left)
|
|
(+! (-> *cheat-temp* 0) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-5 7)
|
|
(cond
|
|
((cpad-pressed? 0 right)
|
|
(+! (-> *cheat-temp* 0) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-5 8)
|
|
(cond
|
|
((cpad-pressed? 0 x)
|
|
(+! (-> *cheat-temp* 0) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-5 9)
|
|
(cond
|
|
((cpad-pressed? 0 x)
|
|
(+! (-> *cheat-temp* 0) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-5 10)
|
|
(cond
|
|
((cpad-pressed? 0 square)
|
|
(+! (-> *cheat-temp* 0) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-5 11)
|
|
(cond
|
|
((cpad-pressed? 0 circle)
|
|
(+! (-> *cheat-temp* 0) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-5 12)
|
|
(cond
|
|
((cpad-pressed? 0 square)
|
|
(+! (-> *cheat-temp* 0) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-5 13)
|
|
(cond
|
|
((cpad-pressed? 0 circle)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons r1))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons r1))
|
|
(set! *cheat-mode* (not *cheat-mode*))
|
|
(if *cheat-mode*
|
|
(sound-play-by-spec (static-sound-spec "menu-pick" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
(sound-play-by-spec (static-sound-spec "menu-back" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
)
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 0) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when *cheat-mode*
|
|
(when (nonzero? (-> *cpad-list* cpads 0 button0-rel 0))
|
|
(let ((v1-146 (-> *cheat-temp* 1)))
|
|
(cond
|
|
((zero? v1-146)
|
|
(cond
|
|
((cpad-pressed? 0 circle)
|
|
(+! (-> *cheat-temp* 1) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-146 1)
|
|
(cond
|
|
((cpad-pressed? 0 square)
|
|
(+! (-> *cheat-temp* 1) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-146 2)
|
|
(cond
|
|
((cpad-pressed? 0 circle)
|
|
(+! (-> *cheat-temp* 1) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-146 3)
|
|
(cond
|
|
((cpad-pressed? 0 square)
|
|
(+! (-> *cheat-temp* 1) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-146 4)
|
|
(cond
|
|
((cpad-pressed? 0 x)
|
|
(+! (-> *cheat-temp* 1) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-146 5)
|
|
(cond
|
|
((cpad-pressed? 0 x)
|
|
(+! (-> *cheat-temp* 1) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-146 6)
|
|
(cond
|
|
((cpad-pressed? 0 right)
|
|
(+! (-> *cheat-temp* 1) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-146 7)
|
|
(cond
|
|
((cpad-pressed? 0 left)
|
|
(+! (-> *cheat-temp* 1) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-146 8)
|
|
(cond
|
|
((cpad-pressed? 0 right)
|
|
(+! (-> *cheat-temp* 1) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-146 9)
|
|
(cond
|
|
((cpad-pressed? 0 left)
|
|
(+! (-> *cheat-temp* 1) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-146 10)
|
|
(cond
|
|
((cpad-pressed? 0 down)
|
|
(+! (-> *cheat-temp* 1) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-146 11)
|
|
(cond
|
|
((cpad-pressed? 0 down)
|
|
(+! (-> *cheat-temp* 1) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-146 12)
|
|
(cond
|
|
((cpad-pressed? 0 up)
|
|
(+! (-> *cheat-temp* 1) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-146 13)
|
|
(cond
|
|
((cpad-pressed? 0 up)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons r1))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons r1))
|
|
(set! *cheat-mode* (if (= *cheat-mode* 'debug)
|
|
#t
|
|
'debug
|
|
)
|
|
)
|
|
(if (= *cheat-mode* 'debug)
|
|
(sound-play-by-spec (static-sound-spec "menu-pick" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
(sound-play-by-spec (static-sound-spec "menu-back" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
)
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 1) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
((lambda ()
|
|
(scf-get-territory)
|
|
(when (nonzero? (-> *cpad-list* cpads 0 button0-rel 0))
|
|
(let ((v1-6 (-> *cheat-temp* 2)))
|
|
(cond
|
|
((zero? v1-6)
|
|
(cond
|
|
((cpad-pressed? 0 l1)
|
|
(+! (-> *cheat-temp* 2) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 2) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-6 1)
|
|
(cond
|
|
((cpad-pressed? 0 r1)
|
|
(+! (-> *cheat-temp* 2) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 2) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-6 2)
|
|
(cond
|
|
((cpad-pressed? 0 l1)
|
|
(+! (-> *cheat-temp* 2) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 2) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-6 3)
|
|
(cond
|
|
((cpad-pressed? 0 r1)
|
|
(+! (-> *cheat-temp* 2) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 2) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-6 4)
|
|
(cond
|
|
((cpad-pressed? 0 triangle)
|
|
(+! (-> *cheat-temp* 2) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 2) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-6 5)
|
|
(cond
|
|
((cpad-pressed? 0 circle)
|
|
(+! (-> *cheat-temp* 2) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 2) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-6 6)
|
|
(cond
|
|
((cpad-pressed? 0 x)
|
|
(+! (-> *cheat-temp* 2) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 2) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-6 7)
|
|
(cond
|
|
((cpad-pressed? 0 square)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons r1))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons r1))
|
|
(set! *progress-cheat* (if *progress-cheat*
|
|
#f
|
|
'language
|
|
)
|
|
)
|
|
(if *progress-cheat*
|
|
(sound-play-by-spec (static-sound-spec "menu-pick" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
(sound-play-by-spec (static-sound-spec "menu-back" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
)
|
|
(set! (-> *cheat-temp* 2) 0)
|
|
0
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 2) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when *debug-segment*
|
|
(when (nonzero? (-> *cpad-list* cpads 0 button0-rel 0))
|
|
(let ((v1-94 (-> *cheat-temp* 3)))
|
|
(cond
|
|
((zero? v1-94)
|
|
(cond
|
|
((cpad-pressed? 0 x)
|
|
(+! (-> *cheat-temp* 3) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 3) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-94 1)
|
|
(cond
|
|
((cpad-pressed? 0 square)
|
|
(+! (-> *cheat-temp* 3) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 3) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-94 2)
|
|
(cond
|
|
((cpad-pressed? 0 triangle)
|
|
(+! (-> *cheat-temp* 3) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 3) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-94 3)
|
|
(cond
|
|
((cpad-pressed? 0 circle)
|
|
(+! (-> *cheat-temp* 3) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 3) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-94 4)
|
|
(cond
|
|
((cpad-pressed? 0 x)
|
|
(+! (-> *cheat-temp* 3) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 3) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-94 5)
|
|
(cond
|
|
((cpad-pressed? 0 square)
|
|
(+! (-> *cheat-temp* 3) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 3) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-94 6)
|
|
(cond
|
|
((cpad-pressed? 0 triangle)
|
|
(+! (-> *cheat-temp* 3) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 3) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-94 7)
|
|
(cond
|
|
((cpad-pressed? 0 circle)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons r1))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons r1))
|
|
(set! *progress-cheat* (if *progress-cheat*
|
|
#f
|
|
'pal
|
|
)
|
|
)
|
|
(if *progress-cheat*
|
|
(sound-play-by-spec (static-sound-spec "menu-pick" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
(sound-play-by-spec (static-sound-spec "menu-back" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
)
|
|
(set! (-> *cheat-temp* 3) 0)
|
|
0
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 3) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (nonzero? (-> *cpad-list* cpads 1 button0-rel 0))
|
|
(let ((v1-180 (-> *cheat-temp* 5)))
|
|
(cond
|
|
((zero? v1-180)
|
|
(cond
|
|
((cpad-pressed? 1 triangle)
|
|
(+! (-> *cheat-temp* 5) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 5) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-180 1)
|
|
(cond
|
|
((cpad-pressed? 1 x)
|
|
(+! (-> *cheat-temp* 5) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 5) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-180 2)
|
|
(cond
|
|
((cpad-pressed? 1 circle)
|
|
(+! (-> *cheat-temp* 5) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 5) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-180 3)
|
|
(cond
|
|
((cpad-pressed? 1 square)
|
|
(+! (-> *cheat-temp* 5) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 5) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-180 4)
|
|
(cond
|
|
((cpad-pressed? 1 triangle)
|
|
(+! (-> *cheat-temp* 5) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 5) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-180 5)
|
|
(cond
|
|
((cpad-pressed? 1 x)
|
|
(+! (-> *cheat-temp* 5) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 5) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-180 6)
|
|
(cond
|
|
((cpad-pressed? 1 circle)
|
|
(+! (-> *cheat-temp* 5) 1)
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 5) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
((= v1-180 7)
|
|
(cond
|
|
((cpad-pressed? 1 square)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons r1))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons r1))
|
|
(set! *cheat-mode* (if (= *cheat-mode* 'camera)
|
|
#f
|
|
'camera
|
|
)
|
|
)
|
|
(cond
|
|
(*cheat-mode*
|
|
(if (not *external-cam-mode*)
|
|
(external-cam-reset!)
|
|
)
|
|
(set! *external-cam-mode* 'pad-1)
|
|
(sound-play-by-spec (static-sound-spec "menu-pick" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
)
|
|
(else
|
|
(set! *external-cam-mode* #f)
|
|
(sound-play-by-spec (static-sound-spec "menu-back" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
)
|
|
)
|
|
(set! (-> *cheat-temp* 5) 0)
|
|
0
|
|
)
|
|
(else
|
|
(set! (-> *cheat-temp* 5) 0)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
)
|
|
(if (and *cheat-mode* (not *debug-segment*) (cpad-hold? 1 l3))
|
|
((lambda ()
|
|
(cond
|
|
((cpad-pressed? 1 x)
|
|
(send-event *target* 'get-pickup (pickup-type ammo-yellow) 1000.0)
|
|
(send-event *target* 'get-pickup (pickup-type ammo-red) 1000.0)
|
|
(send-event *target* 'get-pickup (pickup-type ammo-blue) 1000.0)
|
|
(send-event *target* 'get-pickup (pickup-type ammo-dark) 1000.0)
|
|
(send-event *target* 'get-pickup (pickup-type eco-pill-dark) 1000.0)
|
|
(send-event *target* 'get-pickup (pickup-type eco-pill-light) 1000.0)
|
|
(send-event *target* 'get-pickup (pickup-type skill) 1000.0)
|
|
(send-event *target* 'get-pickup (pickup-type gem) 1000.0)
|
|
(set! (-> *game-info* features)
|
|
(the-as
|
|
game-feature
|
|
(logior (game-feature
|
|
gun
|
|
gun-red-1
|
|
gun-red-2
|
|
gun-red-3
|
|
gun-yellow-1
|
|
gun-yellow-2
|
|
gun-yellow-3
|
|
gun-blue-1
|
|
gun-blue-2
|
|
gun-blue-3
|
|
gun-dark-1
|
|
gun-dark-2
|
|
gun-dark-3
|
|
board
|
|
darkjak
|
|
darkjak-smack
|
|
darkjak-bomb0
|
|
darkjak-bomb1
|
|
feature44
|
|
feature45
|
|
lightjak
|
|
lightjak-regen
|
|
lightjak-swoop
|
|
lightjak-freeze
|
|
lightjak-shield
|
|
)
|
|
(-> *game-info* features)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> *game-info* debug-features)
|
|
(the-as
|
|
game-feature
|
|
(logior (game-feature gun gun-red-1 gun-yellow-1 gun-blue-1 gun-dark-1 board darkjak lightjak)
|
|
(-> *game-info* debug-features)
|
|
)
|
|
)
|
|
)
|
|
(sound-play-by-spec (static-sound-spec "menu-pick" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
)
|
|
((and (cpad-pressed? 1 triangle) (!= *cheat-mode* 'debug))
|
|
(send-event *target* 'get-pickup (pickup-type ammo-yellow) 1000.0)
|
|
(send-event *target* 'get-pickup (pickup-type ammo-red) 1000.0)
|
|
(send-event *target* 'get-pickup (pickup-type ammo-blue) 1000.0)
|
|
(send-event *target* 'get-pickup (pickup-type ammo-dark) 1000.0)
|
|
(sound-play-by-spec (static-sound-spec "menu-pick" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
)
|
|
((cpad-pressed? 1 square)
|
|
(set! (-> *level* disk-load-timing?) (not (-> *level* disk-load-timing?)))
|
|
(if (-> *level* disk-load-timing?)
|
|
(sound-play-by-spec (static-sound-spec "menu-pick" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
(sound-play-by-spec (static-sound-spec "menu-back" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
)
|
|
)
|
|
((cpad-pressed? 1 r1)
|
|
(set! *display-scene-control* (logxor *display-scene-control* (scene-controls bounds-spheres)))
|
|
(if (logtest? *display-scene-control* (scene-controls bounds-spheres))
|
|
(sound-play-by-spec (static-sound-spec "menu-pick" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
(sound-play-by-spec (static-sound-spec "menu-back" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
)
|
|
)
|
|
((cpad-pressed? 1 circle)
|
|
(set! *display-bug-report* (not *display-bug-report*))
|
|
(if *display-bug-report*
|
|
(sound-play-by-spec (static-sound-spec "menu-pick" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
(sound-play-by-spec (static-sound-spec "menu-back" :group 1 :fo-curve 1) (new-sound-id) (the-as vector #t))
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
)
|
|
(if (and *display-bug-report* (not *progress-process*))
|
|
(position->stream *stdcon* '*stdcon* #t)
|
|
)
|
|
(when (and (= *cheat-mode* 'debug) (not *debug-segment*))
|
|
(when (and (cpad-hold? 0 l1) (cpad-hold? 0 l2) (cpad-hold? 0 r1) (cpad-pressed? 0 r2))
|
|
(if *target*
|
|
(stop 'debug)
|
|
(start 'play (get-current-continue-forced *game-info*))
|
|
)
|
|
)
|
|
(if (and (cpad-hold? 0 left) (cpad-hold? 0 up) (cpad-pressed? 0 select))
|
|
(initialize! *game-info* 'game (the-as game-save #f) "title-restart" (the-as resetter-spec #f))
|
|
)
|
|
(if (cpad-pressed? 1 r3)
|
|
(inspect global)
|
|
)
|
|
(when (cpad-hold? 1 r3)
|
|
(with-dma-buffer-add-bucket ((s5-1 (if *debug-segment*
|
|
(-> *display* frames (-> *display* on-screen) debug-buf)
|
|
(-> *display* frames (-> *display* on-screen) global-buf)
|
|
)
|
|
)
|
|
(bucket-id debug)
|
|
)
|
|
(show-iop-memory s5-1)
|
|
)
|
|
)
|
|
(if (cpad-pressed? 1 triangle)
|
|
(set! *display-level-border* (not *display-level-border*))
|
|
)
|
|
)
|
|
(main-timeouts)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for function end-display
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defun end-display ((arg0 display))
|
|
(let ((s5-0 (-> (if *debug-segment*
|
|
(-> arg0 frames (-> arg0 on-screen) debug-buf)
|
|
(-> arg0 frames (-> arg0 on-screen) global-buf)
|
|
)
|
|
base
|
|
)
|
|
)
|
|
)
|
|
(when *debug-segment*
|
|
(let ((s4-0 (-> *display* frames (-> *display* on-screen) profile-array data 0))
|
|
(v1-17 'debug)
|
|
(s3-0 *profile-debug-color*)
|
|
)
|
|
(when (and *dproc* *debug-segment*)
|
|
(let ((s2-0 (-> s4-0 data (-> s4-0 count))))
|
|
(let ((s1-0 (-> s4-0 base-time)))
|
|
(set! (-> s2-0 name) v1-17)
|
|
(set! (-> s2-0 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s1-0))))
|
|
)
|
|
(set! (-> s2-0 depth) (the-as uint (-> s4-0 depth)))
|
|
(set! (-> s2-0 color) s3-0)
|
|
(set! (-> s4-0 segment (-> s4-0 depth)) s2-0)
|
|
)
|
|
(set! (-> s4-0 count) (min 1023 (+ (-> s4-0 count) 1)))
|
|
(+! (-> s4-0 depth) 1)
|
|
(set! (-> s4-0 max-depth) (max (-> s4-0 max-depth) (-> s4-0 depth)))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(with-dma-buffer-add-bucket ((s3-1 (if *debug-segment*
|
|
(-> arg0 frames (-> arg0 on-screen) debug-buf)
|
|
(-> arg0 frames (-> arg0 on-screen) global-buf)
|
|
)
|
|
)
|
|
(bucket-id debug-no-zbuf2)
|
|
)
|
|
(if (and (= *master-mode* 'pause)
|
|
(and (!= *cheat-mode* 'camera) (or (zero? *screen-shot-work*) (= (-> *screen-shot-work* count) -1)))
|
|
)
|
|
(draw-string-xy
|
|
(lookup-text! *common-text* (text-id progress-pause) #f)
|
|
s3-1
|
|
256
|
|
(if (< (-> *display* base-clock frame-counter) (-> *game-info* letterbox-time))
|
|
352
|
|
320
|
|
)
|
|
(font-color red)
|
|
(font-flags shadow kerning middle large)
|
|
)
|
|
)
|
|
(let ((s2-2 (the int (-> *font-context* origin y))))
|
|
(cond
|
|
((or (!= (-> *setting-control* user-current letterbox) 0.0)
|
|
(< (-> *display* base-clock frame-counter) (-> *game-info* letterbox-time))
|
|
)
|
|
(+! s2-2 56)
|
|
)
|
|
((and *display-profile* (not *display-capture-mode*))
|
|
(+! s2-2 48)
|
|
)
|
|
)
|
|
(when (or (zero? *screen-shot-work*) (= (-> *screen-shot-work* count) -1) (-> *screen-shot-work* hud-enable))
|
|
(let* ((v1-73
|
|
(draw-string-xy
|
|
*stdcon0*
|
|
s3-1
|
|
(the int (-> *font-context* origin x))
|
|
s2-2
|
|
(font-color default)
|
|
(font-flags shadow kerning)
|
|
)
|
|
)
|
|
(a3-4 (+ s2-2 (the int (* 2.0 (-> v1-73 b)))))
|
|
)
|
|
(draw-string-xy
|
|
*stdcon1*
|
|
s3-1
|
|
(the int (-> *font-context* origin x))
|
|
a3-4
|
|
(font-color default)
|
|
(font-flags shadow kerning)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (or (not *debug-segment*) *display-capture-mode*)
|
|
(set! *stdebug* *null*)
|
|
(set! *stdebug* *stdcon1*)
|
|
)
|
|
(if *display-iop-info*
|
|
(show-iop-info s3-1)
|
|
)
|
|
(if *display-memcard-info*
|
|
(show-mc-info s3-1)
|
|
)
|
|
)
|
|
(set! *stdcon* (clear *stdcon0*))
|
|
(when *debug-segment*
|
|
(let ((s4-2 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
|
|
(when (and *dproc* *debug-segment*)
|
|
(let* ((v1-108 (+ (-> s4-2 depth) -1))
|
|
(s3-2 (-> s4-2 segment v1-108))
|
|
(s2-3 (-> s4-2 base-time))
|
|
)
|
|
(when (>= v1-108 0)
|
|
(set! (-> s3-2 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s2-3))))
|
|
(+! (-> s4-2 depth) -1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(let ((v1-113 *dma-mem-usage*))
|
|
(when (nonzero? v1-113)
|
|
(set! (-> v1-113 length) (max 89 (-> v1-113 length)))
|
|
(set! (-> v1-113 data 88 name) "debug")
|
|
(+! (-> v1-113 data 88 count) 1)
|
|
(+! (-> v1-113 data 88 used) (&-
|
|
(-> (if *debug-segment*
|
|
(-> arg0 frames (-> arg0 on-screen) debug-buf)
|
|
(-> arg0 frames (-> arg0 on-screen) global-buf)
|
|
)
|
|
base
|
|
)
|
|
(the-as uint s5-0)
|
|
)
|
|
)
|
|
(set! (-> v1-113 data 88 total) (-> v1-113 data 88 used))
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for function display-loop-main
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defun display-loop-main ((arg0 display))
|
|
(with-pp
|
|
(if (-> *level* loading-level)
|
|
(load-continue (-> *level* loading-level))
|
|
)
|
|
(when *debug-segment*
|
|
(let ((s5-0 (-> *display* frames (-> *display* on-screen) profile-array data 0))
|
|
(v1-13 'merc)
|
|
(s4-0 *profile-merc-color*)
|
|
)
|
|
(when (and *dproc* *debug-segment*)
|
|
(let ((s3-0 (-> s5-0 data (-> s5-0 count))))
|
|
(let ((s2-0 (-> s5-0 base-time)))
|
|
(set! (-> s3-0 name) v1-13)
|
|
(set! (-> s3-0 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s2-0))))
|
|
)
|
|
(set! (-> s3-0 depth) (the-as uint (-> s5-0 depth)))
|
|
(set! (-> s3-0 color) s4-0)
|
|
(set! (-> s5-0 segment (-> s5-0 depth)) s3-0)
|
|
)
|
|
(set! (-> s5-0 count) (min 1023 (+ (-> s5-0 count) 1)))
|
|
(+! (-> s5-0 depth) 1)
|
|
(set! (-> s5-0 max-depth) (max (-> s5-0 max-depth) (-> s5-0 depth)))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(blerc-execute)
|
|
(blerc-init)
|
|
(when *debug-segment*
|
|
(let ((s5-1 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
|
|
(when (and *dproc* *debug-segment*)
|
|
(let* ((v1-37 (+ (-> s5-1 depth) -1))
|
|
(s4-1 (-> s5-1 segment v1-37))
|
|
(s3-1 (-> s5-1 base-time))
|
|
)
|
|
(when (>= v1-37 0)
|
|
(set! (-> s4-1 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s3-1))))
|
|
(+! (-> s5-1 depth) -1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(texscroll-execute)
|
|
(ripple-execute)
|
|
(region-execute)
|
|
(when *debug-segment*
|
|
(let ((s5-2 (-> *display* frames (-> *display* on-screen) profile-array data 0))
|
|
(v1-50 'joints)
|
|
(s4-2 *profile-joints-color*)
|
|
)
|
|
(when (and *dproc* *debug-segment*)
|
|
(let ((s3-2 (-> s5-2 data (-> s5-2 count))))
|
|
(let ((s2-1 (-> s5-2 base-time)))
|
|
(set! (-> s3-2 name) v1-50)
|
|
(set! (-> s3-2 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s2-1))))
|
|
)
|
|
(set! (-> s3-2 depth) (the-as uint (-> s5-2 depth)))
|
|
(set! (-> s3-2 color) s4-2)
|
|
(set! (-> s5-2 segment (-> s5-2 depth)) s3-2)
|
|
)
|
|
(set! (-> s5-2 count) (min 1023 (+ (-> s5-2 count) 1)))
|
|
(+! (-> s5-2 depth) 1)
|
|
(set! (-> s5-2 max-depth) (max (-> s5-2 max-depth) (-> s5-2 depth)))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(execute-math-engine)
|
|
(when *debug-segment*
|
|
(let ((s5-3 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
|
|
(when (and *dproc* *debug-segment*)
|
|
(let* ((v1-74 (+ (-> s5-3 depth) -1))
|
|
(s4-3 (-> s5-3 segment v1-74))
|
|
(s3-3 (-> s5-3 base-time))
|
|
)
|
|
(when (>= v1-74 0)
|
|
(set! (-> s4-3 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s3-3))))
|
|
(+! (-> s5-3 depth) -1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(execute-cloth-engine)
|
|
(when *debug-segment*
|
|
(let ((s5-4 (-> *display* frames (-> *display* on-screen) profile-array data 0))
|
|
(v1-87 'debug)
|
|
(s4-4 *profile-debug-color*)
|
|
)
|
|
(when (and *dproc* *debug-segment*)
|
|
(let ((s3-4 (-> s5-4 data (-> s5-4 count))))
|
|
(let ((s2-2 (-> s5-4 base-time)))
|
|
(set! (-> s3-4 name) v1-87)
|
|
(set! (-> s3-4 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s2-2))))
|
|
)
|
|
(set! (-> s3-4 depth) (the-as uint (-> s5-4 depth)))
|
|
(set! (-> s3-4 color) s4-4)
|
|
(set! (-> s5-4 segment (-> s5-4 depth)) s3-4)
|
|
)
|
|
(set! (-> s5-4 count) (min 1023 (+ (-> s5-4 count) 1)))
|
|
(+! (-> s5-4 depth) 1)
|
|
(set! (-> s5-4 max-depth) (max (-> s5-4 max-depth) (-> s5-4 depth)))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(let* ((s5-5 *debug-hook*)
|
|
(t9-13 (car s5-5))
|
|
)
|
|
(while (not (null? s5-5))
|
|
((the-as (function none) t9-13))
|
|
(set! s5-5 (cdr s5-5))
|
|
(set! t9-13 (car s5-5))
|
|
)
|
|
)
|
|
(main-cheats)
|
|
(when *debug-segment*
|
|
(let ((s5-6 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
|
|
(when (and *dproc* *debug-segment*)
|
|
(let* ((v1-115 (+ (-> s5-6 depth) -1))
|
|
(s4-5 (-> s5-6 segment v1-115))
|
|
(s3-5 (-> s5-6 base-time))
|
|
)
|
|
(when (>= v1-115 0)
|
|
(set! (-> s4-5 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s3-5))))
|
|
(+! (-> s5-6 depth) -1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(when *debug-segment*
|
|
(let ((s5-7 (-> *display* frames (-> *display* on-screen) profile-array data 0))
|
|
(v1-128 'camera)
|
|
(s4-6 *profile-camera-color*)
|
|
)
|
|
(when (and *dproc* *debug-segment*)
|
|
(let ((s3-6 (-> s5-7 data (-> s5-7 count))))
|
|
(let ((s2-3 (-> s5-7 base-time)))
|
|
(set! (-> s3-6 name) v1-128)
|
|
(set! (-> s3-6 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s2-3))))
|
|
)
|
|
(set! (-> s3-6 depth) (the-as uint (-> s5-7 depth)))
|
|
(set! (-> s3-6 color) s4-6)
|
|
(set! (-> s5-7 segment (-> s5-7 depth)) s3-6)
|
|
)
|
|
(set! (-> s5-7 count) (min 1023 (+ (-> s5-7 count) 1)))
|
|
(+! (-> s5-7 depth) 1)
|
|
(set! (-> s5-7 max-depth) (max (-> s5-7 max-depth) (-> s5-7 depth)))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(update-camera)
|
|
(execute-cam-post-hook-engine)
|
|
(when *debug-segment*
|
|
(let ((s5-8 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
|
|
(when (and *dproc* *debug-segment*)
|
|
(let* ((v1-152 (+ (-> s5-8 depth) -1))
|
|
(s4-7 (-> s5-8 segment v1-152))
|
|
(s3-7 (-> s5-8 base-time))
|
|
)
|
|
(when (>= v1-152 0)
|
|
(set! (-> s4-7 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s3-7))))
|
|
(+! (-> s5-8 depth) -1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(update *bigmap*)
|
|
(if (-> *level* loading-level)
|
|
(load-continue (-> *level* loading-level))
|
|
)
|
|
(when *debug-segment*
|
|
(let ((s5-9 (-> *display* frames (-> *display* on-screen) profile-array data 0))
|
|
(v1-173 'draw-hook)
|
|
(s4-8 *profile-draw-hook-color*)
|
|
)
|
|
(when (and *dproc* *debug-segment*)
|
|
(let ((s3-8 (-> s5-9 data (-> s5-9 count))))
|
|
(let ((s2-4 (-> s5-9 base-time)))
|
|
(set! (-> s3-8 name) v1-173)
|
|
(set! (-> s3-8 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s2-4))))
|
|
)
|
|
(set! (-> s3-8 depth) (the-as uint (-> s5-9 depth)))
|
|
(set! (-> s3-8 color) s4-8)
|
|
(set! (-> s5-9 segment (-> s5-9 depth)) s3-8)
|
|
)
|
|
(set! (-> s5-9 count) (min 1023 (+ (-> s5-9 count) 1)))
|
|
(+! (-> s5-9 depth) 1)
|
|
(set! (-> s5-9 max-depth) (max (-> s5-9 max-depth) (-> s5-9 depth)))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(*draw-hook*)
|
|
(when *debug-segment*
|
|
(let ((s5-10 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
|
|
(when (and *dproc* *debug-segment*)
|
|
(let* ((v1-197 (+ (-> s5-10 depth) -1))
|
|
(s4-9 (-> s5-10 segment v1-197))
|
|
(s3-9 (-> s5-10 base-time))
|
|
)
|
|
(when (>= v1-197 0)
|
|
(set! (-> s4-9 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s3-9))))
|
|
(+! (-> s5-10 depth) -1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(if (-> *level* loading-level)
|
|
(load-continue (-> *level* loading-level))
|
|
)
|
|
(if *display-color-bars*
|
|
(draw-color-bars *blit-displays-work*)
|
|
)
|
|
(*menu-hook*)
|
|
(load-level-text-files -1)
|
|
(when (-> *screen-filter* draw?)
|
|
(if (-> *screen-filter* lock-vsync?)
|
|
(set! (-> arg0 force-sync) (the-as uint (max 4 (the-as int (-> arg0 force-sync)))))
|
|
)
|
|
(draw *screen-filter*)
|
|
)
|
|
(when (or (!= (-> *setting-control* user-current letterbox) 0.0)
|
|
(< (-> *display* base-clock frame-counter) (-> *game-info* letterbox-time))
|
|
)
|
|
(if (< (-> *game-info* letterbox-time) (-> *display* base-clock frame-counter))
|
|
(set! (-> *game-info* letterbox-time) (-> *display* base-clock frame-counter))
|
|
)
|
|
(if (and (= (-> *setting-control* user-current aspect-ratio) 'aspect4x3)
|
|
(or (zero? *screen-shot-work*) (= (-> *screen-shot-work* count) -1) (-> *screen-shot-work* hud-enable))
|
|
)
|
|
(letterbox
|
|
(bucket-id tex-hud-pris2)
|
|
(if (< (-> *display* base-clock frame-counter) (-> *game-info* letterbox-time))
|
|
1.0
|
|
(-> *setting-control* user-current letterbox)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (-> *setting-control* user-current render)
|
|
(if (< (-> *display* base-clock frame-counter) (-> *game-info* blackout-time))
|
|
(set! (-> *setting-control* user-default bg-a-force) 1.0)
|
|
(set! (-> *setting-control* user-default bg-a-force) 0.0)
|
|
)
|
|
)
|
|
(when *debug-segment*
|
|
(let ((s5-11 (-> *display* frames (-> *display* on-screen) profile-array data 0))
|
|
(v1-266 'blit-displays)
|
|
(s4-10 *profile-blit-color*)
|
|
)
|
|
(when (and *dproc* *debug-segment*)
|
|
(let ((s3-10 (-> s5-11 data (-> s5-11 count))))
|
|
(let ((s2-5 (-> s5-11 base-time)))
|
|
(set! (-> s3-10 name) v1-266)
|
|
(set! (-> s3-10 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s2-5))))
|
|
)
|
|
(set! (-> s3-10 depth) (the-as uint (-> s5-11 depth)))
|
|
(set! (-> s3-10 color) s4-10)
|
|
(set! (-> s5-11 segment (-> s5-11 depth)) s3-10)
|
|
)
|
|
(set! (-> s5-11 count) (min 1023 (+ (-> s5-11 count) 1)))
|
|
(+! (-> s5-11 depth) 1)
|
|
(set! (-> s5-11 max-depth) (max (-> s5-11 max-depth) (-> s5-11 depth)))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(blit-displays-work-method-19 *blit-displays-work*)
|
|
(when *debug-segment*
|
|
(let ((s5-12 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
|
|
(when (and *dproc* *debug-segment*)
|
|
(let* ((v1-292 (+ (-> s5-12 depth) -1))
|
|
(s4-11 (-> s5-12 segment v1-292))
|
|
(s3-11 (-> s5-12 base-time))
|
|
)
|
|
(when (>= v1-292 0)
|
|
(set! (-> s4-11 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s3-11))))
|
|
(+! (-> s5-12 depth) -1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(end-display arg0)
|
|
(display-frame-finish arg0)
|
|
(display-sync arg0)
|
|
(when *debug-segment*
|
|
(start-frame! (-> arg0 frames (-> arg0 on-screen) profile-array data 0))
|
|
(let* ((v1-307 (-> *perf-stats* data))
|
|
(a0-109 (-> v1-307 0 ctrl))
|
|
)
|
|
(+! (-> v1-307 0 count) 1)
|
|
(b! (zero? a0-109) cfg-132 :delay (nop!))
|
|
(.mtc0 Perf 0)
|
|
(.sync.l)
|
|
(.sync.p)
|
|
(.mtpc pcr0 0)
|
|
(.mtpc pcr1 0)
|
|
(.sync.l)
|
|
(.sync.p)
|
|
(.mtc0 Perf a0-109)
|
|
)
|
|
(.sync.l)
|
|
(.sync.p)
|
|
(label cfg-132)
|
|
0
|
|
)
|
|
(set! (-> *time-of-day-context* title-updated) #f)
|
|
(set! *teleport* #f)
|
|
(when (nonzero? *teleport-count*)
|
|
(set! *teleport* #t)
|
|
(set! *teleport-count* (+ *teleport-count* -1))
|
|
)
|
|
(execute-particle-local-space-engine 0)
|
|
(let ((gp-1 (-> pp clock)))
|
|
(set! (-> pp clock) (-> *display* part-clock))
|
|
(process-particles)
|
|
(set! (-> pp clock) gp-1)
|
|
)
|
|
(execute-particle-local-space-engine 1)
|
|
(dma-send
|
|
(the-as dma-bank #x10008000)
|
|
(the-as uint (-> *collide-vif0-init* data))
|
|
(the-as uint (/ (-> *collide-vif0-init* length) 4))
|
|
)
|
|
(swap-sound-buffers
|
|
(ear-trans 0)
|
|
(ear-trans 1)
|
|
(if (-> *setting-control* user-current lock-sound-camera-to-target)
|
|
(ear-trans 1)
|
|
(camera-pos)
|
|
)
|
|
(-> (math-camera-matrix) fvec)
|
|
(-> (math-camera-matrix) rvec)
|
|
(-> *setting-control* user-current sound-ear-scale)
|
|
)
|
|
(str-play-kick)
|
|
(level-update *level*)
|
|
(mc-run)
|
|
(auto-save-check)
|
|
0
|
|
(none)
|
|
)
|
|
)
|
|
|
|
;; definition for function display-loop
|
|
(defbehavior display-loop process ()
|
|
"Main loop for running the game."
|
|
(stack-size-set! (-> self main-thread) 512)
|
|
(process-spawn-function
|
|
process
|
|
(lambda :behavior process
|
|
()
|
|
(logclear! (-> self mask) (process-mask freeze pause menu progress entity))
|
|
(until #f
|
|
(when *debug-segment*
|
|
(let ((gp-0 (-> *display* frames (-> *display* on-screen) profile-array data 0))
|
|
(v1-9 'joints)
|
|
(s5-0 *profile-joints-color*)
|
|
)
|
|
(when (and *dproc* *debug-segment*)
|
|
(let ((s4-0 (-> gp-0 data (-> gp-0 count))))
|
|
(let ((s3-0 (-> gp-0 base-time)))
|
|
(set! (-> s4-0 name) v1-9)
|
|
(set! (-> s4-0 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s3-0))))
|
|
)
|
|
(set! (-> s4-0 depth) (the-as uint (-> gp-0 depth)))
|
|
(set! (-> s4-0 color) s5-0)
|
|
(set! (-> gp-0 segment (-> gp-0 depth)) s4-0)
|
|
)
|
|
(set! (-> gp-0 count) (min 1023 (+ (-> gp-0 count) 1)))
|
|
(+! (-> gp-0 depth) 1)
|
|
(set! (-> gp-0 max-depth) (max (-> gp-0 max-depth) (-> gp-0 depth)))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(execute-math-engine)
|
|
(when *debug-segment*
|
|
(let ((gp-1 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
|
|
(when (and *dproc* *debug-segment*)
|
|
(let* ((v1-33 (+ (-> gp-1 depth) -1))
|
|
(s5-1 (-> gp-1 segment v1-33))
|
|
(s4-1 (-> gp-1 base-time))
|
|
)
|
|
(when (>= v1-33 0)
|
|
(set! (-> s5-1 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s4-1))))
|
|
(+! (-> gp-1 depth) -1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
:name "matrix"
|
|
:from *4k-dead-pool*
|
|
:to *mid-pool*
|
|
)
|
|
(let ((gp-1 *display*))
|
|
(set! *teleport* #t)
|
|
(update *setting-control*)
|
|
(init-time-of-day-context *time-of-day-context*)
|
|
(display-sync gp-1)
|
|
(display-frame-finish gp-1)
|
|
(display-sync gp-1)
|
|
(install-handler 3 vblank-handler)
|
|
(free-nodes *touching-list*)
|
|
(prepare *collide-rider-pool*)
|
|
(update-actor-hash)
|
|
(blerc-init)
|
|
(dma-send
|
|
(the-as dma-bank #x10008000)
|
|
(the-as uint (-> *collide-vif0-init* data))
|
|
(the-as uint (/ (-> *collide-vif0-init* length) 4))
|
|
)
|
|
(suspend)
|
|
(set! (-> *setting-control* user-default bg-a) 0.0)
|
|
(set! (-> gp-1 frames 0 start-time) (timer-count (the-as timer-bank #x10000800)))
|
|
(set! (-> gp-1 frames 1 start-time) (timer-count (the-as timer-bank #x10000800)))
|
|
(set! (-> gp-1 dog-ratio) 1.0)
|
|
(while *run*
|
|
(display-loop-main gp-1)
|
|
(when *debug-segment*
|
|
(let ((s5-0 (-> *display* frames (-> *display* on-screen) profile-array data 0))
|
|
(v1-27 'actors)
|
|
(s4-0 *profile-actors-color*)
|
|
)
|
|
(when (and *dproc* *debug-segment*)
|
|
(let ((s3-0 (-> s5-0 data (-> s5-0 count))))
|
|
(let ((s2-0 (-> s5-0 base-time)))
|
|
(set! (-> s3-0 name) v1-27)
|
|
(set! (-> s3-0 start-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s2-0))))
|
|
)
|
|
(set! (-> s3-0 depth) (the-as uint (-> s5-0 depth)))
|
|
(set! (-> s3-0 color) s4-0)
|
|
(set! (-> s5-0 segment (-> s5-0 depth)) s3-0)
|
|
)
|
|
(set! (-> s5-0 count) (min 1023 (+ (-> s5-0 count) 1)))
|
|
(+! (-> s5-0 depth) 1)
|
|
(set! (-> s5-0 max-depth) (max (-> s5-0 max-depth) (-> s5-0 depth)))
|
|
)
|
|
)
|
|
0
|
|
)
|
|
(suspend)
|
|
(when *debug-segment*
|
|
(let ((s5-1 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
|
|
(when (and *dproc* *debug-segment*)
|
|
(let* ((v1-51 (+ (-> s5-1 depth) -1))
|
|
(s4-1 (-> s5-1 segment v1-51))
|
|
(s3-1 (-> s5-1 base-time))
|
|
)
|
|
(when (>= v1-51 0)
|
|
(set! (-> s4-1 end-time) (the-as int (- (timer-count (the-as timer-bank #x10000800)) (the-as uint s3-1))))
|
|
(+! (-> s5-1 depth) -1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
(set! *dproc* #f)
|
|
(format 0 "display is off #<#x~X>.~%" self)
|
|
0
|
|
)
|
|
|
|
;; definition for function on
|
|
(defun on ((arg0 symbol))
|
|
"Start the display process."
|
|
(when (not *dproc*)
|
|
(when (not arg0)
|
|
(if (= (-> *level* level0 status) 'inactive)
|
|
(bg 'halfpipe)
|
|
)
|
|
)
|
|
(set! *run* #t)
|
|
(set! *dproc* (ppointer->process (process-spawn-function
|
|
process
|
|
display-loop
|
|
:name "display"
|
|
:from *4k-dead-pool*
|
|
:to *display-pool*
|
|
:stack *kernel-dram-stack*
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((or (level-get-with-status *level* 'loaded)
|
|
(level-get-with-status *level* 'alive)
|
|
(level-get-with-status *level* 'active)
|
|
)
|
|
(activate-levels! *level*)
|
|
(when (not arg0)
|
|
(let ((gp-1 (entity-by-type camera-start)))
|
|
(when (and gp-1 (type? gp-1 entity-actor))
|
|
(while (not (camera-teleport-to-entity gp-1))
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (and (= *kernel-boot-message* 'art-group) *kernel-boot-art-group*)
|
|
(anim-tester-add-object *kernel-boot-art-group*)
|
|
)
|
|
)
|
|
(else
|
|
(kill-by-name "display" *active-pool*)
|
|
(set! *dproc* #f)
|
|
)
|
|
)
|
|
)
|
|
*dproc*
|
|
)
|
|
|
|
;; definition for function off
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defun off ()
|
|
"Stop the display process."
|
|
(stop 'debug)
|
|
(dotimes (gp-0 (-> *level* length))
|
|
(let ((a0-2 (-> *level* level gp-0)))
|
|
(if (= (-> a0-2 status) 'active)
|
|
(deactivate a0-2)
|
|
)
|
|
)
|
|
)
|
|
(set! *run* #f)
|
|
0
|
|
(none)
|
|
)
|