mirror of
https://github.com/open-goal/jak-project
synced 2026-09-09 12:14:10 -04:00
324def1303
Moves PC-specific entity and debug menu things to `entity-debug.gc` and `default-menu-pc.gc` respectively and makes `(declare-file (debug))` work as it should (no need to wrap the entire file in `(when *debug-segment*` now!). Also changes the DGO descriptor format so that it's less verbose. It might break custom levels, but the format change is very simple so it should not be difficult for anyone to update to the new format. Sadly, you lose the completely useless ability to use DGO object names that don't match the source file name. The horror! I've also gone ahead and expanded the force envmap option to also force the ripple effect to be active. I did not notice any performance or visual drawbacks from this. Gets rid of some distracting LOD and some water pools appearing super flat (and pitch back for dark eco). Fixes #1424
977 lines
48 KiB
Common Lisp
977 lines
48 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
#|
|
|
|
|
Extra debug menus for PC port.
|
|
|
|
|#
|
|
|
|
|
|
(defmacro new-dm-func (text var func)
|
|
`(new 'debug 'debug-menu-item-function ,text ,var (the-as (function int object) ,func))
|
|
)
|
|
(defmacro new-dm-flag (text var func)
|
|
`(new 'debug 'debug-menu-item-flag ,text ,var (the-as (function int debug-menu-msg object) ,func))
|
|
)
|
|
(defmacro new-dm-bool (text sym func)
|
|
`(new-dm-flag ,text (quote ,sym) ,func)
|
|
)
|
|
(defmacro new-dm-submenu (text menu)
|
|
`(new 'debug 'debug-menu-item-submenu ,text ,menu)
|
|
)
|
|
(defmacro new-dm-var-float (text var func inc min max)
|
|
`(debug-menu-item-var-make-float (new 'debug 'debug-menu-item-var ,text ,var (* 8 20))
|
|
(the-as (function int debug-menu-msg float float float) ,func)
|
|
,inc #t ,min ,max 1)
|
|
)
|
|
|
|
(defun dm-want-level-toggle-pick-func ((arg0 pair) (arg1 debug-menu-msg))
|
|
(let* ((levname (the-as symbol (car arg0)))
|
|
(info (the-as level-load-info (-> levname value)))
|
|
(idx (the int (cdr arg0)))
|
|
(the-level (level-get *level* (-> info name)))
|
|
)
|
|
(if (and the-level (!= the-level (-> *level* level idx)))
|
|
(return 'invalid)
|
|
)
|
|
(if (= arg1 (debug-menu-msg press))
|
|
(load-state-want-levels
|
|
(if (= idx 0) (-> info name) (-> *level* level 0 name))
|
|
(if (= idx 1) (-> info name) (-> *level* level 1 name))
|
|
)
|
|
)
|
|
(eq? (-> *level* level idx name) (-> info name))
|
|
)
|
|
)
|
|
|
|
(defun dm-display-level-toggle-pick-func ((arg0 symbol) (arg1 debug-menu-msg))
|
|
(let ((the-level (level-get *level* arg0)))
|
|
(if (not the-level)
|
|
(return 'invalid)
|
|
)
|
|
(if (= arg1 (debug-menu-msg press))
|
|
(when the-level
|
|
(load-state-want-display-level arg0
|
|
(if (-> the-level display?) #f 'display)
|
|
)
|
|
)
|
|
)
|
|
(and the-level (-> the-level display?))
|
|
)
|
|
)
|
|
|
|
(defun debug-menu-make-load-want-menu ((ctx debug-menu-context) (lev-idx int))
|
|
|
|
(let ((want-menu (new 'debug 'debug-menu ctx "Level want menu")))
|
|
|
|
(let ((iter *level-load-list*))
|
|
(while (not (or (null? iter) (null? (cdr iter)) (null? (cddr iter))))
|
|
(debug-menu-append-item want-menu (new-dm-flag (symbol->string (the-as symbol (car iter))) (dcons (car iter) lev-idx) dm-want-level-toggle-pick-func))
|
|
|
|
(set! iter (cdr iter))
|
|
)
|
|
)
|
|
|
|
(new-dm-submenu (new 'debug 'string 0 (string-format "Want ~D" lev-idx)) want-menu)
|
|
)
|
|
)
|
|
|
|
(defun debug-menu-make-load-display-menu ((ctx debug-menu-context))
|
|
|
|
(let ((display-menu (new 'debug 'debug-menu ctx "Level display menu")))
|
|
|
|
(let ((iter *level-load-list*))
|
|
(while (not (or (null? iter) (null? (cdr iter)) (null? (cddr iter))))
|
|
(debug-menu-append-item display-menu (new-dm-flag (symbol->string (the-as symbol (car iter))) (car iter) dm-display-level-toggle-pick-func))
|
|
|
|
(set! iter (cdr iter))
|
|
)
|
|
)
|
|
|
|
(new-dm-submenu "Display" display-menu)
|
|
)
|
|
)
|
|
|
|
(defun debug-menu-make-load-teleport-menu ((ctx debug-menu-context))
|
|
|
|
(let ((teleport-menu (new 'debug 'debug-menu ctx "Camera teleport menu")))
|
|
|
|
(let ((iter *level-load-list*))
|
|
(while (not (or (null? iter) (null? (cdr iter)) (null? (cddr iter))))
|
|
(debug-menu-append-item teleport-menu
|
|
(new-dm-func (symbol->string (the-as symbol (car iter)))
|
|
(-> (the-as symbol (car iter)) value)
|
|
(lambda ((info level-load-info))
|
|
(let ((tf (new 'stack-no-clear 'transformq)))
|
|
(set! (-> tf trans x) (-> info bsphere x))
|
|
(set! (-> tf trans y) (-> info bsphere y))
|
|
(set! (-> tf trans z) (-> info bsphere z))
|
|
(quaternion-identity! (-> tf quat))
|
|
(vector-identity! (-> tf scale))
|
|
(send-event *camera* 'teleport-to-transformq tf)
|
|
)
|
|
)
|
|
))
|
|
|
|
(set! iter (cdr iter))
|
|
)
|
|
)
|
|
|
|
(new-dm-submenu "Camera teleport" teleport-menu)
|
|
)
|
|
)
|
|
|
|
(defun debug-menu-make-load-menu ((ctx debug-menu-context))
|
|
(let ((load-menu (new 'debug 'debug-menu ctx "Load menu")))
|
|
(debug-menu-append-item load-menu (new-dm-bool "Level Border" *display-level-border* dm-boolean-toggle-pick-func))
|
|
(debug-menu-append-item load-menu (debug-menu-make-from-template ctx '(flag
|
|
"border-mode"
|
|
#f
|
|
,(lambda ((arg0 int) (arg1 debug-menu-msg))
|
|
(if (= arg1 (debug-menu-msg press))
|
|
(set! (-> *setting-control* default border-mode) (not (-> *setting-control* default border-mode)))
|
|
)
|
|
(-> *setting-control* default border-mode)
|
|
)
|
|
)))
|
|
|
|
(debug-menu-append-item load-menu (debug-menu-make-load-want-menu ctx 0)) ;; Want 0
|
|
(debug-menu-append-item load-menu (debug-menu-make-load-want-menu ctx 1)) ;; Want 1
|
|
(debug-menu-append-item load-menu (debug-menu-make-load-display-menu ctx)) ;; Display
|
|
(debug-menu-append-item load-menu (debug-menu-make-load-teleport-menu ctx)) ;; Camera teleport
|
|
|
|
(new-dm-submenu "Load" load-menu)
|
|
)
|
|
)
|
|
|
|
(define *part-pick-menu* (the-as debug-menu #f))
|
|
(define *spawn-part-test* #t)
|
|
|
|
(defun dm-part-pick-func ((id int) (msg debug-menu-msg))
|
|
(if (zero? (-> *part-group-id-table* id))
|
|
(return 'invalid))
|
|
(when (= msg (debug-menu-msg press))
|
|
(set! *part-tester-id* id)
|
|
(if *spawn-part-test*
|
|
(start-part)
|
|
)
|
|
)
|
|
(= *part-tester-id* id)
|
|
)
|
|
|
|
(defun build-particles-list ()
|
|
(debug-menu-remove-all-items *part-pick-menu*)
|
|
(dotimes (i (-> *part-group-id-table* length))
|
|
(let ((part (-> *part-group-id-table* i)))
|
|
(when (and (nonzero? part))
|
|
(debug-menu-append-item *part-pick-menu* (new-dm-flag (-> part name) i dm-part-pick-func))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> *part-pick-menu* items) (sort (-> *part-pick-menu* items) debug-menu-node<?))
|
|
)
|
|
|
|
(defun debug-menu-make-part-menu ((ctx debug-menu-context))
|
|
(let ((part-menu (new 'debug 'debug-menu ctx "Particles menu")))
|
|
(let ((pick-menu (new 'debug 'debug-menu ctx "Particle group pick menu")))
|
|
(set! *part-pick-menu* pick-menu)
|
|
(debug-menu-append-item part-menu (new-dm-submenu "Pick Particle group" pick-menu))
|
|
)
|
|
(debug-menu-append-item part-menu (new-dm-func "Refresh" #f build-particles-list))
|
|
(debug-menu-append-item part-menu (new-dm-bool "Spawn part tester" *spawn-part-test* dm-boolean-toggle-pick-func))
|
|
|
|
(new-dm-submenu "Particles" part-menu)
|
|
)
|
|
)
|
|
|
|
(define *entity-pick-menu* (the-as debug-menu #f))
|
|
|
|
(defun dm-entity-pick-func ((e entity) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(if (= (-> *entity-debug-inspect* entity) e)
|
|
(set-entity! *entity-debug-inspect* (the entity #f))
|
|
(set-entity! *entity-debug-inspect* e))
|
|
)
|
|
(= (-> *entity-debug-inspect* entity) e)
|
|
)
|
|
|
|
(defun build-entity-list ()
|
|
"Fill the entity pick menu"
|
|
;; clear old list
|
|
(debug-menu-remove-all-items *entity-pick-menu*)
|
|
;; go through active levels
|
|
(dotimes (s5-0 (-> *level* length))
|
|
(let ((s4-0 (-> *level* level s5-0)))
|
|
(when (= (-> s4-0 status) 'active)
|
|
;; actor entities
|
|
(let ((s3-0 (-> s4-0 bsp actors)))
|
|
(when (nonzero? s3-0)
|
|
(dotimes (s2-0 (-> s3-0 length))
|
|
(let ((s1-0 (-> s3-0 data s2-0 actor)))
|
|
(debug-menu-append-item *entity-pick-menu* (new-dm-flag (res-lump-struct s1-0 'name string) s1-0 dm-entity-pick-func))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
;; ambients entities
|
|
(let ((s3-1 (-> s4-0 bsp ambients)))
|
|
(when (nonzero? s3-1)
|
|
(dotimes (s2-1 (-> s3-1 length))
|
|
(let ((s1-1 (-> s3-1 data s2-1 ambient)))
|
|
(debug-menu-append-item *entity-pick-menu* (new-dm-flag (res-lump-struct s1-1 'name string) s1-1 dm-entity-pick-func))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
;; camera entities
|
|
(let ((s4-1 (-> s4-0 bsp cameras)))
|
|
(when (nonzero? s4-1)
|
|
(dotimes (s3-2 (-> s4-1 length))
|
|
(let ((s2-2 (-> s4-1 s3-2)))
|
|
(debug-menu-append-item *entity-pick-menu* (new-dm-flag (res-lump-struct s2-2 'name string) s2-2 dm-entity-pick-func))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> *entity-pick-menu* items) (sort (-> *entity-pick-menu* items) debug-menu-node<?))
|
|
)
|
|
|
|
(defun dm-display-entities-pick-func ((arg0 symbol))
|
|
(debug-print-entities *level* arg0 (the-as type #f))
|
|
)
|
|
|
|
(defun debug-menu-make-entity-menu ((ctx debug-menu-context))
|
|
(let ((entity-menu (new 'debug 'debug-menu ctx "Entity menu")))
|
|
(let ((pick-menu (new 'debug 'debug-menu ctx "Pick entity menu")))
|
|
(set! *entity-pick-menu* pick-menu)
|
|
(debug-menu-append-item entity-menu (new-dm-submenu "Pick Entity" pick-menu))
|
|
)
|
|
(debug-menu-append-item entity-menu (new-dm-func "Refresh" #f build-entity-list))
|
|
(debug-menu-append-item entity-menu (new-dm-func "Go to entity" #f
|
|
(lambda ()
|
|
(unless (-> *entity-debug-inspect* entity) (return #f))
|
|
(let ((tf (new 'stack 'transformq)))
|
|
(vector-copy! (-> tf trans) (-> *entity-debug-inspect* entity trans))
|
|
(quaternion-identity! (-> tf quat))
|
|
(vector-identity! (-> tf scale))
|
|
(send-event *camera* 'teleport-to-transformq tf)
|
|
))))
|
|
(debug-menu-append-item entity-menu (new-dm-func "Print entity info" #t dm-display-entities-pick-func))
|
|
(debug-menu-append-item entity-menu (new-dm-func "Print entity info (ag)" 'art-group dm-display-entities-pick-func))
|
|
(debug-menu-append-item entity-menu (new-dm-func "Print entity info (meters)" 'entity-meters dm-display-entities-pick-func))
|
|
(debug-menu-append-item entity-menu (new-dm-func "Print entity info (perm)" 'entity-perm dm-display-entities-pick-func))
|
|
|
|
(new-dm-submenu "Entity" entity-menu)
|
|
)
|
|
)
|
|
|
|
(defmacro dm-lambda-boolean-flag (val)
|
|
"helper macro for making boolean buttons that don't just access symbols directly"
|
|
`,(lambda (arg (msg debug-menu-msg))
|
|
(if (= msg (debug-menu-msg press))
|
|
(not! ,val)
|
|
)
|
|
,val)
|
|
)
|
|
|
|
(defmacro dm-lambda-int-var (val)
|
|
"helper macro for making int buttons"
|
|
`,(lambda (arg (msg debug-menu-msg) (newval int))
|
|
(cond
|
|
((= msg (debug-menu-msg press))
|
|
(set! ,val newval)
|
|
)
|
|
(else
|
|
,val
|
|
)
|
|
))
|
|
)
|
|
|
|
(defmacro dm-lambda-float-var (val)
|
|
"helper macro for making float buttons"
|
|
`(lambda (arg (msg debug-menu-msg) (newval float))
|
|
(cond
|
|
((= msg (debug-menu-msg press))
|
|
(set! ,val newval)
|
|
)
|
|
(else
|
|
,val
|
|
)
|
|
))
|
|
)
|
|
|
|
(defmacro dm-lambda-meters-var (val)
|
|
"helper macro for making meters buttons"
|
|
`,(lambda (arg (msg debug-menu-msg) (newval float))
|
|
(cond
|
|
((= msg (debug-menu-msg press))
|
|
(set! ,val (meters newval))
|
|
)
|
|
(else
|
|
(* (1/ METER_LENGTH) ,val)
|
|
)
|
|
))
|
|
)
|
|
|
|
(defun dm-toggle-collision-pick-func ((arg symbol) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(cond
|
|
((-> arg value)
|
|
(false! (-> arg value))
|
|
(logior! *vu1-enable-user-menu* (vu1-renderer-mask tfrag trans-tfrag tie tie-near))
|
|
(true! *generic-tie*)
|
|
)
|
|
(else
|
|
(true! (-> arg value))
|
|
(logclear! *vu1-enable-user-menu* (vu1-renderer-mask tfrag trans-tfrag tie tie-near))
|
|
(false! *generic-tie*)
|
|
)
|
|
)
|
|
)
|
|
(-> arg value)
|
|
)
|
|
|
|
(defun dm-collision-mode-pick-func ((arg pc-collision-mode) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(set! *collision-mode* arg)
|
|
)
|
|
(= *collision-mode* arg)
|
|
)
|
|
|
|
(defun dm-collision-filter-mode-pick-func ((arg int) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-set-collision-mask (pc-collision-mode mode) arg (not (pc-get-collision-mask (pc-collision-mode mode) arg)))
|
|
)
|
|
(pc-get-collision-mask (pc-collision-mode mode) arg)
|
|
)
|
|
|
|
(defun dm-collision-filter-event-pick-func ((arg int) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-set-collision-mask (pc-collision-mode event) arg (not (pc-get-collision-mask (pc-collision-mode event) arg)))
|
|
)
|
|
(pc-get-collision-mask (pc-collision-mode event) arg)
|
|
)
|
|
|
|
(defun dm-collision-filter-material-pick-func ((arg int) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-set-collision-mask (pc-collision-mode material) arg (not (pc-get-collision-mask (pc-collision-mode material) arg)))
|
|
)
|
|
(pc-get-collision-mask (pc-collision-mode material) arg)
|
|
)
|
|
|
|
(defun dm-collision-filter-skip-pick-func ((arg int) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-set-collision-mask (pc-collision-mode skip) arg (not (pc-get-collision-mask (pc-collision-mode skip) arg)))
|
|
)
|
|
(pc-get-collision-mask (pc-collision-mode skip) arg)
|
|
)
|
|
|
|
(defun debug-menu-make-collision-renderer-menu ((ctx debug-menu-context))
|
|
(let ((menu (new 'debug 'debug-menu ctx "Collision renderer menu")))
|
|
;; master toggle
|
|
(debug-menu-append-item menu (new-dm-bool "Enable" *collision-renderer* dm-toggle-collision-pick-func))
|
|
(debug-menu-append-item menu (new-dm-bool "Wireframe" *collision-wireframe* dm-boolean-toggle-pick-func))
|
|
(debug-menu-append-item menu (new-dm-submenu "Mode"
|
|
(let ((mode-menu (new 'debug 'debug-menu ctx "Collision renderer mode menu")))
|
|
(doenum (name val pc-collision-mode)
|
|
(debug-menu-append-item mode-menu (new-dm-flag name val dm-collision-mode-pick-func))
|
|
)
|
|
mode-menu)))
|
|
(debug-menu-append-item menu (new-dm-submenu "Filter mode"
|
|
(let ((filter-menu (new 'debug 'debug-menu ctx "Collision renderer filter mode menu")))
|
|
(doenum (name val pat-mode)
|
|
(debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-mode-pick-func))
|
|
)
|
|
filter-menu)))
|
|
(debug-menu-append-item menu (new-dm-submenu "Filter event"
|
|
(let ((filter-menu (new 'debug 'debug-menu ctx "Collision renderer filter event menu")))
|
|
(doenum (name val pat-event)
|
|
(debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-event-pick-func))
|
|
)
|
|
filter-menu)))
|
|
(debug-menu-append-item menu (new-dm-submenu "Filter material"
|
|
(let ((filter-menu (new 'debug 'debug-menu ctx "Collision renderer filter material menu")))
|
|
(doenum (name val pat-material)
|
|
(debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-material-pick-func))
|
|
)
|
|
filter-menu)))
|
|
(debug-menu-append-item menu (new-dm-submenu "Filter skip"
|
|
(let ((filter-menu (new 'debug 'debug-menu ctx "Collision renderer filter skip menu")))
|
|
(doenum (name val pc-pat-skip-hack)
|
|
(debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-skip-pick-func))
|
|
)
|
|
filter-menu)))
|
|
|
|
(new-dm-submenu "Collision renderer" menu)
|
|
)
|
|
)
|
|
|
|
(defun dm-lod-int ((arg0 int) (arg1 debug-menu-msg) (arg2 int) (arg3 int))
|
|
(when (= arg1 (debug-menu-msg press))
|
|
(case (/ arg0 8)
|
|
((0) (set! (-> *pc-settings* lod-force-tfrag) arg2))
|
|
((1) (set! (-> *pc-settings* lod-force-tie) arg2))
|
|
((2) (set! (-> *pc-settings* lod-force-ocean) arg2))
|
|
((3) (set! (-> *pc-settings* lod-force-actor) arg2))
|
|
)
|
|
)
|
|
(case (/ arg0 8)
|
|
((0) (-> *pc-settings* lod-force-tfrag))
|
|
((1) (-> *pc-settings* lod-force-tie))
|
|
((2) (-> *pc-settings* lod-force-ocean))
|
|
((3) (-> *pc-settings* lod-force-actor))
|
|
(else arg3)
|
|
)
|
|
)
|
|
|
|
(defun dm-subtitle-language ((blang int) (msg debug-menu-msg))
|
|
(let ((lang (the pc-subtitle-lang (/ blang 8))))
|
|
(when (= msg (debug-menu-msg press))
|
|
(set! (-> *pc-settings* subtitle-language) lang))
|
|
(= (-> *pc-settings* subtitle-language) lang)
|
|
)
|
|
)
|
|
|
|
(defun dm-text-language ((blang int) (msg debug-menu-msg))
|
|
(let ((lang (the pc-subtitle-lang (/ blang 8))))
|
|
(when (= msg (debug-menu-msg press))
|
|
(set! (-> *pc-settings* text-language) lang))
|
|
(= (-> *pc-settings* text-language) lang)
|
|
)
|
|
)
|
|
|
|
(defun dm-subtitle-setting ((setting symbol) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(set! (-> *pc-settings* subtitle-speaker?) setting))
|
|
(= (-> *pc-settings* subtitle-speaker?) setting)
|
|
)
|
|
|
|
(defun dm-mood-override-palette-pick-func ((bpal int) (msg debug-menu-msg))
|
|
(let* ((pal (/ bpal 8))
|
|
(cur-val (-> *pc-settings* mood-overrides pal)))
|
|
|
|
(when (= msg (debug-menu-msg press))
|
|
(set! (-> *pc-settings* mood-overrides pal) (if (= cur-val 0.0) 1.0 0.0))
|
|
|
|
(when (not (= 'mult (-> *pc-settings* mood-override?)))
|
|
(set! (-> *pc-settings* mood-override?) #f)
|
|
(dotimes (i 8)
|
|
(if (!= (-> *pc-settings* mood-overrides i) 0.0)
|
|
(set! (-> *pc-settings* mood-override?) 'copy)))
|
|
))
|
|
|
|
(= (-> *pc-settings* mood-overrides pal) 1.0)
|
|
)
|
|
)
|
|
|
|
(defun dm-mood-override-pick-func ((kind symbol) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(if (= kind (-> *pc-settings* mood-override?))
|
|
(set! (-> *pc-settings* mood-override?) #f)
|
|
(set! (-> *pc-settings* mood-override?) kind)))
|
|
(= kind (-> *pc-settings* mood-override?))
|
|
)
|
|
|
|
(defun dm-mood-palette-float ((pal int) (arg1 debug-menu-msg) (newval float) (val float))
|
|
(when (= arg1 (debug-menu-msg press))
|
|
(set! (-> *pc-settings* mood-overrides (/ pal 8)) newval))
|
|
(-> *pc-settings* mood-overrides (/ pal 8))
|
|
)
|
|
|
|
(defun dm-anim-tester-x-flag-func ((action symbol) (msg debug-menu-msg))
|
|
(case action
|
|
(('at-show-joint-info)
|
|
(if (= msg (debug-menu-msg press))
|
|
(logxor! (-> *ATX-settings* flags) (atx-flags show-joints)))
|
|
(return (logtest? (-> *ATX-settings* flags) (atx-flags show-joints)))
|
|
)
|
|
)
|
|
#f)
|
|
|
|
(defun dm-anim-tester-x-func ((action symbol))
|
|
(unless *atx*
|
|
(atx-start))
|
|
|
|
(case action
|
|
(('pick-art-group)
|
|
(set! (-> *atx* 0 edit-mode) (atx-edit-mode art-group))
|
|
(false! *camera-read-buttons*)
|
|
)
|
|
(('at-pick-joint-anim)
|
|
(when (-> *atx* 0 cur-art-group)
|
|
(set! (-> *atx* 0 edit-mode) (atx-edit-mode anim))
|
|
(false! *camera-read-buttons*)
|
|
)
|
|
)
|
|
(('pick-mesh-geo)
|
|
(when (-> *atx* 0 cur-art-group)
|
|
(set! (-> *atx* 0 edit-mode) (atx-edit-mode mgeo))
|
|
(false! *camera-read-buttons*)
|
|
)
|
|
)
|
|
(('pick-joint-geo)
|
|
(when (-> *atx* 0 cur-art-group)
|
|
(set! (-> *atx* 0 edit-mode) (atx-edit-mode jgeo))
|
|
(false! *camera-read-buttons*)
|
|
)
|
|
)
|
|
(('at-cam-free-floating)
|
|
(send-event *camera* 'change-state cam-free-floating 0)
|
|
)
|
|
(('at-cam-orbit)
|
|
(send-event *camera* 'change-state cam-orbit 0)
|
|
)
|
|
)
|
|
0)
|
|
|
|
(defun debug-menu-make-anim-tester-x-menu ((ctx debug-menu-context))
|
|
(let ((menu (new 'debug 'debug-menu ctx "Anim Tester X menu")))
|
|
;; master toggle
|
|
(debug-menu-append-item menu (new-dm-func "Start" #f atx-start))
|
|
(debug-menu-append-item menu (new-dm-func "Stop" #f atx-stop))
|
|
(debug-menu-append-item menu (new-dm-var-float "Speed" (the int #f) (dm-lambda-float-var (-> *ATX-settings* speed)) 0.01 -10.0 10.0))
|
|
(debug-menu-append-item menu (new-dm-var-float "Frame Num" (the int #f) (dm-lambda-float-var (-> *ATX-settings* frame-num)) 0.1 0.0 99999.0))
|
|
(debug-menu-append-item menu (new-dm-func "Pick Art Group" 'pick-art-group dm-anim-tester-x-func))
|
|
(debug-menu-append-item menu (new-dm-func "Pick Anim" 'at-pick-joint-anim dm-anim-tester-x-func))
|
|
(debug-menu-append-item menu (new-dm-func "Pick Mesh" 'pick-mesh-geo dm-anim-tester-x-func))
|
|
(debug-menu-append-item menu (new-dm-func "Pick Skeleton" 'pick-joint-geo dm-anim-tester-x-func))
|
|
(debug-menu-append-item menu (new-dm-flag "Show Joint Info" 'at-show-joint-info dm-anim-tester-x-flag-func))
|
|
(debug-menu-append-item menu (new-dm-func "Free Floating cam" 'at-cam-free-floating dm-anim-tester-x-func))
|
|
(debug-menu-append-item menu (new-dm-func "Orbit cam" 'at-cam-orbit dm-anim-tester-x-func))
|
|
|
|
(new-dm-submenu "Anim Tester X" menu)
|
|
)
|
|
)
|
|
|
|
(defun dm-music-player-func ((lst object))
|
|
(kill-by-name 'dm-player *active-pool*)
|
|
(set! *progress-flava* -1)
|
|
(process-spawn-function process :name 'dm-player
|
|
(lambda :behavior process ((lst pair))
|
|
(loop
|
|
(suspend)
|
|
(set-setting! 'music (the-as symbol (car lst)) 0.0 0)
|
|
(set! *progress-flava* (the-as int (cdr lst)))
|
|
)
|
|
)
|
|
lst
|
|
)
|
|
)
|
|
|
|
(defun debug-menu-make-music-player-menu ((ctx debug-menu-context))
|
|
(let ((music-menu (new 'debug 'debug-menu ctx "Music player menu")))
|
|
(dotimes (i (-> *music-flava-name-list* length))
|
|
(let* ((flava-list (-> *music-flava-name-list* i))
|
|
(level-name (new 'debug 'string 30 (game-text-id->string (-> flava-list 0))))
|
|
(lvl-menu (new 'debug 'debug-menu ctx (the-as string #f)))
|
|
)
|
|
(dotimes (j (-> flava-list length))
|
|
(let ((flava-name (new 'debug 'string 30 (game-text-id->string (-> flava-list j)))))
|
|
(when (and (string= (substring! *temp-string* level-name (- (length level-name) 11) (length level-name)) "-level-name")
|
|
(string= (substring! *temp-string* flava-name (- (length flava-name) 11) (length flava-name)) "-level-name"))
|
|
(copy-string<-string flava-name (symbol->string (ref *music-list* i)))
|
|
)
|
|
(unless (string= flava-name "zero")
|
|
(debug-menu-append-item lvl-menu (new-dm-func flava-name (dcons (ref *music-list* i) j) dm-music-player-func))
|
|
)
|
|
)
|
|
)
|
|
(let ((menu-name (new 'debug 'string 30 (symbol->string (ref *music-list* i)))))
|
|
(debug-menu-append-item music-menu (new-dm-submenu menu-name lvl-menu))
|
|
)
|
|
)
|
|
)
|
|
(debug-menu-append-item music-menu (new-dm-func "Reset" #f (lambda () (kill-by-name 'dm-player *active-pool*) (set! *progress-flava* -1))))
|
|
(new-dm-submenu "Music player" music-menu)
|
|
)
|
|
)
|
|
|
|
(when (-> *debug-menu-context* root-menu)
|
|
(debug-menu-append-item (-> *debug-menu-context* root-menu) (debug-menu-make-load-menu *debug-menu-context*))
|
|
(debug-menu-append-item (-> *debug-menu-context* root-menu) (debug-menu-make-part-menu *debug-menu-context*))
|
|
(debug-menu-append-item (-> *debug-menu-context* root-menu) (debug-menu-make-entity-menu *debug-menu-context*))
|
|
;; Scene menu TODO
|
|
|
|
(debug-menu-append-item (-> *debug-menu-context* root-menu)
|
|
(debug-menu-make-from-template *debug-menu-context*
|
|
'(menu "PC Settings"
|
|
(flag "Debug" #f ,(dm-lambda-boolean-flag (-> *pc-settings* debug?)))
|
|
(flag "Use native vis" #f ,(dm-lambda-boolean-flag (-> *pc-settings* use-vis?)))
|
|
(function "Toggle game aspect" #f ,(lambda ()
|
|
(cond
|
|
((= (-> *setting-control* default aspect-ratio) 'aspect4x3)
|
|
(set! (-> *setting-control* default aspect-ratio) 'aspect16x9)
|
|
)
|
|
(else
|
|
(set! (-> *setting-control* default aspect-ratio) 'aspect4x3)
|
|
)
|
|
)
|
|
(set-aspect-ratio (-> *setting-control* default aspect-ratio))
|
|
))
|
|
(flag "Auto aspect" #f ,(dm-lambda-boolean-flag (-> *pc-settings* aspect-ratio-auto?)))
|
|
(menu "Aspect test"
|
|
(function "4 x 3" #f ,(lambda () (set-aspect! *pc-settings* 4 3)))
|
|
(function "16 x 9" #f ,(lambda () (set-aspect! *pc-settings* 16 9)))
|
|
(function "64 x 27 (21:9)" #f ,(lambda () (set-aspect! *pc-settings* 64 27)))
|
|
(function "16 x 10" #f ,(lambda () (set-aspect! *pc-settings* 16 10)))
|
|
(function "2 x 1" #f ,(lambda () (set-aspect! *pc-settings* 2 1)))
|
|
(function "37 x 20" #f ,(lambda () (set-aspect! *pc-settings* 37 20)))
|
|
(function "21 x 9" #f ,(lambda () (set-aspect! *pc-settings* 21 9)))
|
|
(function "64 x 18" #f ,(lambda () (set-aspect! *pc-settings* 64 18)))
|
|
(int-var "Custom aspect X" #f ,(dm-lambda-int-var (-> *pc-settings* aspect-custom-x)) 20 1 #t 1 1000)
|
|
(int-var "Custom aspect Y" #f ,(dm-lambda-int-var (-> *pc-settings* aspect-custom-y)) 20 1 #t 1 1000)
|
|
(function "Custom" #f ,(lambda () (set-aspect! *pc-settings* (-> *pc-settings* aspect-custom-x) (-> *pc-settings* aspect-custom-y))))
|
|
)
|
|
(menu "Fullscreen"
|
|
(function "Windowed" #f ,(lambda () (set-display-mode! *pc-settings* 'windowed)))
|
|
(function "Fullscreen" #f ,(lambda () (set-display-mode! *pc-settings* 'fullscreen)))
|
|
(function "Borderless" #f ,(lambda () (set-display-mode! *pc-settings* 'borderless)))
|
|
)
|
|
(menu "Sizes"
|
|
(function "640 x 480" #f ,(lambda () (set-size! *pc-settings* 640 480)))
|
|
(function "640 x 360" #f ,(lambda () (set-size! *pc-settings* 640 360)))
|
|
(function "720 x 540" #f ,(lambda () (set-size! *pc-settings* 720 540)))
|
|
(function "960 x 540" #f ,(lambda () (set-size! *pc-settings* 960 540)))
|
|
(function "800 x 600" #f ,(lambda () (set-size! *pc-settings* 800 600)))
|
|
(function "960 x 720" #f ,(lambda () (set-size! *pc-settings* 960 720)))
|
|
(function "1280 x 720" #f ,(lambda () (set-size! *pc-settings* 1280 720)))
|
|
(function "1024 x 768" #f ,(lambda () (set-size! *pc-settings* 1024 768)))
|
|
(function "1366 x 768" #f ,(lambda () (set-size! *pc-settings* 1366 768)))
|
|
(function "1280 x 960" #f ,(lambda () (set-size! *pc-settings* 1280 960)))
|
|
(function "1440 x 1080" #f ,(lambda () (set-size! *pc-settings* 1440 1080)))
|
|
(function "1920 x 1080" #f ,(lambda () (set-size! *pc-settings* 1920 1080)))
|
|
(function "1920 x 1440" #f ,(lambda () (set-size! *pc-settings* 1920 1440)))
|
|
(function "2560 x 1440" #f ,(lambda () (set-size! *pc-settings* 2560 1440)))
|
|
(function "2880 x 2160" #f ,(lambda () (set-size! *pc-settings* 2880 2160)))
|
|
(function "3840 x 2160" #f ,(lambda () (set-size! *pc-settings* 3840 2160)))
|
|
(function "512 x 224" #f ,(lambda () (set-size! *pc-settings* 512 224)))
|
|
(function "512 x 256" #f ,(lambda () (set-size! *pc-settings* 512 256)))
|
|
(function "512 x 448" #f ,(lambda () (set-size! *pc-settings* 512 448)))
|
|
(function "512 x 512" #f ,(lambda () (set-size! *pc-settings* 512 512)))
|
|
)
|
|
(menu "Secrets"
|
|
(menu "PC cheats"
|
|
(flag "Big head jak" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) big-head)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) big-head)))
|
|
(flag "Small head jak" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) small-head)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) small-head)))
|
|
(flag "Big fist jak" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) big-fist)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) big-fist)))
|
|
(flag "Big head npcs" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) big-head-npc)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) big-head-npc)))
|
|
(flag "Huge head jak" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) huge-head)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) huge-head)))
|
|
(flag "Mirrored mode" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) mirror)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) mirror)))
|
|
(flag "Blue eco" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(logclear! (-> *pc-settings* cheats) (pc-cheats eco-red eco-yellow eco-green))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) eco-blue)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) eco-blue)))
|
|
(flag "Red eco" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(logclear! (-> *pc-settings* cheats) (pc-cheats eco-blue eco-yellow eco-green))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) eco-red)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) eco-red)))
|
|
(flag "Green eco" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(logclear! (-> *pc-settings* cheats) (pc-cheats eco-red eco-yellow eco-blue))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) eco-green)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) eco-green)))
|
|
(flag "Yellow eco" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(logclear! (-> *pc-settings* cheats) (pc-cheats eco-red eco-blue eco-green))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) eco-yellow)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) eco-yellow)))
|
|
(flag "Invincibility" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(logclear! (-> *target* state-flags) 16)
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) invinc)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) invinc)))
|
|
(flag "Blue sidekick" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) sidekick-blue)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) sidekick-blue)))
|
|
(flag "All flavas" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) tunes)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) tunes)))
|
|
(flag "Real time tod" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) sky)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) sky)))
|
|
(flag "No textures" #f ,(lambda (arg (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(pc-cheat-toggle-and-tune (-> *pc-settings* cheats) no-tex)
|
|
)
|
|
(pc-cheats? (-> *pc-settings* cheats) no-tex)))
|
|
;; (flag "Hard rats" #f ,(lambda (arg (msg debug-menu-msg))
|
|
;; (when (= msg (debug-menu-msg press))
|
|
;; (pc-cheat-toggle-and-tune (-> *pc-settings* cheats) hard-rats)
|
|
;; )
|
|
;; (pc-cheats? (-> *pc-settings* cheats) hard-rats)))
|
|
;; (flag "Hero mode" #f ,(lambda (arg (msg debug-menu-msg))
|
|
;; (when (= msg (debug-menu-msg press))
|
|
;; (pc-cheat-toggle-and-tune (-> *pc-settings* cheats) hero-mode)
|
|
;; )
|
|
;; (pc-cheats? (-> *pc-settings* cheats) hero-mode)))
|
|
)
|
|
)
|
|
(flag "Letterbox" #f ,(dm-lambda-boolean-flag (-> *pc-settings* letterbox?)))
|
|
(flag "Skip movies" #f ,(dm-lambda-boolean-flag (-> *pc-settings* skip-movies?)))
|
|
(flag "Money starburst" #f ,(dm-lambda-boolean-flag (-> *pc-settings* money-starburst?)))
|
|
(flag "Subtitles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* subtitles?)))
|
|
(flag "Hinttitles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* hinttitles?)))
|
|
(menu "Subtitle speaker"
|
|
(flag "Off" #f dm-subtitle-setting)
|
|
(flag "On" #t dm-subtitle-setting)
|
|
(flag "Auto" auto dm-subtitle-setting)
|
|
)
|
|
(menu "Subtitle language"
|
|
(flag "english" 0 dm-subtitle-language)
|
|
(flag "french" 1 dm-subtitle-language)
|
|
(flag "german" 2 dm-subtitle-language)
|
|
(flag "spanish" 3 dm-subtitle-language)
|
|
(flag "uk-english" 6 dm-subtitle-language)
|
|
(flag "br-portuguese" 13 dm-subtitle-language)
|
|
)
|
|
(menu "Text language"
|
|
(flag "english" 0 dm-text-language)
|
|
(flag "french" 1 dm-text-language)
|
|
(flag "german" 2 dm-text-language)
|
|
(flag "spanish" 3 dm-text-language)
|
|
(flag "italian" 4 dm-text-language)
|
|
(flag "japanese" 5 dm-text-language)
|
|
(flag "uk-english" 6 dm-text-language)
|
|
(flag "br-portuguese" 13 dm-text-language)
|
|
(flag "hungarian" 14 dm-text-language)
|
|
)
|
|
(flag "Discord RPC" #t ,(dm-lambda-boolean-flag (-> *pc-settings* discord-rpc?)))
|
|
(flag "Speedrunner Mode" #t ,(dm-lambda-boolean-flag (-> *pc-settings* speedrunner-mode?)))
|
|
(menu "PS2 settings"
|
|
;(flag "PS2 Load speed" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-read-speed?)))
|
|
(flag "PS2 Particles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-parts?)))
|
|
;(flag "PS2 Music" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-music?)))
|
|
;(flag "PS2 Sound effects" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-se?)))
|
|
;(flag "PS2 Hints" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-hints?)))
|
|
)
|
|
(menu "Level of detail"
|
|
(flag "PS2 LOD " #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-lod-dist?)))
|
|
(flag "Force Envmap" #f ,(dm-lambda-boolean-flag (-> *pc-settings* force-envmap?)))
|
|
(int-var "LOD Tfrag" 0 dm-lod-int 0 1 #t 0 2)
|
|
(int-var "LOD Tie" 1 dm-lod-int 0 1 #t 0 3)
|
|
;(int-var "LOD Ocean" 2 dm-lod-int 0 1 #t 0 3)
|
|
(int-var "LOD Actor" 3 dm-lod-int 0 1 #t 0 3)
|
|
(function "Best quality" #f ,(lambda () (set! (-> *pc-settings* lod-force-tfrag) 0)
|
|
(set! (-> *pc-settings* lod-force-tie) 0)
|
|
;(set! (-> *pc-settings* lod-force-ocean) 0)
|
|
(set! (-> *pc-settings* lod-force-actor) 0)
|
|
))
|
|
(function "Worst quality" #f ,(lambda () (set! (-> *pc-settings* lod-force-tfrag) 2)
|
|
(set! (-> *pc-settings* lod-force-tie) 3)
|
|
;(set! (-> *pc-settings* lod-force-ocean) 2)
|
|
(set! (-> *pc-settings* lod-force-actor) 3)
|
|
))
|
|
)
|
|
(menu "Framerate"
|
|
(flag "60" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set-frame-rate! *pc-settings* 60))
|
|
(= (-> *pc-settings* target-fps) 60)))
|
|
(flag "100" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set-frame-rate! *pc-settings* 100))
|
|
(= (-> *pc-settings* target-fps) 100)))
|
|
(flag "150" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set-frame-rate! *pc-settings* 150))
|
|
(= (-> *pc-settings* target-fps) 150)))
|
|
)
|
|
(menu "MSAA"
|
|
(flag "Off" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 1))
|
|
(= (-> *pc-settings* gfx-msaa) 1)))
|
|
(flag "x2" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 2))
|
|
(= (-> *pc-settings* gfx-msaa) 2)))
|
|
(flag "x4" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 4))
|
|
(= (-> *pc-settings* gfx-msaa) 4)))
|
|
(flag "x8" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 8))
|
|
(= (-> *pc-settings* gfx-msaa) 8)))
|
|
(flag "x16" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 16))
|
|
(= (-> *pc-settings* gfx-msaa) 16)))
|
|
)
|
|
(flag "V-sync" #f ,(dm-lambda-boolean-flag (-> *pc-settings* vsync?)))
|
|
;(flag "Alt load boundaries" #f ,(dm-lambda-boolean-flag (-> *pc-settings* new-lb?)))
|
|
(flag "All actors" #f ,(dm-lambda-boolean-flag (-> *pc-settings* force-actors?)))
|
|
(flag "Display actor counts" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-actor-counts)))
|
|
(flag "Display git commit" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-sha)))
|
|
(flag "Extra hud elements" #f ,(dm-lambda-boolean-flag (-> *pc-settings* extra-hud?)))
|
|
(flag "Music fadein" #f ,(dm-lambda-boolean-flag (-> *pc-settings* music-fadein?)))
|
|
(flag "Music fadeout" #f ,(dm-lambda-boolean-flag (-> *pc-settings* music-fadeout?)))
|
|
(function "Reset" #f ,(lambda () (reset *pc-settings*)))
|
|
(function "Save" #f ,(lambda () (commit-to-file *pc-settings*)))
|
|
(function "Load" #f ,(lambda () (load-settings *pc-settings*)))
|
|
)
|
|
)
|
|
)
|
|
(let* ((prog-menu (new 'debug 'debug-menu *debug-menu-context* "Progress menu"))
|
|
(prog-menu-node (new-dm-submenu "Progress" prog-menu))
|
|
(other-menu-node
|
|
(debug-menu-make-from-template *debug-menu-context*
|
|
'(menu "Other"
|
|
(flag "DECI Count" *display-deci-count* dm-boolean-toggle-pick-func)
|
|
;(flag "Actor graph" *display-actor-graph* dm-boolean-toggle-pick-func)
|
|
(flag "Update vis outside bsp" *update-leaf-when-outside-bsp* dm-boolean-toggle-pick-func)
|
|
(flag "Pad display" #f ,(dm-lambda-boolean-flag (-> *pc-settings* debug-pad-display)))
|
|
(flag "Display actor bank" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-actor-bank)))
|
|
(flag "Heap status" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-heap-status)))
|
|
(flag "Bug report" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-bug-report)))
|
|
(flag "Text boxes" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-text-box)))
|
|
(flag "Sidekick stats" *display-sidekick-stats* dm-boolean-toggle-pick-func)
|
|
(float-var "Actor birth dist" #f ,(dm-lambda-meters-var (-> *ACTOR-bank* birth-dist)) 20 1 #t 0 10000 1)
|
|
(float-var "Actor pause dist" #f ,(dm-lambda-meters-var (-> *ACTOR-bank* pause-dist)) 20 1 #t 0 10000 1)
|
|
(menu "Mood override"
|
|
(function "-- SIMPLE OVERRIDE" #f nothing)
|
|
(flag "Palette 0" 0 dm-mood-override-palette-pick-func)
|
|
(flag "Palette 1" 1 dm-mood-override-palette-pick-func)
|
|
(flag "Palette 2" 2 dm-mood-override-palette-pick-func)
|
|
(flag "Palette 3" 3 dm-mood-override-palette-pick-func)
|
|
(flag "Palette 4" 4 dm-mood-override-palette-pick-func)
|
|
(flag "Palette 5" 5 dm-mood-override-palette-pick-func)
|
|
(flag "Palette 6" 6 dm-mood-override-palette-pick-func)
|
|
(flag "Palette 7" 7 dm-mood-override-palette-pick-func)
|
|
(menu "Advanced"
|
|
(flag "Overwrite" copy dm-mood-override-pick-func)
|
|
(flag "Multiply" mult dm-mood-override-pick-func)
|
|
(float-fixed-var "Palette 0 Amt" 0 dm-mood-palette-float 0 10 #t 0 1000 3)
|
|
(float-fixed-var "Palette 1 Amt" 1 dm-mood-palette-float 0 10 #t 0 1000 3)
|
|
(float-fixed-var "Palette 2 Amt" 2 dm-mood-palette-float 0 10 #t 0 1000 3)
|
|
(float-fixed-var "Palette 3 Amt" 3 dm-mood-palette-float 0 10 #t 0 1000 3)
|
|
(float-fixed-var "Palette 4 Amt" 4 dm-mood-palette-float 0 10 #t 0 1000 3)
|
|
(float-fixed-var "Palette 5 Amt" 5 dm-mood-palette-float 0 10 #t 0 1000 3)
|
|
(float-fixed-var "Palette 6 Amt" 6 dm-mood-palette-float 0 10 #t 0 1000 3)
|
|
(float-fixed-var "Palette 7 Amt" 7 dm-mood-palette-float 0 10 #t 0 1000 3)
|
|
)
|
|
)
|
|
(flag "Joint names" *display-joint-names* dm-boolean-toggle-pick-func)
|
|
(flag "Bone lines" *display-bones* dm-boolean-toggle-pick-func)
|
|
)
|
|
))
|
|
(other-menu (-> (the-as debug-menu-item-submenu other-menu-node) submenu))
|
|
)
|
|
(dotimes (i (progress-screen max))
|
|
(debug-menu-append-item prog-menu
|
|
(new-dm-func (new 'debug 'string 0 (enum->string progress-screen i)) i
|
|
(lambda ((val progress-screen))
|
|
(activate-progress *dproc* val)
|
|
(set-master-mode 'progress)
|
|
)
|
|
))
|
|
)
|
|
(debug-menu-append-item other-menu prog-menu-node)
|
|
|
|
(debug-menu-append-item (-> *debug-menu-context* root-menu) other-menu-node)
|
|
)
|
|
|
|
(debug-menu-append-item (-> (the debug-menu-item-submenu (ref (-> *debug-menu-context* root-menu items) 4)) submenu)
|
|
(debug-menu-make-collision-renderer-menu *debug-menu-context*))
|
|
|
|
(debug-menu-append-item (-> (the debug-menu-item-submenu (car (-> *debug-menu-context* root-menu items))) submenu)
|
|
(debug-menu-make-anim-tester-x-menu *debug-menu-context*))
|
|
|
|
(debug-menu-append-item (-> (the debug-menu-item-submenu (ref (-> (the debug-menu-item-submenu (ref (-> *debug-menu-context* root-menu items) 19)) submenu items) 7)) submenu)
|
|
(debug-menu-make-music-player-menu *debug-menu-context*))
|
|
|
|
)
|
|
|
|
(defun bg-custom ((level-name symbol))
|
|
"Modified version of bg for the PC Port custom levels."
|
|
|
|
;; lookup info
|
|
(format 0 "(bg-custom ~A)%" level-name)
|
|
(let ((lev-info (lookup-level-info level-name)))
|
|
(when (= lev-info default-level)
|
|
(format 0 "Unable to (bg-custom ~A), the level was not found in *level-load-list*~%" level-name)
|
|
(return #f)
|
|
)
|
|
|
|
;; kill jak (rip)
|
|
(format 0 "doing stop~%")
|
|
(stop 'play)
|
|
|
|
;; kill levels
|
|
(dotimes (i 2)
|
|
(unload! (-> *level* data i))
|
|
)
|
|
|
|
;; enable visiblity. the custom level won't use it, but we want it on so other levels can be loaded.
|
|
(set! (-> *level* vis?) #t)
|
|
|
|
;; disable border and play mode to prevent loading levels
|
|
(set! (-> *level* border?) #f)
|
|
(set! (-> *setting-control* default border-mode) #f)
|
|
(set! (-> *level* play?) #f)
|
|
|
|
;; disable actor vis
|
|
(set! *vis-actors* #f)
|
|
|
|
(format 0 "doing level load~%")
|
|
;; allocate level. This may start the loading process, but won't finish it.
|
|
(let ((lev (level-get-for-use *level* level-name 'active)))
|
|
(when (not lev)
|
|
(format 0 "Unable to load level, could not level-get-for-use~%")
|
|
(return #f)
|
|
)
|
|
(format 0 "about to start load loop, game will freeze and hopefully come back soon~%")
|
|
|
|
;; spin in a loop and load it. This will cause the game to freeze during the load,
|
|
;; but this is good enough for now.
|
|
(while (or (= (-> lev status) 'loading)
|
|
(= (-> lev status) 'loading-bt)
|
|
(= (-> lev status) 'login)
|
|
)
|
|
(load-continue lev)
|
|
)
|
|
|
|
(when (not (-> lev info continues))
|
|
(format 0 "level info has no continues, can't load it.~%")
|
|
)
|
|
|
|
(let ((cont (car (-> lev info continues))))
|
|
(start 'play (the continue-point cont))
|
|
)
|
|
|
|
(vis-load lev)
|
|
(set! (-> lev all-visible?) #f)
|
|
(set! (-> lev force-all-visible?) #t)
|
|
|
|
;; reset things
|
|
;(initialize! *game-info* 'game (the-as game-save #f) (the-as string #f))
|
|
)
|
|
)
|
|
)
|
|
|