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`
This commit is contained in:
Hat Kid
2022-07-18 03:22:04 +02:00
committed by GitHub
parent 7c04cf6a11
commit e7ff3fbb51
3 changed files with 157 additions and 2 deletions
+117 -2
View File
@@ -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*))
)
)
+4
View File
@@ -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)
)
+36
View File
@@ -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