From e7ff3fbb51a685ef6e9ef668375b7115257f5082 Mon Sep 17 00:00:00 2001 From: Hat Kid <6624576+Hat-Kid@users.noreply.github.com> Date: Mon, 18 Jul 2022 03:22:04 +0200 Subject: [PATCH] game: add secrets menu, music player and some more pc settings to the debug menu (#1664) * add secrets menu, music player and some more pc settings * remove todos * rename string funcs * replace cases * add `game-text-id->string` function, refactor player menu generation * remove process check, `cons` -> `dcons`, `strncpy` --- goal_src/jak1/engine/debug/default-menu.gc | 119 ++++++++++++++++++++- goal_src/jak1/engine/ui/text.gc | 4 + goal_src/jak1/kernel/gstring.gc | 36 +++++++ 3 files changed, 157 insertions(+), 2 deletions(-) diff --git a/goal_src/jak1/engine/debug/default-menu.gc b/goal_src/jak1/engine/debug/default-menu.gc index ed10a187b4..95e3c473b5 100644 --- a/goal_src/jak1/engine/debug/default-menu.gc +++ b/goal_src/jak1/engine/debug/default-menu.gc @@ -4480,12 +4480,55 @@ ) ) +(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))) + ) + (case-str flava-name (("lavatube-level-name") (copy-string<-string flava-name "lavatube"))) + (unless (string= flava-name "zero") + (let ((lst (dcons (ref *music-list* i) j))) + (debug-menu-append-item lvl-menu (new 'debug 'debug-menu-item-function flava-name lst (the-as (function object object) 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*)) - ;; Music menu TODO - ;; Secrets menu TODO ;; Scene menu TODO (debug-menu-append-item (-> *debug-menu-context* root-menu) @@ -4545,6 +4588,54 @@ (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 "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* eco-blue) + ) + (pc-cheats? *pc-settings* 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* eco-red) + ) + (pc-cheats? *pc-settings* 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* eco-green) + ) + (pc-cheats? *pc-settings* 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* eco-yellow) + ) + (pc-cheats? *pc-settings* eco-yellow))) + (flag "Invincibility" #f (lambda (arg (msg debug-menu-msg)) + (when (= msg (debug-menu-msg press)) + (pc-cheat-toggle-and-tune *pc-settings* invinc) + ) + (pc-cheats? *pc-settings* invinc))) + (flag "Blue sidekick" #f (lambda (arg (msg debug-menu-msg)) + (when (= msg (debug-menu-msg press)) + (pc-cheat-toggle-and-tune *pc-settings* sidekick-blue) + ) + (pc-cheats? *pc-settings* 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* tunes) + ) + (pc-cheats? *pc-settings* 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* sky) + ) + (pc-cheats? *pc-settings* sky))) + ) + ) (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?))) @@ -4585,6 +4676,27 @@ (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)) + (case (-> *setting-control* default video-mode) (('ntsc 'pal))))) + (flag "100" #f (lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set-frame-rate! *pc-settings* 100)) + (case (-> *setting-control* default video-mode) (('100fps))))) + (flag "150" #f (lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set-frame-rate! *pc-settings* 150)) + (case (-> *setting-control* default video-mode) (('150fps))))) + ) + (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))) @@ -4660,6 +4772,9 @@ (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*)) + ) ) diff --git a/goal_src/jak1/engine/ui/text.gc b/goal_src/jak1/engine/ui/text.gc index 343574f132..a28192dbe0 100644 --- a/goal_src/jak1/engine/ui/text.gc +++ b/goal_src/jak1/engine/ui/text.gc @@ -583,3 +583,7 @@ (set! *level-text-file-load-flag* #t) (none) ) + +(defun-debug game-text-id->string ((text game-text-id)) + (enum->string game-text-id text) + ) \ No newline at end of file diff --git a/goal_src/jak1/kernel/gstring.gc b/goal_src/jak1/kernel/gstring.gc index f713c02020..e8c09efd32 100644 --- a/goal_src/jak1/kernel/gstring.gc +++ b/goal_src/jak1/kernel/gstring.gc @@ -47,6 +47,42 @@ dst ) +(defun copyn-string<-string ((dst string) (src string) (len int)) + "Copy len bytes of data from one string to another, like strncpy" + (let ((dst-ptr (-> dst data)) + (src-ptr (-> src data)) + ) + (if (<= len (length src)) + (dotimes (i len) + (set! (-> dst-ptr) (-> src-ptr)) + (&+! dst-ptr 1) + (&+! src-ptr 1) + ) + ) + (set! (-> dst-ptr 0) 0) + ) + dst + ) + +(defun substring! ((dst string) (src string) (start int) (end int)) + "Copy the specified substring to dst. Returns an empty string if invalid indices are given." + (let ((strlen (length src))) + (if (and (< start strlen) (<= end strlen)) + (let ((start-ptr (-> src data)) + (dst-ptr (-> dst data)) + ) + (dotimes (i (- end start)) + (set! (-> dst-ptr) (-> start-ptr (+ start i))) + (&+! dst-ptr 1) + ) + (set! (-> dst-ptr 0) 0) + dst + ) + "" + ) + ) + ) + (defmethod new string ((allocation symbol) (type-to-make type) (size int) (other string)) "Create a new string of the given size. If other is not #f, copy data from it." (cond