mirror of
https://github.com/open-goal/jak-project
synced 2026-08-06 09:54:10 -04:00
2841 lines
234 KiB
Common Lisp
2841 lines
234 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
(bundles "ENGINE.CGO" "GAME.CGO")
|
|
(require "engine/camera/cam-update.gc")
|
|
(require "engine/game/task/task-control.gc")
|
|
(require "engine/draw/drawable.gc")
|
|
(require "engine/math/euler.gc")
|
|
(require "engine/entity/entity.gc")
|
|
(require "engine/debug/memory-usage.gc")
|
|
(require "engine/debug/menu.gc")
|
|
|
|
;; This file is the content of the debug menu: the tree of pages and items, and the callbacks that
|
|
;; read and write the setting behind each item. engine/debug/menu.gc owns the types, the rendering
|
|
;; and the pad handling; nothing here draws.
|
|
;;
|
|
;; Two trees are built when the file loads. *debug-menu-context* is the full menu reached from the
|
|
;; pause screen, *popup-menu-context* is the short list reached by holding L3 while paused.
|
|
;; menu-respond-to-pause activates one of them and *menu-hook* runs both once per frame.
|
|
;;
|
|
;; Declaring a page
|
|
;; ----------------
|
|
;; A page is a debug-menu. Items are appended with debug-menu-append-item and the page is reached
|
|
;; from its parent through a debug-menu-item-submenu. Most pages are written as a static template
|
|
;; and expanded by debug-menu-make-from-template:
|
|
;;
|
|
;; (menu "Stats"
|
|
;; (flag "Poly" *stats-poly* dm-boolean-toggle-pick-func)
|
|
;; (function "List Sounds" #f ,(lambda () (list-sounds)))
|
|
;; (float-var "Subdiv Close" close dm-subdiv-float 10 1 #t 1 200 1)
|
|
;; (menu "Ambient Marks" ...))
|
|
;;
|
|
;; Every entry is (kind label id callback . extra). The label is what the menu draws, the id is
|
|
;; handed to the callback unchanged, and the callback is either a function or a symbol whose value
|
|
;; is one. A page that is too large or too dynamic for a template is built by hand instead - the
|
|
;; camera, shader, instance and task pages - and build-shader-list, build-instance-list and
|
|
;; build-continue-menu fill pages whose contents are only known at run time.
|
|
;;
|
|
;; Numbers inside a template are boxed, so every value the template reader consumes arrives
|
|
;; multiplied by 8 and is divided by 8 on the way out. The item id is not divided: a callback that
|
|
;; wants the number the template author wrote has to divide by 8 itself, and the hand-built pages
|
|
;; therefore pass ids already multiplied by 8 when they share such a callback. vu1-renderer-mask is
|
|
;; defined in that shifted form on purpose - its first bit is 3 - so the render page can pass mask
|
|
;; values straight through.
|
|
;;
|
|
;; The callback contract
|
|
;; ---------------------
|
|
;; flag item, (function object debug-menu-msg object)
|
|
;; Called with the item id and a message. press means the user selected the item, so toggle or
|
|
;; apply the setting; update and activate mean the menu is refreshing, so only read. The result
|
|
;; is stored in is-on and picks the item colour: #f off, #t on, and any other value - the task
|
|
;; pages return 'invalid - draws the item as unavailable. Flag items refresh every 23 frames.
|
|
;;
|
|
;; function item, (function object object)
|
|
;; Called with the item id on press only. The result is not stored; a true value flashes the item
|
|
;; blue and a false value flashes it red, so a callback that returns none picks a colour from
|
|
;; whatever was left in the result register.
|
|
;;
|
|
;; variable item, (function int debug-menu-msg X X X)
|
|
;; Called with the item id, a message, a proposed value, and the value the item is showing. On
|
|
;; press write the proposed value and return what was actually taken; on update ignore the
|
|
;; proposal and return the live value. When the setting it edits does not exist the callback
|
|
;; returns its fourth argument, which leaves the display alone. Integer and float items keep
|
|
;; their value in the same field, so a callback has to match the kind the item was set up with.
|
|
|
|
;; Forward declarations for stuff we haven't written yet:
|
|
(define-extern *edit-instance* string)
|
|
|
|
;; Necessary forward declarations
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
;; this file is debug only
|
|
(declare-file (debug))
|
|
|
|
(define *debug-menu-context* (new 'debug 'debug-menu-context))
|
|
|
|
(define *dm-cam-mode-interpolation* 0)
|
|
|
|
(defun dm-cam-mode-func ((mode (state camera-slave)) (msg debug-menu-msg))
|
|
"Camera mode flag. On press, ask *camera* to enter the slave state mode, interpolating over
|
|
*dm-cam-mode-interpolation* frames. Reports whether that state is running. mode #f is the Off
|
|
entry: it changes nothing and reports true while no slave state is active."
|
|
(if (and (= msg (debug-menu-msg press)) mode) (send-event *camera* 'change-state mode *dm-cam-mode-interpolation*))
|
|
(if *camera* (send-event *camera* 'query-state mode) (not mode)))
|
|
|
|
(defun dm-cam-settings-func ((option int) (msg debug-menu-msg))
|
|
"Camera option flags. option indexes the Camera/Settings page and selects one cam-slave-options
|
|
bit, one of two camera-master option bits, or the free-camera reset. On press the selected bit
|
|
is toggled; the result reports it. master-options bit 0 stops the camera from following
|
|
regions and bit 2 restricts region changes to when the target is on the ground. option 6 is
|
|
the Reset Free entry, which is a function item and so arrives here without a message."
|
|
(when (and (= msg (debug-menu-msg press)) *camera*)
|
|
(cond
|
|
((zero? option) (send-event *camera* 'toggle-slave-option (cam-slave-options BUTT_CAM)))
|
|
((= option 13) (send-event *camera* 'toggle-slave-option (cam-slave-options BLOCK_SHIFT_BUTTONS)))
|
|
((= option 1) (send-event *camera* 'toggle-slave-option (cam-slave-options SAME_SIDE)))
|
|
((= option 2) (send-event *camera* 'toggle-slave-option (cam-slave-options MOVE_SPHERICAL)))
|
|
((= option 3) (send-event *camera* 'toggle-slave-option (cam-slave-options DRAG)))
|
|
((= option 4) (send-event *camera* 'toggle-slave-option (cam-slave-options ALLOW_Z_ROT)))
|
|
((= option 7) (send-event *camera* 'toggle-slave-option (cam-slave-options JUMP_PITCHES)))
|
|
((= option 8) (send-event *camera* 'toggle-slave-option (cam-slave-options FIND_HIDDEN_TARGET)))
|
|
((= option 6) (send-event *camera* 'reset-root))
|
|
((= option 9) (logxor! (-> *camera* master-options) 1))
|
|
((= option 10) (logxor! (-> *camera* master-options) 4))
|
|
((= option 11) (send-event *camera* 'toggle-slave-option (cam-slave-options COLLIDE)))
|
|
((= option 12) (send-event *camera* 'toggle-slave-option (cam-slave-options LINE_OF_SIGHT)))
|
|
((= option 14) (send-event *camera* 'toggle-slave-option (cam-slave-options NO_ROTATE)))
|
|
((= option 15) (send-event *camera* 'toggle-slave-option (cam-slave-options STICKY_ANGLE)))))
|
|
(cond
|
|
(*camera*
|
|
(cond
|
|
((zero? option) (logtest? (-> *camera* slave-options) (cam-slave-options BUTT_CAM)))
|
|
((= option 13) (logtest? (-> *camera* slave-options) (cam-slave-options BLOCK_SHIFT_BUTTONS)))
|
|
((= option 1) (logtest? (-> *camera* slave-options) (cam-slave-options SAME_SIDE)))
|
|
((= option 2) (logtest? (-> *camera* slave-options) (cam-slave-options MOVE_SPHERICAL)))
|
|
((= option 3) (logtest? (-> *camera* slave-options) (cam-slave-options DRAG)))
|
|
((= option 4) (logtest? (-> *camera* slave-options) (cam-slave-options ALLOW_Z_ROT)))
|
|
((= option 7) (logtest? (-> *camera* slave-options) (cam-slave-options JUMP_PITCHES)))
|
|
((= option 8) (logtest? (-> *camera* slave-options) (cam-slave-options FIND_HIDDEN_TARGET)))
|
|
((= option 11) (logtest? (-> *camera* slave-options) (cam-slave-options COLLIDE)))
|
|
((= option 12) (logtest? (-> *camera* slave-options) (cam-slave-options LINE_OF_SIGHT)))
|
|
((= option 14) (logtest? (-> *camera* slave-options) (cam-slave-options NO_ROTATE)))
|
|
((= option 15) (logtest? (cam-slave-options STICKY_ANGLE) (-> *camera* slave-options)))
|
|
((= option 9) (logtest? (-> *camera* master-options) 1))
|
|
((= option 10) (logtest? (-> *camera* master-options) 4))
|
|
(else #f)))
|
|
(else #f)))
|
|
|
|
(defun dm-cam-settings-func-int ((id int) (msg debug-menu-msg) (value int) (fallback int))
|
|
"Interp Frms variable. Sets the number of frames the debug menu asks the camera to interpolate
|
|
over when changing mode. Only id 40 belongs to this item; anything else returns fallback."
|
|
(when (and (= msg (debug-menu-msg press)) *camera*)
|
|
(if (= (/ id 8) 5) (set! *dm-cam-mode-interpolation* value)))
|
|
(cond
|
|
(*camera* (if (= (/ id 8) 5) *dm-cam-mode-interpolation* fallback))
|
|
(else fallback)))
|
|
|
|
(defun dm-cam-externalize ((mode symbol) (msg debug-menu-msg))
|
|
"External camera control. reset re-seats the external camera at the current view unless it is
|
|
locked, allow-z toggles the z-rotation option, and any other value selects that external mode,
|
|
deselecting it if it was already current. Reports whether mode is selected."
|
|
(when (= msg (debug-menu-msg press))
|
|
(cond
|
|
((= mode 'reset) (if (!= *external-cam-mode* 'locked) (external-cam-reset!)))
|
|
((= mode 'allow-z) (set! *external-cam-options* (logxor *external-cam-options* (external-cam-option allow-z))))
|
|
((= *external-cam-mode* mode) (set! *external-cam-mode* #f))
|
|
(else (if (not *external-cam-mode*) (external-cam-reset!)) (set! *external-cam-mode* mode))))
|
|
(if (= mode 'allow-z) (logtest? *external-cam-options* (external-cam-option allow-z)) (= *external-cam-mode* mode)))
|
|
|
|
(defun dm-cam-render-float ((id int) (msg debug-menu-msg) (value float) (fallback float))
|
|
"Field of view in degrees. id 0 writes *math-camera* and rebuilds its projection; id 8 asks
|
|
*camera* to change fov. Returns the live fov in degrees, or fallback when the object it edits
|
|
is missing."
|
|
(when (= msg (debug-menu-msg press))
|
|
(cond
|
|
((zero? (/ id 8))
|
|
(when *math-camera*
|
|
(set! (-> *math-camera* fov) (* 182.04445 value))
|
|
(update-math-camera *math-camera* (-> *setting-control* current video-mode) (-> *setting-control* current aspect-ratio))))
|
|
((= (/ id 8) 1) (if *camera* (send-event *camera* 'set-fov (* 182.04445 value))))))
|
|
(cond
|
|
((zero? (/ id 8))
|
|
(cond
|
|
(*math-camera* (* 0.005493164 (-> *math-camera* fov)))
|
|
(else (empty) fallback)))
|
|
((= (/ id 8) 1)
|
|
(cond
|
|
(*camera* (let ((units-to-degrees 0.005493164)) (* units-to-degrees (the-as float (send-event *camera* 'query-fov)))))
|
|
(else (empty) fallback)))
|
|
(else (empty) fallback)))
|
|
|
|
(defun dm-subdiv-float ((setting symbol) (msg debug-menu-msg) (value float) (fallback float))
|
|
"Subdivision distance in meters. setting picks close or far, and the value goes into profile 3 of
|
|
*subdivide-settings*, which is the profile the artist menu overrides. Returns fallback when the
|
|
camera or settings are not loaded."
|
|
(when (= msg (debug-menu-msg press))
|
|
(case setting
|
|
(('close) (if (and *math-camera* *subdivide-settings*) (set! (-> *subdivide-settings* close 3) (meters value))))
|
|
(('far) (if (and *math-camera* *subdivide-settings*) (set! (-> *subdivide-settings* far 3) (meters value))))))
|
|
(case setting
|
|
(('close) (if (and *math-camera* *subdivide-settings*) (/ (-> *subdivide-settings* close 3) METER_LENGTH) fallback))
|
|
(('far) (if (and *math-camera* *subdivide-settings*) (/ (-> *subdivide-settings* far 3) METER_LENGTH) fallback))
|
|
(else fallback)))
|
|
|
|
(defun dm-subdiv-int ((setting symbol) (msg debug-menu-msg) (value int) (fallback int))
|
|
"Anim Tester playback speed. setting is anim-speed; writes and reads the speed of the running
|
|
tester, or returns fallback when no tester is running."
|
|
(when (= msg (debug-menu-msg press))
|
|
(case setting
|
|
(('anim-speed) (if *anim-tester* (set! (-> *anim-tester* 0 speed) value)))))
|
|
(case setting
|
|
(('anim-speed) (if *anim-tester* (-> *anim-tester* 0 speed) fallback))
|
|
(else fallback)))
|
|
|
|
(defun dm-setting-language ((id int) (msg debug-menu-msg))
|
|
"Language flag. Writes the default language setting from id / 8 and reports whether it is the
|
|
current one."
|
|
(if (= msg (debug-menu-msg press)) (set! (-> *setting-control* default language) (the-as language-enum (/ id 8))))
|
|
(= (-> *setting-control* default language) (/ id 8)))
|
|
|
|
(defun dm-current-continue ((continue-name string) (msg debug-menu-msg))
|
|
"Continue point flag. On press, restart the player at the named continue point. Reports whether
|
|
it is the continue point the game would resume from."
|
|
(if (= msg (debug-menu-msg press)) (start 'play (get-continue-by-name *game-info* continue-name)))
|
|
(string= (-> (get-or-create-continue! *game-info*) name) continue-name))
|
|
|
|
(defun dm-subdiv-draw-func ((id int) (msg debug-menu-msg))
|
|
"Terrain subdivision draw mode flag: 0 textured, 1 outline, 2 gouraud, 3 hack, from id / 8."
|
|
(if (= msg (debug-menu-msg press)) (set! *subdivide-draw-mode* (/ id 8)))
|
|
(= (/ id 8) *subdivide-draw-mode*))
|
|
|
|
(defun dm-ocean-subdiv-draw-func ((id int) (msg debug-menu-msg))
|
|
"Ocean subdivision draw mode flag: 0 textured, 1 outline, 2 gouraud, from id / 8."
|
|
(if (= msg (debug-menu-msg press)) (set! *ocean-subdivide-draw-mode* (/ id 8)))
|
|
(= (/ id 8) *ocean-subdivide-draw-mode*))
|
|
|
|
(defun dm-time-of-day-func ((id int) (msg debug-menu-msg))
|
|
"Time of day flag. Modes 0 through 7 freeze the clock at a fixed hour; mode 8 starts it running
|
|
at the normal or fast rate. Reports whether id / 8 is the current mode."
|
|
(when (= msg (debug-menu-msg press))
|
|
(set! *time-of-day-mode* (/ id 8))
|
|
(set! (-> *time-of-day-proc* 0 minute) 0)
|
|
(cond
|
|
((zero? (/ id 8)) (set! (-> *time-of-day-proc* 0 time-ratio) 0.0) (set! (-> *time-of-day-proc* 0 hour) 7))
|
|
((= (/ id 8) 1) (set! (-> *time-of-day-proc* 0 time-ratio) 0.0) (set! (-> *time-of-day-proc* 0 hour) 9))
|
|
((= (/ id 8) 2) (set! (-> *time-of-day-proc* 0 time-ratio) 0.0) (set! (-> *time-of-day-proc* 0 hour) 12))
|
|
((= (/ id 8) 3) (set! (-> *time-of-day-proc* 0 time-ratio) 0.0) (set! (-> *time-of-day-proc* 0 hour) 15))
|
|
((= (/ id 8) 4) (set! (-> *time-of-day-proc* 0 time-ratio) 0.0) (set! (-> *time-of-day-proc* 0 hour) 18))
|
|
((= (/ id 8) 5) (set! (-> *time-of-day-proc* 0 time-ratio) 0.0) (set! (-> *time-of-day-proc* 0 hour) 19))
|
|
((= (/ id 8) 6) (set! (-> *time-of-day-proc* 0 time-ratio) 0.0) (set! (-> *time-of-day-proc* 0 hour) 23))
|
|
((= (/ id 8) 7) (set! (-> *time-of-day-proc* 0 time-ratio) 0.0) (set! (-> *time-of-day-proc* 0 hour) 4))
|
|
((= (/ id 8) 8)
|
|
(if *time-of-day-fast* (set! (-> *time-of-day-proc* 0 time-ratio) 18000.0) (set! (-> *time-of-day-proc* 0 time-ratio) 300.0)))))
|
|
(= (/ id 8) *time-of-day-mode*))
|
|
|
|
(defun dm-time-of-day-func2 ((setting (pointer symbol)) (msg debug-menu-msg))
|
|
"Fast clock flag. Toggles the boolean held by setting, then re-applies the normal or fast time
|
|
ratio if the clock is already running."
|
|
(when (= msg (debug-menu-msg press))
|
|
(set! (-> setting 0) (not (-> setting 0)))
|
|
(when (!= (-> *time-of-day-proc* 0 time-ratio) 0.0)
|
|
(if *time-of-day-fast* (set! (-> *time-of-day-proc* 0 time-ratio) 18000.0) (set! (-> *time-of-day-proc* 0 time-ratio) 300.0))))
|
|
(-> setting 0))
|
|
|
|
(defun dm-boolean-toggle-pick-func ((setting (pointer symbol)) (msg debug-menu-msg))
|
|
"The flag callback behind most items in this file: toggle the boolean held by the symbol setting
|
|
on press, and report its value."
|
|
(if (= msg (debug-menu-msg press)) (set! (-> setting 0) (not (-> setting 0))))
|
|
(-> setting 0))
|
|
|
|
(defun dm-time-of-day-pick-func ((id symbol) (msg debug-menu-msg))
|
|
"Time of day flag that starts or stops the clock through time-of-day-setup. It returns nothing,
|
|
so the item's displayed state is whatever the call left in the result register."
|
|
(time-of-day-setup (= msg (debug-menu-msg press)))
|
|
(none))
|
|
|
|
(defun dm-actor-marks-pick-func ((mode symbol) (msg debug-menu-msg))
|
|
"*display-actor-marks* selector: #f, #t, full or process."
|
|
(if (= msg (debug-menu-msg press)) (set! *display-actor-marks* mode))
|
|
(= *display-actor-marks* mode))
|
|
|
|
(defun dm-compact-actor-pick-func ((mode symbol) (msg debug-menu-msg))
|
|
"*compact-actors* selector: #f, #t or debug."
|
|
(if (= msg (debug-menu-msg press)) (set! *compact-actors* mode))
|
|
(= *compact-actors* mode))
|
|
|
|
(defun dm-actor-vis-pick-func ((mode symbol) (msg debug-menu-msg))
|
|
"*display-actor-vis* selector: #f, box, sphere or #t."
|
|
(if (= msg (debug-menu-msg press)) (set! *display-actor-vis* mode))
|
|
(= *display-actor-vis* mode))
|
|
|
|
(defun dm-game-mode-pick-func ((mode symbol) (msg debug-menu-msg))
|
|
"Game mode selector: play or debug."
|
|
(if (= msg (debug-menu-msg press)) (set! (-> *game-info* mode) mode))
|
|
(= (-> *game-info* mode) mode))
|
|
|
|
(defun dm-vu1-user-toggle-pick-func ((mask vu1-renderer-mask) (msg debug-menu-msg))
|
|
"Toggle one renderer in *vu1-enable-user-menu*. vu1-renderer-mask starts at bit 3 so that the
|
|
boxed template values pass through unshifted."
|
|
(if (= msg (debug-menu-msg press)) (set! *vu1-enable-user-menu* (logxor *vu1-enable-user-menu* (the-as uint mask))))
|
|
(logtest? *vu1-enable-user-menu* mask))
|
|
|
|
(defun dm-vu1-user-set-pick-func ((mask vu1-renderer-mask) (msg debug-menu-msg))
|
|
"Replace *vu1-enable-user-menu* outright, for the all on and all off entries. all off keeps the
|
|
two unread high bits set."
|
|
(if (= msg (debug-menu-msg press)) (set! *vu1-enable-user-menu* mask))
|
|
(= *vu1-enable-user-menu* mask))
|
|
|
|
(defun dm-texture-user-toggle-pick-func ((mask int) (msg debug-menu-msg))
|
|
"Toggle one texture category in *texture-enable-user-menu*. The Render page passes boxed values
|
|
that are never divided by 8, so every entry reaches the bit three positions above the one its
|
|
label names."
|
|
(if (= msg (debug-menu-msg press)) (set! *texture-enable-user-menu* (logxor *texture-enable-user-menu* mask)))
|
|
(logtest? *texture-enable-user-menu* mask))
|
|
|
|
(defun dm-texture-user-set-pick-func ((mask int) (msg debug-menu-msg))
|
|
"Replace *texture-enable-user-menu* outright, for the all textures on and off entries. Shifted
|
|
the same way as dm-texture-user-toggle-pick-func, so all textures on leaves the tfrag, pris and
|
|
shrub bits clear."
|
|
(if (= msg (debug-menu-msg press)) (set! *texture-enable-user-menu* mask))
|
|
(= *texture-enable-user-menu* mask))
|
|
|
|
(defun dm-strip-lines-toggle-pick-func ((id int) (msg debug-menu-msg))
|
|
"Toggle one *display-strip-lines* edge category, id / 8."
|
|
(if (= msg (debug-menu-msg press)) (set! *display-strip-lines* (logxor *display-strip-lines* (/ id 8))))
|
|
(logtest? *display-strip-lines* (/ id 8)))
|
|
|
|
(defun dm-strip-lines-set-pick-func ((id int) (msg debug-menu-msg))
|
|
"Set *display-strip-lines* to a whole preset, id / 8."
|
|
(if (= msg (debug-menu-msg press)) (set! *display-strip-lines* (/ id 8)))
|
|
(= *display-strip-lines* (/ id 8)))
|
|
|
|
(defun dm-edit-instance-toggle-pick-func ((mask int) (msg debug-menu-msg))
|
|
"Toggle prototype flag bits on the instance named by *edit-instance*. Reports #f when no instance
|
|
is selected or the name is not loaded."
|
|
(let ((proto (find-instance-by-name *edit-instance*)))
|
|
(when proto
|
|
(if (= msg (debug-menu-msg press)) (logxor! (-> proto flags) (the-as uint mask)))
|
|
(logtest? (-> proto flags) mask))))
|
|
|
|
(defun all-texture-tweak-adjust ((dir texture-page-dir) (delta float))
|
|
"Shift the uv-dist of every texture in dir by delta and push the change into the adgif shaders
|
|
that reference them. The body is disabled, so the all tweak+ and all tweak- items do nothing."
|
|
;; (dotimes (s4-0 (-> dir length))
|
|
;; (let ((s3-0 (-> dir entries s4-0 page)))
|
|
;; (dotimes (s2-0 (min (-> s3-0 length) (-> dir entries s4-0 length)))
|
|
;; (when (-> dir entries s4-0 link)
|
|
;; (let ((v1-12 (+ (the-as uint (-> dir entries s4-0 link)) (* s2-0 4)))
|
|
;; (s1-0 (-> dir entries s4-0 page data s2-0))
|
|
;; )
|
|
;; (+! (-> s1-0 uv-dist) delta)
|
|
;; (+ v1-12 0)
|
|
;; (let ((s0-0 (the-as object (* (-> (dynamic-array-field-access v1-12 next PLACEHOLDER) shader) 16))))
|
|
;; (while (nonzero? (the-as uint s0-0))
|
|
;; (adgif-shader-update! (the-as adgif-shader s0-0) s1-0)
|
|
;; (+ (the-as uint s0-0) 40)
|
|
;; (set! s0-0 (* (-> (the-as adgif-shader s0-0) next shader) 16))
|
|
;; )
|
|
;; )
|
|
;; )
|
|
;; )
|
|
;; )
|
|
;; )
|
|
;; )
|
|
0
|
|
(none))
|
|
|
|
(defun debug-menu-node<? ((left debug-menu-node) (right debug-menu-node))
|
|
"Order two menu nodes by name, for sorting a page's item list."
|
|
(string<=? (-> left name) (-> right name)))
|
|
|
|
(defun dm-shader-pick-func ((tex-id texture-id) (msg debug-menu-msg))
|
|
"Select tex-id as *edit-shader* if its page is loaded and the texture has a shader link. Reports
|
|
whether it is the current selection."
|
|
(if (and (= msg (debug-menu-msg press))
|
|
*texture-page-dir*
|
|
(-> *texture-page-dir* entries (-> tex-id page) page)
|
|
(-> *texture-page-dir* entries (-> tex-id page) link)
|
|
(nonzero? (-> *texture-page-dir* entries (-> tex-id page) link next (-> tex-id index))))
|
|
(set! *edit-shader* tex-id))
|
|
(and (nonzero? *edit-shader*) (= tex-id *edit-shader*)))
|
|
|
|
(define *shader-pick-menu* (the-as debug-menu #f))
|
|
|
|
(defun build-shader-list ()
|
|
"Rebuild the Pick Shader page with one entry per loaded texture that has a shader link, sorted by
|
|
name. Each entry's id packs the texture index and page index into a texture-id."
|
|
(debug-menu-remove-all-items *shader-pick-menu*)
|
|
(when *texture-page-dir*
|
|
(dotimes (page-index (-> *texture-page-dir* length))
|
|
(let ((page (-> *texture-page-dir* entries page-index page))
|
|
(page-link (-> *texture-page-dir* entries page-index link)))
|
|
(when (and page page-link)
|
|
(dotimes (tex-index (-> page length))
|
|
(when (and (-> page data tex-index) (nonzero? (-> page-link next tex-index)))
|
|
(let ((item (new 'debug
|
|
'debug-menu-item-flag
|
|
(-> page data tex-index name)
|
|
(logior (shr (shl tex-index 52) 44) (shr (shl page-index 52) 32))
|
|
dm-shader-pick-func)))
|
|
(debug-menu-append-item *shader-pick-menu* item))))))))
|
|
(set! (-> *shader-pick-menu* items) (sort (-> *shader-pick-menu* items) debug-menu-node<?))
|
|
(none))
|
|
|
|
(defun dm-instance-pick-func ((name string) (msg debug-menu-msg))
|
|
"Select the named instance prototype as *edit-instance*, clearing the selection when no loaded
|
|
level has that prototype."
|
|
(when (= msg (debug-menu-msg press))
|
|
(if (find-instance-by-name name) (set! *edit-instance* name) (set! *edit-instance* #f)))
|
|
(and *edit-instance* (string= name *edit-instance*)))
|
|
|
|
(defun dm-enable-instance-func ((name string) (msg debug-menu-msg))
|
|
"Visibility flag for one tie prototype. Toggles its invisible bit and reports the bit inverted,
|
|
so the item reads as enabled when the prototype draws."
|
|
(let ((proto (find-instance-by-name name)))
|
|
(cond
|
|
(proto (if (= msg (debug-menu-msg press)) (logxor! (-> proto flags) 1)) (not (logtest? (-> proto flags) 1)))
|
|
(else #f))))
|
|
|
|
(define *instance-shrub-menu* (the-as debug-menu #f))
|
|
|
|
(define *instance-tie-menu* (the-as debug-menu #f))
|
|
|
|
(define *enable-instance-tie-menu* (the-as debug-menu #f))
|
|
|
|
(defun build-instance-list ((id object))
|
|
"Rebuild the shrub and tie prototype pages from the prototypes of every active level, sorted by
|
|
name. Clears *display-instance-info* because the previous selection no longer applies."
|
|
(debug-menu-remove-all-items *instance-shrub-menu*)
|
|
(debug-menu-remove-all-items *instance-tie-menu*)
|
|
(debug-menu-remove-all-items *enable-instance-tie-menu*)
|
|
(set! *display-instance-info* #f)
|
|
(dotimes (level-index (-> *level* length))
|
|
(let ((active-level (-> *level* level level-index)))
|
|
(when (= (-> active-level status) 'active)
|
|
(let ((trees (-> active-level bsp drawable-trees)))
|
|
(dotimes (tree-index (-> trees length))
|
|
(let ((tree (-> trees trees tree-index)))
|
|
(case (-> tree type)
|
|
((drawable-tree-instance-shrub)
|
|
(let ((shrub-protos (-> (the-as drawable-tree-instance-shrub tree) info prototype-inline-array-shrub)))
|
|
(dotimes (shrub-index (-> shrub-protos length))
|
|
;; og:preserve-this
|
|
(let ((item (new 'debug
|
|
'debug-menu-item-flag
|
|
(-> shrub-protos data shrub-index name)
|
|
(-> shrub-protos data shrub-index name)
|
|
dm-instance-pick-func)))
|
|
(debug-menu-append-item *instance-shrub-menu* item)))))
|
|
((drawable-tree-instance-tie)
|
|
(let ((tie-protos (-> (the-as drawable-tree-instance-tie tree) prototypes prototype-array-tie)))
|
|
(dotimes (tie-index (-> tie-protos length))
|
|
(let ((pick-item (new 'debug
|
|
'debug-menu-item-flag
|
|
(-> tie-protos array-data tie-index name)
|
|
(-> tie-protos array-data tie-index name)
|
|
dm-instance-pick-func)))
|
|
(debug-menu-append-item *instance-tie-menu* pick-item))
|
|
(let ((enable-item (new 'debug
|
|
'debug-menu-item-flag
|
|
(-> tie-protos array-data tie-index name)
|
|
(-> tie-protos array-data tie-index name)
|
|
dm-enable-instance-func)))
|
|
(set! (-> enable-item is-on) #t)
|
|
(debug-menu-append-item *enable-instance-tie-menu* enable-item))))))))))))
|
|
(set! (-> *instance-shrub-menu* items)
|
|
(sort (-> *instance-shrub-menu* items)
|
|
(lambda ((left debug-menu) (right debug-menu))
|
|
(string<=? (-> left name) (-> right name)))))
|
|
(set! (-> *instance-tie-menu* items)
|
|
(sort (-> *instance-tie-menu* items)
|
|
(lambda ((left debug-menu) (right debug-menu))
|
|
(string<=? (-> left name) (-> right name)))))
|
|
(set! (-> *enable-instance-tie-menu* items)
|
|
(sort (-> *enable-instance-tie-menu* items)
|
|
(lambda ((left debug-menu) (right debug-menu))
|
|
(string<=? (-> left name) (-> right name)))))
|
|
0
|
|
(none))
|
|
|
|
(defun debug-create-cam-restore ()
|
|
"Print a cam-restore function to the listener that reproduces the current camera position,
|
|
orientation, fov and level, together with the profile times, tfrag memory total and polygon
|
|
statistics needed to compare a later frame against this one."
|
|
(cond
|
|
(*math-camera*
|
|
(format #t "(defun-debug cam-restore ()~%")
|
|
(format #t " ;;this function is a hack, don't use it as an example~%")
|
|
(format #t " (let ((pos (new 'stack 'vector))~%")
|
|
(format #t " (rot (new 'stack 'matrix)))~%")
|
|
(format #t " (set! (-> pos x) ~12F)~%" (-> *math-camera* trans x))
|
|
(format #t " (set! (-> pos y) ~12F)~%" (-> *math-camera* trans y))
|
|
(format #t " (set! (-> pos z) ~12F)~%" (-> *math-camera* trans z))
|
|
(format #t " (set! (-> pos w) 1.0)~%")
|
|
(format #t " (set! (-> rot data 0) ~12F)~%" (-> *math-camera* inv-camera-rot vector 0 x))
|
|
(format #t " (set! (-> rot data 1) ~12F)~%" (-> *math-camera* inv-camera-rot vector 0 y))
|
|
(format #t " (set! (-> rot data 2) ~12F)~%" (-> *math-camera* inv-camera-rot vector 0 z))
|
|
(format #t " (set! (-> rot data 3) ~12F)~%" (-> *math-camera* inv-camera-rot vector 0 w))
|
|
(format #t " (set! (-> rot data 4) ~12F)~%" (-> *math-camera* inv-camera-rot vector 1 x))
|
|
(format #t " (set! (-> rot data 5) ~12F)~%" (-> *math-camera* inv-camera-rot vector 1 y))
|
|
(format #t " (set! (-> rot data 6) ~12F)~%" (-> *math-camera* inv-camera-rot vector 1 z))
|
|
(format #t " (set! (-> rot data 7) ~12F)~%" (-> *math-camera* inv-camera-rot vector 1 w))
|
|
(format #t " (set! (-> rot data 8) ~12F)~%" (-> *math-camera* inv-camera-rot vector 2 x))
|
|
(format #t " (set! (-> rot data 9) ~12F)~%" (-> *math-camera* inv-camera-rot vector 2 y))
|
|
(format #t " (set! (-> rot data 10) ~12F)~%" (-> *math-camera* inv-camera-rot vector 2 z))
|
|
(format #t " (set! (-> rot data 11) ~12F)~%" (-> *math-camera* inv-camera-rot vector 2 w))
|
|
(format #t " (set! (-> rot data 12) ~12F)~%" 0.0)
|
|
(format #t " (set! (-> rot data 13) ~12F)~%" 0.0)
|
|
(format #t " (set! (-> rot data 14) ~12F)~%" 0.0)
|
|
(format #t " (set! (-> rot data 15) ~12F)~%" 1.0)
|
|
(let ((angles (new 'stack-no-clear 'euler-angles)))
|
|
(matrix->eul angles (-> *math-camera* inv-camera-rot) 21)
|
|
(format #t " ;; euler angles (xyz order degrees) x ~R y ~R z ~R~%" (-> angles x) (-> angles y) (-> angles z))
|
|
(format #t
|
|
" ;; MAYA euler angles (xyz order degrees) x ~R y ~R z ~R~%"
|
|
(-> angles x)
|
|
(- 32768.0 (-> angles y))
|
|
(-> angles z)))
|
|
(format #t " (debug-set-camera-pos-rot! pos rot)~%")
|
|
(format #t " (send-event *camera* 'set-fov (deg ~f))~%" (* 0.005493164 (-> *math-camera* fov)))
|
|
(format #t " (clear *camera-old-level*)~%")
|
|
(format #t " (format *camera-old-level* \"~A\")~%" (-> *level* level0 name))
|
|
(let ((format-fn format)
|
|
(format-dest #t)
|
|
(format-string " (set! *camera-old-cpu* ~D)~%")
|
|
(cpu-bar (-> *display* frames (-> *display* last-screen) frame profile-bar 0)))
|
|
(format-fn format-dest format-string (-> cpu-bar data (+ (-> cpu-bar profile-frame-count) -2) time-stamp)))
|
|
(let ((format-fn format)
|
|
(format-dest #t)
|
|
(format-string " (set! *camera-old-vu* ~D)~%")
|
|
(vu-bar (-> *display* frames (-> *display* last-screen) frame profile-bar 1)))
|
|
(format-fn format-dest format-string (-> vu-bar data (+ (-> vu-bar profile-frame-count) -2) time-stamp)))
|
|
(compute-memory-usage (-> *level* level0) #f)
|
|
(format #t
|
|
" (set! *camera-old-tfrag-bytes* ~D)~%"
|
|
(+ (-> *level* level0 mem-usage-block data 1 total)
|
|
(-> *level* level0 mem-usage-block data 2 total)
|
|
(-> *level* level0 mem-usage-block data 3 total)
|
|
(-> *level* level0 mem-usage-block data 4 total)
|
|
(-> *level* level0 mem-usage-block data 5 total)
|
|
(-> *level* level0 mem-usage-block data 6 total)
|
|
(-> *level* level0 mem-usage-block data 7 total)
|
|
(-> *level* level0 mem-usage-block data 8 total)))
|
|
(format #t " (clear *camera-old-stat-string-tfrag*)~%")
|
|
(format #t " (clear *camera-old-stat-string-tfrag-near*)~%")
|
|
(format #t " (clear *camera-old-stat-string-total*)~%")
|
|
(when *stats-poly*
|
|
(format #t " (format *camera-old-stat-string-tfrag* \"~S\")~%" *stat-string-tfrag*)
|
|
(format #t " (format *camera-old-stat-string-tfrag-near* \"~S\")~%" *stat-string-tfrag-near*)
|
|
(format #t " (format *camera-old-stat-string-total* \"~S\")~%" *stat-string-total*))
|
|
(format #t " (set! *display-camera-old-stats* #t)~%")
|
|
(format #t " )~%")
|
|
(format #t " )~%"))
|
|
(else (format #t "camera save failed~%")))
|
|
(none))
|
|
|
|
(defun debug-menu-make-camera-mode-menu ((menu debug-menu) (mode-menu debug-menu))
|
|
"Fill mode-menu with one entry per camera slave state and attach it to menu."
|
|
;; the result of this one is thrown away; all it does is reparent menu, and a menu's parent is
|
|
;; never read.
|
|
(new 'debug 'debug-menu-item-submenu "Camera" menu)
|
|
(let ((item (new 'debug 'debug-menu-item-submenu "Mode" mode-menu))) (debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Off" #f dm-cam-mode-func))) (debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Free-floating" cam-free-floating dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Fixed" cam-fixed dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Pov" cam-pov dm-cam-mode-func))) (debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Pov180" cam-pov180 dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Billy" cam-billy dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Pov-track" cam-pov-track dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Decel" cam-decel dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Endless fall" cam-endlessfall dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Eye" cam-eye dm-cam-mode-func))) (debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Stick" cam-stick dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "String" cam-string dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Standoff" cam-standoff dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Circular" cam-circular dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Look At" cam-lookat dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Center of world" cam-point-watch dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Spline" cam-spline dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Bike" cam-bike dm-cam-mode-func))) (debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Robotboss" cam-robotboss dm-cam-mode-func)))
|
|
(debug-menu-append-item mode-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-function "Reset Free" 6 (the-as (function object object) dm-cam-settings-func))))
|
|
(debug-menu-append-item mode-menu item))
|
|
(none))
|
|
|
|
(defun debug-menu-make-camera-menu ((context debug-menu-context))
|
|
"Build the Camera page and return the item that opens it."
|
|
(let* ((menu (new 'debug 'debug-menu context "Camera menu"))
|
|
(camera-item (new 'debug 'debug-menu-item-submenu "Camera" menu)))
|
|
(let ((mode-menu (new 'debug 'debug-menu context "Camera mode menu"))) (debug-menu-make-camera-mode-menu menu mode-menu))
|
|
(let ((external-menu (new 'debug 'debug-menu context "Camera externalize menu")))
|
|
(let ((item (new 'debug 'debug-menu-item-submenu "External" external-menu))) (debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "CPad 0" 'pad-0 dm-cam-externalize)))
|
|
(debug-menu-append-item external-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "CPad 1" 'pad-1 dm-cam-externalize)))
|
|
(debug-menu-append-item external-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Lock" 'locked dm-cam-externalize)))
|
|
(debug-menu-append-item external-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Reset" 'reset dm-cam-externalize)))
|
|
(debug-menu-append-item external-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Allow z rot" 'allow-z dm-cam-externalize)))
|
|
(debug-menu-append-item external-menu item))
|
|
(let ((fov-item (new 'debug 'debug-menu-item-var "Fov" 0 80)))
|
|
(debug-menu-item-var-make-float fov-item
|
|
dm-cam-render-float
|
|
(the-as float 1.0)
|
|
#t
|
|
(the-as float 15.0)
|
|
(the-as float 180.0)
|
|
1)
|
|
(debug-menu-append-item external-menu fov-item)))
|
|
(let ((collision-menu (new 'debug 'debug-menu context "Camera collision menu")))
|
|
(let ((item (new 'debug 'debug-menu-item-submenu "Collision" collision-menu))) (debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Record" '*record-cam-collide-history* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item collision-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Display" '*display-cam-collide-history* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item collision-menu item)))
|
|
(let ((settings-menu (new 'debug 'debug-menu context "Camera settings menu")))
|
|
(let ((item (new 'debug 'debug-menu-item-submenu "Settings" settings-menu))) (debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Butt cam" 0 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Block shift buttons" 13 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Same side" 1 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Move spherical" 2 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Drag" 3 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Allow Z rot" 4 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Pitch for jump" 7 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Find hidden target" 8 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Move along camera Z" '*cam-free-move-along-z* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Ignore regions" 9 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Switch only on ground" 10 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Collide" 11 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Line of Sight" 12 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "No Rotate" 14 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Sticky Angle" 15 dm-cam-settings-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((interp-item (new 'debug 'debug-menu-item-var "Interp Frms" 40 80)))
|
|
(debug-menu-item-var-make-int interp-item dm-cam-settings-func-int 1 #f 0 0 #f)
|
|
(debug-menu-append-item settings-menu interp-item))
|
|
(let ((fov-item (new 'debug 'debug-menu-item-var "Fov" 8 80)))
|
|
(debug-menu-item-var-make-float fov-item
|
|
dm-cam-render-float
|
|
(the-as float 1.0)
|
|
#t
|
|
(the-as float 15.0)
|
|
(the-as float 180.0)
|
|
1)
|
|
(debug-menu-append-item settings-menu fov-item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "no mip/lod correction" '*camera-no-mip-correction* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "last attacker" '*display-camera-last-attacker* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "old stats" '*display-camera-old-stats* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "xyz axes" '*display-xyz-axes* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Master Marks" '*display-cam-master-marks* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Other Marks" '*display-cam-other* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "los debug" '*display-cam-los-debug* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "los info" '*display-cam-los-info* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "los Marks" '*display-cam-los-marks* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "coll Marks" '*display-cam-coll-marks* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item settings-menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Camera Marks" '*display-camera-marks* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item settings-menu item)))
|
|
(let ((item (new 'debug
|
|
'debug-menu-item-flag
|
|
"Edit"
|
|
'*cam-layout*
|
|
(lambda ((setting symbol) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(if (-> setting value) (cam-layout-stop) (cam-layout-start)))
|
|
(-> setting value)))))
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-function "Save Pos" #f (the-as (function object object) debug-create-cam-restore))))
|
|
(debug-menu-append-item menu item))
|
|
camera-item))
|
|
|
|
(defun debug-menu-make-shader-menu ((context debug-menu-context))
|
|
"Build the Shader page and return the item that opens it. Every variable item on the page edits
|
|
the adgif shaders of the texture in *edit-shader*, so the page does nothing until one is
|
|
picked from Pick Shader."
|
|
(let* ((menu (new 'debug 'debug-menu context "Shader menu"))
|
|
(shader-item (new 'debug 'debug-menu-item-submenu "Shader" menu)))
|
|
(let ((pick-menu (new 'debug 'debug-menu context "Shader pick menu")))
|
|
(set! *shader-pick-menu* pick-menu)
|
|
(let ((item (new 'debug 'debug-menu-item-submenu "Pick Shader" pick-menu))) (debug-menu-append-item menu item)))
|
|
(let ((item (new 'debug 'debug-menu-item-function "Refresh" #f (the-as (function object object) build-shader-list))))
|
|
(debug-menu-append-item menu item))
|
|
(let ((tweak-item (new 'debug 'debug-menu-item-var "tweak" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-float tweak-item
|
|
(the-as (function int debug-menu-msg float float float)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value float) (fallback float))
|
|
(set! fallback
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(tex (lookup-texture-by-id (the-as texture-id tex-id)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
((and tex page-link)
|
|
(when (= msg (debug-menu-msg press))
|
|
(set! (-> tex uv-dist) value)
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(adgif-shader-update! (the-as adgif-shader shader-cursor) tex)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(-> tex uv-dist))
|
|
(else (empty) fallback))))
|
|
(else (empty) fallback)))
|
|
(none)))
|
|
(the-as float 0.1)
|
|
#t
|
|
(the-as float 0.1)
|
|
(the-as float 30.0)
|
|
1)
|
|
(debug-menu-append-item menu tweak-item))
|
|
(let ((item (new 'debug
|
|
'debug-menu-item-function
|
|
"all tweak+"
|
|
#f
|
|
(lambda ((id object))
|
|
(all-texture-tweak-adjust *texture-page-dir* (the-as float 0.1))))))
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug
|
|
'debug-menu-item-function
|
|
"all tweak-"
|
|
#f
|
|
(lambda ((id object))
|
|
(all-texture-tweak-adjust *texture-page-dir* (the-as float -0.1))))))
|
|
(debug-menu-append-item menu item))
|
|
;; The rest of the page edits one field of the adgif shader registers of the picked texture.
|
|
;; Each item walks the page's shader link list for that texture, writes the field into every
|
|
;; shader on it, and displays the value read back from the first one.
|
|
(let ((item (new 'debug 'debug-menu-item-var "l" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) tex1 l) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) tex1 l) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
3
|
|
#f)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "k" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) tex1 k) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) tex1 k) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
-2048
|
|
2047
|
|
#f)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "mmin" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) tex1 mmin) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) tex1 mmin) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
5
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "mmag" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) tex1 mmag) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) tex1 mmag) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
1
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "lcm" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) tex1 lcm) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) tex1 lcm) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
1
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "tfx" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) tex0 tfx) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) tex0 tfx) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
3
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "tbp" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) tex0 tbp0) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) tex0 tbp0) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
#x4000
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "tbw" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) tex0 tbw) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) tex0 tbw) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
15
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "tw" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) tex0 tw) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) tex0 tw) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
10
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "th" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) tex0 th) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) tex0 th) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
10
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "mxl" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) tex1 mxl) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) tex1 mxl) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
6
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "wms" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) clamp wms) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) clamp wms) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
3
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "wmt" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) clamp wmt) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) clamp wmt) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
3
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "minu" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) clamp minu) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) clamp minu) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
511
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "maxu" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) clamp maxu) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) clamp maxu) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
511
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "minv" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) clamp minv) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) clamp minv) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
511
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
(let ((item (new 'debug 'debug-menu-item-var "maxv" (the-as int '*edit-shader*) 80)))
|
|
(debug-menu-item-var-make-int item
|
|
(the-as (function int debug-menu-msg int int int)
|
|
(lambda ((id symbol) (msg debug-menu-msg) (value int) (fallback basic))
|
|
(cond
|
|
(*texture-page-dir*
|
|
(let* ((tex-id (the-as texture-id (-> id value)))
|
|
(page-link (-> *texture-page-dir* entries (-> tex-id page) link)))
|
|
(cond
|
|
(page-link
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((shader-cursor (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(while (nonzero? (the-as uint shader-cursor))
|
|
(set! (-> (the-as adgif-shader shader-cursor) clamp maxv) value)
|
|
(set! shader-cursor (* (-> (the-as adgif-shader shader-cursor) next shader) 16)))))
|
|
(let ((first-shader (the-as object (* (-> page-link next (-> tex-id index) shader) 16))))
|
|
(if (nonzero? (the-as uint first-shader)) (-> (the-as adgif-shader first-shader) clamp maxv) fallback)))
|
|
(else fallback))))
|
|
(else fallback))))
|
|
1
|
|
#t
|
|
0
|
|
511
|
|
#t)
|
|
(debug-menu-append-item menu item))
|
|
shader-item))
|
|
|
|
(defun debug-menu-make-instance-menu ((context debug-menu-context))
|
|
"Build the Instance page and return the item that opens it."
|
|
(let* ((menu (new 'debug 'debug-menu context "Instance menu"))
|
|
(instance-item (new 'debug 'debug-menu-item-submenu "Instance" menu)))
|
|
(let ((shrub-menu (new 'debug 'debug-menu context "Instance shrub menu")))
|
|
(set! *instance-shrub-menu* shrub-menu)
|
|
(let ((item (new 'debug 'debug-menu-item-submenu "Pick Shrub" shrub-menu))) (debug-menu-append-item menu item)))
|
|
(let ((tie-menu (new 'debug 'debug-menu context "Instance tie menu")))
|
|
(set! *instance-tie-menu* tie-menu)
|
|
(let ((item (new 'debug 'debug-menu-item-submenu "Pick Tie" tie-menu))) (debug-menu-append-item menu item)))
|
|
(let ((item (new 'debug 'debug-menu-item-function "Refresh" #f build-instance-list))) (debug-menu-append-item menu item))
|
|
(let ((near-item (new 'debug 'debug-menu-item-var "near" (the-as int '*edit-instance*) 80)))
|
|
(debug-menu-item-var-make-float near-item
|
|
(the-as (function int debug-menu-msg float float float)
|
|
(lambda ((id debug-menu) (msg debug-menu-msg) (value float) (fallback float))
|
|
(let ((proto (find-instance-by-name (-> id name))))
|
|
(cond
|
|
(proto
|
|
(when (= msg (debug-menu-msg press))
|
|
(set! (-> proto dists x) (meters value))
|
|
(prototype-bucket-recalc-fields proto))
|
|
(/ (-> proto dists x) METER_LENGTH))
|
|
(else (empty) fallback)))))
|
|
(the-as float 1.0)
|
|
#t
|
|
(the-as float 10.0)
|
|
(the-as float 250.0)
|
|
1)
|
|
(debug-menu-append-item menu near-item))
|
|
(let ((far-item (new 'debug 'debug-menu-item-var "far" (the-as int '*edit-instance*) 80)))
|
|
(debug-menu-item-var-make-float far-item
|
|
(the-as (function int debug-menu-msg float float float)
|
|
(lambda ((id debug-menu) (msg debug-menu-msg) (value float) (fallback float))
|
|
(let ((proto (find-instance-by-name (-> id name))))
|
|
(cond
|
|
(proto
|
|
(when (= msg (debug-menu-msg press))
|
|
(set! (-> proto dists w) (meters value))
|
|
(prototype-bucket-recalc-fields proto))
|
|
(/ (-> proto dists w) METER_LENGTH))
|
|
(else (empty) fallback)))))
|
|
(the-as float 1.0)
|
|
#t
|
|
(the-as float 10.0)
|
|
(the-as float 250.0)
|
|
1)
|
|
(debug-menu-append-item menu far-item))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "invisible" 1 dm-edit-instance-toggle-pick-func)))
|
|
(debug-menu-append-item menu item))
|
|
(let ((enable-menu (new 'debug 'debug-menu context "Enable Instance Tie Menu")))
|
|
(set! *enable-instance-tie-menu* enable-menu)
|
|
(let ((item (new 'debug 'debug-menu-item-submenu "Enable Tie" enable-menu))) (debug-menu-append-item menu item)))
|
|
(let ((item (new 'debug 'debug-menu-item-flag "Instance Info" '*display-instance-info* dm-boolean-toggle-pick-func)))
|
|
(debug-menu-append-item menu item))
|
|
instance-item))
|
|
|
|
;; One flag callback per task stage. All seven take the task from id / 8, report 'invalid for a
|
|
;; task that has no such stage, and close the stage on press.
|
|
(defun dm-task-unknown ((id int) (msg debug-menu-msg))
|
|
"Close the unknown stage of the task id / 8. Returns 'invalid when the task has no such stage,
|
|
which draws the entry as unavailable."
|
|
(let ((task (/ id 8)))
|
|
(if (not (task-exists? (the-as game-task task) (task-status unknown))) (return 'invalid))
|
|
(if (= msg (debug-menu-msg press)) (close-specific-task! (the-as game-task task) (task-status unknown)))
|
|
(task-closed? (the-as game-task task) (task-status unknown))))
|
|
|
|
(defun dm-task-hint ((id int) (msg debug-menu-msg))
|
|
"Close the need-hint stage of the task id / 8, or return 'invalid when it has none."
|
|
(let ((task (/ id 8)))
|
|
(if (not (task-exists? (the-as game-task task) (task-status need-hint))) (return 'invalid))
|
|
(if (= msg (debug-menu-msg press)) (close-specific-task! (the-as game-task task) (task-status need-hint)))
|
|
(task-closed? (the-as game-task task) (task-status need-hint))))
|
|
|
|
(defun dm-task-introduction ((id int) (msg debug-menu-msg))
|
|
"Close the need-introduction stage of the task id / 8, or return 'invalid when it has none."
|
|
(let ((task (/ id 8)))
|
|
(if (not (task-exists? (the-as game-task task) (task-status need-introduction))) (return 'invalid))
|
|
(if (= msg (debug-menu-msg press)) (close-specific-task! (the-as game-task task) (task-status need-introduction)))
|
|
(task-closed? (the-as game-task task) (task-status need-introduction))))
|
|
|
|
(defun dm-task-reminder-a ((id int) (msg debug-menu-msg))
|
|
"Close the need-reminder-a stage of the task id / 8, or return 'invalid when it has none."
|
|
(let ((task (/ id 8)))
|
|
(if (not (task-exists? (the-as game-task task) (task-status need-reminder-a))) (return 'invalid))
|
|
(if (= msg (debug-menu-msg press)) (close-specific-task! (the-as game-task task) (task-status need-reminder-a)))
|
|
(task-closed? (the-as game-task task) (task-status need-reminder-a))))
|
|
|
|
(defun dm-task-reminder ((id int) (msg debug-menu-msg))
|
|
"Close the need-reminder stage of the task id / 8, or return 'invalid when it has none."
|
|
(let ((task (/ id 8)))
|
|
(if (not (task-exists? (the-as game-task task) (task-status need-reminder))) (return 'invalid))
|
|
(if (= msg (debug-menu-msg press)) (close-specific-task! (the-as game-task task) (task-status need-reminder)))
|
|
(task-closed? (the-as game-task task) (task-status need-reminder))))
|
|
|
|
(defun dm-task-reward-speech ((id int) (msg debug-menu-msg))
|
|
"Close the need-reward-speech stage of the task id / 8, or return 'invalid when it has none."
|
|
(let ((task (/ id 8)))
|
|
(if (not (task-exists? (the-as game-task task) (task-status need-reward-speech))) (return 'invalid))
|
|
(if (= msg (debug-menu-msg press)) (close-specific-task! (the-as game-task task) (task-status need-reward-speech)))
|
|
(task-closed? (the-as game-task task) (task-status need-reward-speech))))
|
|
|
|
(defun dm-task-resolution ((id int) (msg debug-menu-msg))
|
|
"Give the player the fuel cell for the task id / 8 and close its need-resolution stage, or return
|
|
'invalid when it has none."
|
|
(let ((task (/ id 8)))
|
|
(if (not (task-exists? (the-as game-task task) (task-status need-resolution))) (return 'invalid))
|
|
(when (= msg (debug-menu-msg press))
|
|
(send-event *target* 'get-pickup (pickup-type fuel-cell) (the float task))
|
|
(close-specific-task! (the-as game-task task) (task-status need-resolution)))
|
|
(task-closed? (the-as game-task task) (task-status need-resolution))))
|
|
|
|
;; One page per task stage, each listing every task that has that stage. The task numbers in these
|
|
;; templates have to be written out: a static list holds boxed numbers, not compile-time constants,
|
|
;; so the game-task names survive only as the item labels.
|
|
(defun debug-menu-make-task-unknown-menu ((menu debug-menu) (context debug-menu-context))
|
|
"Append the unknown page to menu, with one entry per task whose unknown stage can be closed."
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "unknown"
|
|
#f
|
|
#f
|
|
(flag "jungle-eggtop" 2 dm-task-unknown)
|
|
(flag "jungle-lurkerm" 3 dm-task-unknown)
|
|
(flag "jungle-tower" 4 dm-task-unknown)
|
|
(flag "jungle-fishgame" 5 dm-task-unknown)
|
|
(flag "jungle-plant" 6 dm-task-unknown)
|
|
(flag "jungle-buzzer" 7 dm-task-unknown)
|
|
(flag "jungle-canyon-end" 8 dm-task-unknown)
|
|
(flag "jungle-temple-door" 9 dm-task-unknown)
|
|
(flag "village1-yakow" 10 dm-task-unknown)
|
|
(flag "village1-mayor-money" 11 dm-task-unknown)
|
|
(flag "village1-uncle-money" 12 dm-task-unknown)
|
|
(flag "village1-oracle-money1" 13 dm-task-unknown)
|
|
(flag "village1-oracle-money2" 14 dm-task-unknown)
|
|
(flag "beach-ecorocks" 15 dm-task-unknown)
|
|
(flag "beach-pelican" 16 dm-task-unknown)
|
|
(flag "beach-flutflut" 17 dm-task-unknown)
|
|
(flag "beach-seagull" 18 dm-task-unknown)
|
|
(flag "beach-cannon" 19 dm-task-unknown)
|
|
(flag "beach-buzzer" 20 dm-task-unknown)
|
|
(flag "beach-gimmie" 21 dm-task-unknown)
|
|
(flag "beach-sentinel" 22 dm-task-unknown)
|
|
(flag "misty-muse" 23 dm-task-unknown)
|
|
(flag "misty-boat" 24 dm-task-unknown)
|
|
(flag "misty-warehouse" 25 dm-task-unknown)
|
|
(flag "misty-cannon" 26 dm-task-unknown)
|
|
(flag "misty-bike" 27 dm-task-unknown)
|
|
(flag "misty-buzzer" 28 dm-task-unknown)
|
|
(flag "misty-bike-jump" 29 dm-task-unknown)
|
|
(flag "misty-eco-challenge" 30 dm-task-unknown)
|
|
(flag "village2-gambler-money" 31 dm-task-unknown)
|
|
(flag "village2-geologist-money" 32 dm-task-unknown)
|
|
(flag "village2-warrior-money" 33 dm-task-unknown)
|
|
(flag "village2-oracle-money1" 34 dm-task-unknown)
|
|
(flag "village2-oracle-money2" 35 dm-task-unknown)
|
|
(flag "swamp-billy" 36 dm-task-unknown)
|
|
(flag "swamp-flutflut" 37 dm-task-unknown)
|
|
(flag "swamp-battle" 38 dm-task-unknown)
|
|
(flag "swamp-tether-1" 39 dm-task-unknown)
|
|
(flag "swamp-tether-2" 40 dm-task-unknown)
|
|
(flag "swamp-tether-3" 41 dm-task-unknown)
|
|
(flag "swamp-tether-4" 42 dm-task-unknown)
|
|
(flag "swamp-buzzer" 43 dm-task-unknown)
|
|
(flag "sunken-platforms" 44 dm-task-unknown)
|
|
(flag "sunken-pipe" 45 dm-task-unknown)
|
|
(flag "sunken-slide" 46 dm-task-unknown)
|
|
(flag "sunken-room" 47 dm-task-unknown)
|
|
(flag "sunken-sharks" 48 dm-task-unknown)
|
|
(flag "sunken-buzzer" 49 dm-task-unknown)
|
|
(flag "sunken-top-of-helix" 50 dm-task-unknown)
|
|
(flag "sunken-spinning-room" 51 dm-task-unknown)
|
|
(flag "rolling-race" 52 dm-task-unknown)
|
|
(flag "rolling-robbers" 53 dm-task-unknown)
|
|
(flag "rolling-moles" 54 dm-task-unknown)
|
|
(flag "rolling-plants" 55 dm-task-unknown)
|
|
(flag "rolling-lake" 56 dm-task-unknown)
|
|
(flag "rolling-buzzer" 57 dm-task-unknown)
|
|
(flag "rolling-ring-chase-1" 58 dm-task-unknown)
|
|
(flag "rolling-ring-chase-2" 59 dm-task-unknown)
|
|
(flag "snow-eggtop" 60 dm-task-unknown)
|
|
(flag "snow-ram" 61 dm-task-unknown)
|
|
(flag "snow-fort" 62 dm-task-unknown)
|
|
(flag "snow-ball" 63 dm-task-unknown)
|
|
(flag "snow-bunnies" 64 dm-task-unknown)
|
|
(flag "snow-buzzer" 65 dm-task-unknown)
|
|
(flag "snow-bumpers" 66 dm-task-unknown)
|
|
(flag "snow-cage" 67 dm-task-unknown)
|
|
(flag "firecanyon-buzzer" 68 dm-task-unknown)
|
|
(flag "firecanyon-end" 69 dm-task-unknown)
|
|
(flag "citadel-sage-green" 70 dm-task-unknown)
|
|
(flag "citadel-sage-blue" 71 dm-task-unknown)
|
|
(flag "citadel-sage-red" 72 dm-task-unknown)
|
|
(flag "citadel-sage-yellow" 73 dm-task-unknown)
|
|
(flag "village3-extra1" 74 dm-task-unknown)
|
|
(flag "village1-buzzer" 75 dm-task-unknown)
|
|
(flag "village2-buzzer" 76 dm-task-unknown)
|
|
(flag "village3-buzzer" 77 dm-task-unknown)
|
|
(flag "cave-gnawers" 78 dm-task-unknown)
|
|
(flag "cave-dark-crystals" 79 dm-task-unknown)
|
|
(flag "cave-dark-climb" 80 dm-task-unknown)
|
|
(flag "cave-robot-climb" 81 dm-task-unknown)
|
|
(flag "cave-swing-poles" 82 dm-task-unknown)
|
|
(flag "cave-spider-tunnel" 83 dm-task-unknown)
|
|
(flag "cave-platforms" 84 dm-task-unknown)
|
|
(flag "cave-buzzer" 85 dm-task-unknown)
|
|
(flag "ogre-boss" 86 dm-task-unknown)
|
|
(flag "ogre-end" 87 dm-task-unknown)
|
|
(flag "ogre-buzzer" 88 dm-task-unknown)
|
|
(flag "lavatube-end" 89 dm-task-unknown)
|
|
(flag "lavatube-buzzer" 90 dm-task-unknown)
|
|
(flag "citadel-buzzer" 91 dm-task-unknown)
|
|
(flag "training-gimmie" 92 dm-task-unknown)
|
|
(flag "training-door" 93 dm-task-unknown)
|
|
(flag "training-climb" 94 dm-task-unknown)
|
|
(flag "training-buzzer" 95 dm-task-unknown)
|
|
(flag "village3-miner-money1" 96 dm-task-unknown)
|
|
(flag "village3-miner-money2" 97 dm-task-unknown)
|
|
(flag "village3-miner-money3" 98 dm-task-unknown)
|
|
(flag "village3-miner-money4" 99 dm-task-unknown)
|
|
(flag "village3-oracle-money1" 100 dm-task-unknown)
|
|
(flag "village3-oracle-money2" 101 dm-task-unknown)
|
|
(flag "firecanyon-assistant" 102 dm-task-unknown)
|
|
(flag "village2-levitator" 103 dm-task-unknown)
|
|
(flag "swamp-arm" 104 dm-task-unknown)
|
|
(flag "village3-button" 105 dm-task-unknown)
|
|
(flag "red-eggtop" 106 dm-task-unknown)
|
|
(flag "lavatube-balls" 107 dm-task-unknown)
|
|
(flag "lavatube-start" 108 dm-task-unknown)
|
|
(flag "intro" 109 dm-task-unknown)
|
|
(flag "ogre-secret" 110 dm-task-unknown)
|
|
(flag "village4-button" 111 dm-task-unknown)
|
|
(flag "finalboss-movies" 112 dm-task-unknown)
|
|
(flag "plunger-lurker-hit" 113 dm-task-unknown)
|
|
(flag "leaving-misty" 114 dm-task-unknown)
|
|
(flag "assistant-village3" 115 dm-task-unknown)
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f)))
|
|
(none))
|
|
|
|
(defun debug-menu-make-task-need-hint-menu ((menu debug-menu) (context debug-menu-context))
|
|
"Append the need-hint page to menu."
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "need-hint"
|
|
#f
|
|
#f
|
|
(flag "jungle-eggtop" 2 dm-task-hint)
|
|
(flag "jungle-lurkerm" 3 dm-task-hint)
|
|
(flag "jungle-tower" 4 dm-task-hint)
|
|
(flag "jungle-fishgame" 5 dm-task-hint)
|
|
(flag "jungle-plant" 6 dm-task-hint)
|
|
(flag "jungle-buzzer" 7 dm-task-hint)
|
|
(flag "jungle-canyon-end" 8 dm-task-hint)
|
|
(flag "jungle-temple-door" 9 dm-task-hint)
|
|
(flag "village1-yakow" 10 dm-task-hint)
|
|
(flag "village1-mayor-money" 11 dm-task-hint)
|
|
(flag "village1-uncle-money" 12 dm-task-hint)
|
|
(flag "village1-oracle-money1" 13 dm-task-hint)
|
|
(flag "village1-oracle-money2" 14 dm-task-hint)
|
|
(flag "beach-ecorocks" 15 dm-task-hint)
|
|
(flag "beach-pelican" 16 dm-task-hint)
|
|
(flag "beach-flutflut" 17 dm-task-hint)
|
|
(flag "beach-seagull" 18 dm-task-hint)
|
|
(flag "beach-cannon" 19 dm-task-hint)
|
|
(flag "beach-buzzer" 20 dm-task-hint)
|
|
(flag "beach-gimmie" 21 dm-task-hint)
|
|
(flag "beach-sentinel" 22 dm-task-hint)
|
|
(flag "misty-muse" 23 dm-task-hint)
|
|
(flag "misty-boat" 24 dm-task-hint)
|
|
(flag "misty-warehouse" 25 dm-task-hint)
|
|
(flag "misty-cannon" 26 dm-task-hint)
|
|
(flag "misty-bike" 27 dm-task-hint)
|
|
(flag "misty-buzzer" 28 dm-task-hint)
|
|
(flag "misty-bike-jump" 29 dm-task-hint)
|
|
(flag "misty-eco-challenge" 30 dm-task-hint)
|
|
(flag "village2-gambler-money" 31 dm-task-hint)
|
|
(flag "village2-geologist-money" 32 dm-task-hint)
|
|
(flag "village2-warrior-money" 33 dm-task-hint)
|
|
(flag "village2-oracle-money1" 34 dm-task-hint)
|
|
(flag "village2-oracle-money2" 35 dm-task-hint)
|
|
(flag "swamp-billy" 36 dm-task-hint)
|
|
(flag "swamp-flutflut" 37 dm-task-hint)
|
|
(flag "swamp-battle" 38 dm-task-hint)
|
|
(flag "swamp-tether-1" 39 dm-task-hint)
|
|
(flag "swamp-tether-2" 40 dm-task-hint)
|
|
(flag "swamp-tether-3" 41 dm-task-hint)
|
|
(flag "swamp-tether-4" 42 dm-task-hint)
|
|
(flag "swamp-buzzer" 43 dm-task-hint)
|
|
(flag "sunken-platforms" 44 dm-task-hint)
|
|
(flag "sunken-pipe" 45 dm-task-hint)
|
|
(flag "sunken-slide" 46 dm-task-hint)
|
|
(flag "sunken-room" 47 dm-task-hint)
|
|
(flag "sunken-sharks" 48 dm-task-hint)
|
|
(flag "sunken-buzzer" 49 dm-task-hint)
|
|
(flag "sunken-top-of-helix" 50 dm-task-hint)
|
|
(flag "sunken-spinning-room" 51 dm-task-hint)
|
|
(flag "rolling-race" 52 dm-task-hint)
|
|
(flag "rolling-robbers" 53 dm-task-hint)
|
|
(flag "rolling-moles" 54 dm-task-hint)
|
|
(flag "rolling-plants" 55 dm-task-hint)
|
|
(flag "rolling-lake" 56 dm-task-hint)
|
|
(flag "rolling-buzzer" 57 dm-task-hint)
|
|
(flag "rolling-ring-chase-1" 58 dm-task-hint)
|
|
(flag "rolling-ring-chase-2" 59 dm-task-hint)
|
|
(flag "snow-eggtop" 60 dm-task-hint)
|
|
(flag "snow-ram" 61 dm-task-hint)
|
|
(flag "snow-fort" 62 dm-task-hint)
|
|
(flag "snow-ball" 63 dm-task-hint)
|
|
(flag "snow-bunnies" 64 dm-task-hint)
|
|
(flag "snow-buzzer" 65 dm-task-hint)
|
|
(flag "snow-bumpers" 66 dm-task-hint)
|
|
(flag "snow-cage" 67 dm-task-hint)
|
|
(flag "firecanyon-buzzer" 68 dm-task-hint)
|
|
(flag "firecanyon-end" 69 dm-task-hint)
|
|
(flag "citadel-sage-green" 70 dm-task-hint)
|
|
(flag "citadel-sage-blue" 71 dm-task-hint)
|
|
(flag "citadel-sage-red" 72 dm-task-hint)
|
|
(flag "citadel-sage-yellow" 73 dm-task-hint)
|
|
(flag "village3-extra1" 74 dm-task-hint)
|
|
(flag "village1-buzzer" 75 dm-task-hint)
|
|
(flag "village2-buzzer" 76 dm-task-hint)
|
|
(flag "village3-buzzer" 77 dm-task-hint)
|
|
(flag "cave-gnawers" 78 dm-task-hint)
|
|
(flag "cave-dark-crystals" 79 dm-task-hint)
|
|
(flag "cave-dark-climb" 80 dm-task-hint)
|
|
(flag "cave-robot-climb" 81 dm-task-hint)
|
|
(flag "cave-swing-poles" 82 dm-task-hint)
|
|
(flag "cave-spider-tunnel" 83 dm-task-hint)
|
|
(flag "cave-platforms" 84 dm-task-hint)
|
|
(flag "cave-buzzer" 85 dm-task-hint)
|
|
(flag "ogre-boss" 86 dm-task-hint)
|
|
(flag "ogre-end" 87 dm-task-hint)
|
|
(flag "ogre-buzzer" 88 dm-task-hint)
|
|
(flag "lavatube-end" 89 dm-task-hint)
|
|
(flag "lavatube-buzzer" 90 dm-task-hint)
|
|
(flag "citadel-buzzer" 91 dm-task-hint)
|
|
(flag "training-gimmie" 92 dm-task-hint)
|
|
(flag "training-door" 93 dm-task-hint)
|
|
(flag "training-climb" 94 dm-task-hint)
|
|
(flag "training-buzzer" 95 dm-task-hint)
|
|
(flag "village3-miner-money1" 96 dm-task-hint)
|
|
(flag "village3-miner-money2" 97 dm-task-hint)
|
|
(flag "village3-miner-money3" 98 dm-task-hint)
|
|
(flag "village3-miner-money4" 99 dm-task-hint)
|
|
(flag "village3-oracle-money1" 100 dm-task-hint)
|
|
(flag "village3-oracle-money2" 101 dm-task-hint)
|
|
(flag "firecanyon-assistant" 102 dm-task-hint)
|
|
(flag "village2-levitator" 103 dm-task-hint)
|
|
(flag "swamp-arm" 104 dm-task-hint)
|
|
(flag "village3-button" 105 dm-task-hint)
|
|
(flag "red-eggtop" 106 dm-task-hint)
|
|
(flag "lavatube-balls" 107 dm-task-hint)
|
|
(flag "lavatube-start" 108 dm-task-hint)
|
|
(flag "intro" 109 dm-task-hint)
|
|
(flag "ogre-secret" 110 dm-task-hint)
|
|
(flag "village4-button" 111 dm-task-hint)
|
|
(flag "finalboss-movies" 112 dm-task-hint)
|
|
(flag "plunger-lurker-hit" 113 dm-task-hint)
|
|
(flag "leaving-misty" 114 dm-task-hint)
|
|
(flag "assistant-village3" 115 dm-task-hint)
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f)))
|
|
(none))
|
|
|
|
(defun debug-menu-make-task-need-introduction-menu ((menu debug-menu) (context debug-menu-context))
|
|
"Append the need-introduction page to menu."
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "need-introduction"
|
|
#f
|
|
#f
|
|
(flag "jungle-eggtop" 2 dm-task-introduction)
|
|
(flag "jungle-lurkerm" 3 dm-task-introduction)
|
|
(flag "jungle-tower" 4 dm-task-introduction)
|
|
(flag "jungle-fishgame" 5 dm-task-introduction)
|
|
(flag "jungle-plant" 6 dm-task-introduction)
|
|
(flag "jungle-buzzer" 7 dm-task-introduction)
|
|
(flag "jungle-canyon-end" 8 dm-task-introduction)
|
|
(flag "jungle-temple-door" 9 dm-task-introduction)
|
|
(flag "village1-yakow" 10 dm-task-introduction)
|
|
(flag "village1-mayor-money" 11 dm-task-introduction)
|
|
(flag "village1-uncle-money" 12 dm-task-introduction)
|
|
(flag "village1-oracle-money1" 13 dm-task-introduction)
|
|
(flag "village1-oracle-money2" 14 dm-task-introduction)
|
|
(flag "beach-ecorocks" 15 dm-task-introduction)
|
|
(flag "beach-pelican" 16 dm-task-introduction)
|
|
(flag "beach-flutflut" 17 dm-task-introduction)
|
|
(flag "beach-seagull" 18 dm-task-introduction)
|
|
(flag "beach-cannon" 19 dm-task-introduction)
|
|
(flag "beach-buzzer" 20 dm-task-introduction)
|
|
(flag "beach-gimmie" 21 dm-task-introduction)
|
|
(flag "beach-sentinel" 22 dm-task-introduction)
|
|
(flag "misty-muse" 23 dm-task-introduction)
|
|
(flag "misty-boat" 24 dm-task-introduction)
|
|
(flag "misty-warehouse" 25 dm-task-introduction)
|
|
(flag "misty-cannon" 26 dm-task-introduction)
|
|
(flag "misty-bike" 27 dm-task-introduction)
|
|
(flag "misty-buzzer" 28 dm-task-introduction)
|
|
(flag "misty-bike-jump" 29 dm-task-introduction)
|
|
(flag "misty-eco-challenge" 30 dm-task-introduction)
|
|
(flag "village2-gambler-money" 31 dm-task-introduction)
|
|
(flag "village2-geologist-money" 32 dm-task-introduction)
|
|
(flag "village2-warrior-money" 33 dm-task-introduction)
|
|
(flag "village2-oracle-money1" 34 dm-task-introduction)
|
|
(flag "village2-oracle-money2" 35 dm-task-introduction)
|
|
(flag "swamp-billy" 36 dm-task-introduction)
|
|
(flag "swamp-flutflut" 37 dm-task-introduction)
|
|
(flag "swamp-battle" 38 dm-task-introduction)
|
|
(flag "swamp-tether-1" 39 dm-task-introduction)
|
|
(flag "swamp-tether-2" 40 dm-task-introduction)
|
|
(flag "swamp-tether-3" 41 dm-task-introduction)
|
|
(flag "swamp-tether-4" 42 dm-task-introduction)
|
|
(flag "swamp-buzzer" 43 dm-task-introduction)
|
|
(flag "sunken-platforms" 44 dm-task-introduction)
|
|
(flag "sunken-pipe" 45 dm-task-introduction)
|
|
(flag "sunken-slide" 46 dm-task-introduction)
|
|
(flag "sunken-room" 47 dm-task-introduction)
|
|
(flag "sunken-sharks" 48 dm-task-introduction)
|
|
(flag "sunken-buzzer" 49 dm-task-introduction)
|
|
(flag "sunken-top-of-helix" 50 dm-task-introduction)
|
|
(flag "sunken-spinning-room" 51 dm-task-introduction)
|
|
(flag "rolling-race" 52 dm-task-introduction)
|
|
(flag "rolling-robbers" 53 dm-task-introduction)
|
|
(flag "rolling-moles" 54 dm-task-introduction)
|
|
(flag "rolling-plants" 55 dm-task-introduction)
|
|
(flag "rolling-lake" 56 dm-task-introduction)
|
|
(flag "rolling-buzzer" 57 dm-task-introduction)
|
|
(flag "rolling-ring-chase-1" 58 dm-task-introduction)
|
|
(flag "rolling-ring-chase-2" 59 dm-task-introduction)
|
|
(flag "snow-eggtop" 60 dm-task-introduction)
|
|
(flag "snow-ram" 61 dm-task-introduction)
|
|
(flag "snow-fort" 62 dm-task-introduction)
|
|
(flag "snow-ball" 63 dm-task-introduction)
|
|
(flag "snow-bunnies" 64 dm-task-introduction)
|
|
(flag "snow-buzzer" 65 dm-task-introduction)
|
|
(flag "snow-bumpers" 66 dm-task-introduction)
|
|
(flag "snow-cage" 67 dm-task-introduction)
|
|
(flag "firecanyon-buzzer" 68 dm-task-introduction)
|
|
(flag "firecanyon-end" 69 dm-task-introduction)
|
|
(flag "citadel-sage-green" 70 dm-task-introduction)
|
|
(flag "citadel-sage-blue" 71 dm-task-introduction)
|
|
(flag "citadel-sage-red" 72 dm-task-introduction)
|
|
(flag "citadel-sage-yellow" 73 dm-task-introduction)
|
|
(flag "village3-extra1" 74 dm-task-introduction)
|
|
(flag "village1-buzzer" 75 dm-task-introduction)
|
|
(flag "village2-buzzer" 76 dm-task-introduction)
|
|
(flag "village3-buzzer" 77 dm-task-introduction)
|
|
(flag "cave-gnawers" 78 dm-task-introduction)
|
|
(flag "cave-dark-crystals" 79 dm-task-introduction)
|
|
(flag "cave-dark-climb" 80 dm-task-introduction)
|
|
(flag "cave-robot-climb" 81 dm-task-introduction)
|
|
(flag "cave-swing-poles" 82 dm-task-introduction)
|
|
(flag "cave-spider-tunnel" 83 dm-task-introduction)
|
|
(flag "cave-platforms" 84 dm-task-introduction)
|
|
(flag "cave-buzzer" 85 dm-task-introduction)
|
|
(flag "ogre-boss" 86 dm-task-introduction)
|
|
(flag "ogre-end" 87 dm-task-introduction)
|
|
(flag "ogre-buzzer" 88 dm-task-introduction)
|
|
(flag "lavatube-end" 89 dm-task-introduction)
|
|
(flag "lavatube-buzzer" 90 dm-task-introduction)
|
|
(flag "citadel-buzzer" 91 dm-task-introduction)
|
|
(flag "training-gimmie" 92 dm-task-introduction)
|
|
(flag "training-door" 93 dm-task-introduction)
|
|
(flag "training-climb" 94 dm-task-introduction)
|
|
(flag "training-buzzer" 95 dm-task-introduction)
|
|
(flag "village3-miner-money1" 96 dm-task-introduction)
|
|
(flag "village3-miner-money2" 97 dm-task-introduction)
|
|
(flag "village3-miner-money3" 98 dm-task-introduction)
|
|
(flag "village3-miner-money4" 99 dm-task-introduction)
|
|
(flag "village3-oracle-money1" 100 dm-task-introduction)
|
|
(flag "village3-oracle-money2" 101 dm-task-introduction)
|
|
(flag "firecanyon-assistant" 102 dm-task-introduction)
|
|
(flag "village2-levitator" 103 dm-task-introduction)
|
|
(flag "swamp-arm" 104 dm-task-introduction)
|
|
(flag "village3-button" 105 dm-task-introduction)
|
|
(flag "red-eggtop" 106 dm-task-introduction)
|
|
(flag "lavatube-balls" 107 dm-task-introduction)
|
|
(flag "lavatube-start" 108 dm-task-introduction)
|
|
(flag "intro" 109 dm-task-introduction)
|
|
(flag "ogre-secret" 110 dm-task-introduction)
|
|
(flag "village4-button" 111 dm-task-introduction)
|
|
(flag "finalboss-movies" 112 dm-task-introduction)
|
|
(flag "plunger-lurker-hit" 113 dm-task-introduction)
|
|
(flag "leaving-misty" 114 dm-task-introduction)
|
|
(flag "assistant-village3" 115 dm-task-introduction)
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f)))
|
|
(none))
|
|
|
|
(defun debug-menu-make-task-need-reminder-a-menu ((menu debug-menu) (context debug-menu-context))
|
|
"Append the need-reminder-a page to menu."
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "need-reminder-a"
|
|
#f
|
|
#f
|
|
(flag "jungle-eggtop" 2 dm-task-reminder-a)
|
|
(flag "jungle-lurkerm" 3 dm-task-reminder-a)
|
|
(flag "jungle-tower" 4 dm-task-reminder-a)
|
|
(flag "jungle-fishgame" 5 dm-task-reminder-a)
|
|
(flag "jungle-plant" 6 dm-task-reminder-a)
|
|
(flag "jungle-buzzer" 7 dm-task-reminder-a)
|
|
(flag "jungle-canyon-end" 8 dm-task-reminder-a)
|
|
(flag "jungle-temple-door" 9 dm-task-reminder-a)
|
|
(flag "village1-yakow" 10 dm-task-reminder-a)
|
|
(flag "village1-mayor-money" 11 dm-task-reminder-a)
|
|
(flag "village1-uncle-money" 12 dm-task-reminder-a)
|
|
(flag "village1-oracle-money1" 13 dm-task-reminder-a)
|
|
(flag "village1-oracle-money2" 14 dm-task-reminder-a)
|
|
(flag "beach-ecorocks" 15 dm-task-reminder-a)
|
|
(flag "beach-pelican" 16 dm-task-reminder-a)
|
|
(flag "beach-flutflut" 17 dm-task-reminder-a)
|
|
(flag "beach-seagull" 18 dm-task-reminder-a)
|
|
(flag "beach-cannon" 19 dm-task-reminder-a)
|
|
(flag "beach-buzzer" 20 dm-task-reminder-a)
|
|
(flag "beach-gimmie" 21 dm-task-reminder-a)
|
|
(flag "beach-sentinel" 22 dm-task-reminder-a)
|
|
(flag "misty-muse" 23 dm-task-reminder-a)
|
|
(flag "misty-boat" 24 dm-task-reminder-a)
|
|
(flag "misty-warehouse" 25 dm-task-reminder-a)
|
|
(flag "misty-cannon" 26 dm-task-reminder-a)
|
|
(flag "misty-bike" 27 dm-task-reminder-a)
|
|
(flag "misty-buzzer" 28 dm-task-reminder-a)
|
|
(flag "misty-bike-jump" 29 dm-task-reminder-a)
|
|
(flag "misty-eco-challenge" 30 dm-task-reminder-a)
|
|
(flag "village2-gambler-money" 31 dm-task-reminder-a)
|
|
(flag "village2-geologist-money" 32 dm-task-reminder-a)
|
|
(flag "village2-warrior-money" 33 dm-task-reminder-a)
|
|
(flag "village2-oracle-money1" 34 dm-task-reminder-a)
|
|
(flag "village2-oracle-money2" 35 dm-task-reminder-a)
|
|
(flag "swamp-billy" 36 dm-task-reminder-a)
|
|
(flag "swamp-flutflut" 37 dm-task-reminder-a)
|
|
(flag "swamp-battle" 38 dm-task-reminder-a)
|
|
(flag "swamp-tether-1" 39 dm-task-reminder-a)
|
|
(flag "swamp-tether-2" 40 dm-task-reminder-a)
|
|
(flag "swamp-tether-3" 41 dm-task-reminder-a)
|
|
(flag "swamp-tether-4" 42 dm-task-reminder-a)
|
|
(flag "swamp-buzzer" 43 dm-task-reminder-a)
|
|
(flag "sunken-platforms" 44 dm-task-reminder-a)
|
|
(flag "sunken-pipe" 45 dm-task-reminder-a)
|
|
(flag "sunken-slide" 46 dm-task-reminder-a)
|
|
(flag "sunken-room" 47 dm-task-reminder-a)
|
|
(flag "sunken-sharks" 48 dm-task-reminder-a)
|
|
(flag "sunken-buzzer" 49 dm-task-reminder-a)
|
|
(flag "sunken-top-of-helix" 50 dm-task-reminder-a)
|
|
(flag "sunken-spinning-room" 51 dm-task-reminder-a)
|
|
(flag "rolling-race" 52 dm-task-reminder-a)
|
|
(flag "rolling-robbers" 53 dm-task-reminder-a)
|
|
(flag "rolling-moles" 54 dm-task-reminder-a)
|
|
(flag "rolling-plants" 55 dm-task-reminder-a)
|
|
(flag "rolling-lake" 56 dm-task-reminder-a)
|
|
(flag "rolling-buzzer" 57 dm-task-reminder-a)
|
|
(flag "rolling-ring-chase-1" 58 dm-task-reminder-a)
|
|
(flag "rolling-ring-chase-2" 59 dm-task-reminder-a)
|
|
(flag "snow-eggtop" 60 dm-task-reminder-a)
|
|
(flag "snow-ram" 61 dm-task-reminder-a)
|
|
(flag "snow-fort" 62 dm-task-reminder-a)
|
|
(flag "snow-ball" 63 dm-task-reminder-a)
|
|
(flag "snow-bunnies" 64 dm-task-reminder-a)
|
|
(flag "snow-buzzer" 65 dm-task-reminder-a)
|
|
(flag "snow-bumpers" 66 dm-task-reminder-a)
|
|
(flag "snow-cage" 67 dm-task-reminder-a)
|
|
(flag "firecanyon-buzzer" 68 dm-task-reminder-a)
|
|
(flag "firecanyon-end" 69 dm-task-reminder-a)
|
|
(flag "citadel-sage-green" 70 dm-task-reminder-a)
|
|
(flag "citadel-sage-blue" 71 dm-task-reminder-a)
|
|
(flag "citadel-sage-red" 72 dm-task-reminder-a)
|
|
(flag "citadel-sage-yellow" 73 dm-task-reminder-a)
|
|
(flag "village3-extra1" 74 dm-task-reminder-a)
|
|
(flag "village1-buzzer" 75 dm-task-reminder-a)
|
|
(flag "village2-buzzer" 76 dm-task-reminder-a)
|
|
(flag "village3-buzzer" 77 dm-task-reminder-a)
|
|
(flag "cave-gnawers" 78 dm-task-reminder-a)
|
|
(flag "cave-dark-crystals" 79 dm-task-reminder-a)
|
|
(flag "cave-dark-climb" 80 dm-task-reminder-a)
|
|
(flag "cave-robot-climb" 81 dm-task-reminder-a)
|
|
(flag "cave-swing-poles" 82 dm-task-reminder-a)
|
|
(flag "cave-spider-tunnel" 83 dm-task-reminder-a)
|
|
(flag "cave-platforms" 84 dm-task-reminder-a)
|
|
(flag "cave-buzzer" 85 dm-task-reminder-a)
|
|
(flag "ogre-boss" 86 dm-task-reminder-a)
|
|
(flag "ogre-end" 87 dm-task-reminder-a)
|
|
(flag "ogre-buzzer" 88 dm-task-reminder-a)
|
|
(flag "lavatube-end" 89 dm-task-reminder-a)
|
|
(flag "lavatube-buzzer" 90 dm-task-reminder-a)
|
|
(flag "citadel-buzzer" 91 dm-task-reminder-a)
|
|
(flag "training-gimmie" 92 dm-task-reminder-a)
|
|
(flag "training-door" 93 dm-task-reminder-a)
|
|
(flag "training-climb" 94 dm-task-reminder-a)
|
|
(flag "training-buzzer" 95 dm-task-reminder-a)
|
|
(flag "village3-miner-money1" 96 dm-task-reminder-a)
|
|
(flag "village3-miner-money2" 97 dm-task-reminder-a)
|
|
(flag "village3-miner-money3" 98 dm-task-reminder-a)
|
|
(flag "village3-miner-money4" 99 dm-task-reminder-a)
|
|
(flag "village3-oracle-money1" 100 dm-task-reminder-a)
|
|
(flag "village3-oracle-money2" 101 dm-task-reminder-a)
|
|
(flag "firecanyon-assistant" 102 dm-task-reminder-a)
|
|
(flag "village2-levitator" 103 dm-task-reminder-a)
|
|
(flag "swamp-arm" 104 dm-task-reminder-a)
|
|
(flag "village3-button" 105 dm-task-reminder-a)
|
|
(flag "red-eggtop" 106 dm-task-reminder-a)
|
|
(flag "lavatube-balls" 107 dm-task-reminder-a)
|
|
(flag "lavatube-start" 108 dm-task-reminder-a)
|
|
(flag "intro" 109 dm-task-reminder-a)
|
|
(flag "ogre-secret" 110 dm-task-reminder-a)
|
|
(flag "village4-button" 111 dm-task-reminder-a)
|
|
(flag "finalboss-movies" 112 dm-task-reminder-a)
|
|
(flag "plunger-lurker-hit" 113 dm-task-reminder-a)
|
|
(flag "leaving-misty" 114 dm-task-reminder-a)
|
|
(flag "assistant-village3" 115 dm-task-reminder-a)
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f)))
|
|
(none))
|
|
|
|
(defun debug-menu-make-task-need-reminder-menu ((menu debug-menu) (context debug-menu-context))
|
|
"Append the need-reminder page to menu."
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "need-reminder"
|
|
#f
|
|
#f
|
|
(flag "jungle-eggtop" 2 dm-task-reminder)
|
|
(flag "jungle-lurkerm" 3 dm-task-reminder)
|
|
(flag "jungle-tower" 4 dm-task-reminder)
|
|
(flag "jungle-fishgame" 5 dm-task-reminder)
|
|
(flag "jungle-plant" 6 dm-task-reminder)
|
|
(flag "jungle-buzzer" 7 dm-task-reminder)
|
|
(flag "jungle-canyon-end" 8 dm-task-reminder)
|
|
(flag "jungle-temple-door" 9 dm-task-reminder)
|
|
(flag "village1-yakow" 10 dm-task-reminder)
|
|
(flag "village1-mayor-money" 11 dm-task-reminder)
|
|
(flag "village1-uncle-money" 12 dm-task-reminder)
|
|
(flag "village1-oracle-money1" 13 dm-task-reminder)
|
|
(flag "village1-oracle-money2" 14 dm-task-reminder)
|
|
(flag "beach-ecorocks" 15 dm-task-reminder)
|
|
(flag "beach-pelican" 16 dm-task-reminder)
|
|
(flag "beach-flutflut" 17 dm-task-reminder)
|
|
(flag "beach-seagull" 18 dm-task-reminder)
|
|
(flag "beach-cannon" 19 dm-task-reminder)
|
|
(flag "beach-buzzer" 20 dm-task-reminder)
|
|
(flag "beach-gimmie" 21 dm-task-reminder)
|
|
(flag "beach-sentinel" 22 dm-task-reminder)
|
|
(flag "misty-muse" 23 dm-task-reminder)
|
|
(flag "misty-boat" 24 dm-task-reminder)
|
|
(flag "misty-warehouse" 25 dm-task-reminder)
|
|
(flag "misty-cannon" 26 dm-task-reminder)
|
|
(flag "misty-bike" 27 dm-task-reminder)
|
|
(flag "misty-buzzer" 28 dm-task-reminder)
|
|
(flag "misty-bike-jump" 29 dm-task-reminder)
|
|
(flag "misty-eco-challenge" 30 dm-task-reminder)
|
|
(flag "village2-gambler-money" 31 dm-task-reminder)
|
|
(flag "village2-geologist-money" 32 dm-task-reminder)
|
|
(flag "village2-warrior-money" 33 dm-task-reminder)
|
|
(flag "village2-oracle-money1" 34 dm-task-reminder)
|
|
(flag "village2-oracle-money2" 35 dm-task-reminder)
|
|
(flag "swamp-billy" 36 dm-task-reminder)
|
|
(flag "swamp-flutflut" 37 dm-task-reminder)
|
|
(flag "swamp-battle" 38 dm-task-reminder)
|
|
(flag "swamp-tether-1" 39 dm-task-reminder)
|
|
(flag "swamp-tether-2" 40 dm-task-reminder)
|
|
(flag "swamp-tether-3" 41 dm-task-reminder)
|
|
(flag "swamp-tether-4" 42 dm-task-reminder)
|
|
(flag "swamp-buzzer" 43 dm-task-reminder)
|
|
(flag "sunken-platforms" 44 dm-task-reminder)
|
|
(flag "sunken-pipe" 45 dm-task-reminder)
|
|
(flag "sunken-slide" 46 dm-task-reminder)
|
|
(flag "sunken-room" 47 dm-task-reminder)
|
|
(flag "sunken-sharks" 48 dm-task-reminder)
|
|
(flag "sunken-buzzer" 49 dm-task-reminder)
|
|
(flag "sunken-top-of-helix" 50 dm-task-reminder)
|
|
(flag "sunken-spinning-room" 51 dm-task-reminder)
|
|
(flag "rolling-race" 52 dm-task-reminder)
|
|
(flag "rolling-robbers" 53 dm-task-reminder)
|
|
(flag "rolling-moles" 54 dm-task-reminder)
|
|
(flag "rolling-plants" 55 dm-task-reminder)
|
|
(flag "rolling-lake" 56 dm-task-reminder)
|
|
(flag "rolling-buzzer" 57 dm-task-reminder)
|
|
(flag "rolling-ring-chase-1" 58 dm-task-reminder)
|
|
(flag "rolling-ring-chase-2" 59 dm-task-reminder)
|
|
(flag "snow-eggtop" 60 dm-task-reminder)
|
|
(flag "snow-ram" 61 dm-task-reminder)
|
|
(flag "snow-fort" 62 dm-task-reminder)
|
|
(flag "snow-ball" 63 dm-task-reminder)
|
|
(flag "snow-bunnies" 64 dm-task-reminder)
|
|
(flag "snow-buzzer" 65 dm-task-reminder)
|
|
(flag "snow-bumpers" 66 dm-task-reminder)
|
|
(flag "snow-cage" 67 dm-task-reminder)
|
|
(flag "firecanyon-buzzer" 68 dm-task-reminder)
|
|
(flag "firecanyon-end" 69 dm-task-reminder)
|
|
(flag "citadel-sage-green" 70 dm-task-reminder)
|
|
(flag "citadel-sage-blue" 71 dm-task-reminder)
|
|
(flag "citadel-sage-red" 72 dm-task-reminder)
|
|
(flag "citadel-sage-yellow" 73 dm-task-reminder)
|
|
(flag "village3-extra1" 74 dm-task-reminder)
|
|
(flag "village1-buzzer" 75 dm-task-reminder)
|
|
(flag "village2-buzzer" 76 dm-task-reminder)
|
|
(flag "village3-buzzer" 77 dm-task-reminder)
|
|
(flag "cave-gnawers" 78 dm-task-reminder)
|
|
(flag "cave-dark-crystals" 79 dm-task-reminder)
|
|
(flag "cave-dark-climb" 80 dm-task-reminder)
|
|
(flag "cave-robot-climb" 81 dm-task-reminder)
|
|
(flag "cave-swing-poles" 82 dm-task-reminder)
|
|
(flag "cave-spider-tunnel" 83 dm-task-reminder)
|
|
(flag "cave-platforms" 84 dm-task-reminder)
|
|
(flag "cave-buzzer" 85 dm-task-reminder)
|
|
(flag "ogre-boss" 86 dm-task-reminder)
|
|
(flag "ogre-end" 87 dm-task-reminder)
|
|
(flag "ogre-buzzer" 88 dm-task-reminder)
|
|
(flag "lavatube-end" 89 dm-task-reminder)
|
|
(flag "lavatube-buzzer" 90 dm-task-reminder)
|
|
(flag "citadel-buzzer" 91 dm-task-reminder)
|
|
(flag "training-gimmie" 92 dm-task-reminder)
|
|
(flag "training-door" 93 dm-task-reminder)
|
|
(flag "training-climb" 94 dm-task-reminder)
|
|
(flag "training-buzzer" 95 dm-task-reminder)
|
|
(flag "village3-miner-money1" 96 dm-task-reminder)
|
|
(flag "village3-miner-money2" 97 dm-task-reminder)
|
|
(flag "village3-miner-money3" 98 dm-task-reminder)
|
|
(flag "village3-miner-money4" 99 dm-task-reminder)
|
|
(flag "village3-oracle-money1" 100 dm-task-reminder)
|
|
(flag "village3-oracle-money2" 101 dm-task-reminder)
|
|
(flag "firecanyon-assistant" 102 dm-task-reminder)
|
|
(flag "village2-levitator" 103 dm-task-reminder)
|
|
(flag "swamp-arm" 104 dm-task-reminder)
|
|
(flag "village3-button" 105 dm-task-reminder)
|
|
(flag "red-eggtop" 106 dm-task-reminder)
|
|
(flag "lavatube-balls" 107 dm-task-reminder)
|
|
(flag "lavatube-start" 108 dm-task-reminder)
|
|
(flag "intro" 109 dm-task-reminder)
|
|
(flag "ogre-secret" 110 dm-task-reminder)
|
|
(flag "village4-button" 111 dm-task-reminder)
|
|
(flag "finalboss-movies" 112 dm-task-reminder)
|
|
(flag "plunger-lurker-hit" 113 dm-task-reminder)
|
|
(flag "leaving-misty" 114 dm-task-reminder)
|
|
(flag "assistant-village3" 115 dm-task-reminder)
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f)))
|
|
(none))
|
|
|
|
(defun debug-menu-make-task-need-reward-speech-menu ((menu debug-menu) (context debug-menu-context))
|
|
"Append the need-reward-speech page to menu."
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "need-reward-speech"
|
|
#f
|
|
#f
|
|
(flag "jungle-eggtop" 2 dm-task-reward-speech)
|
|
(flag "jungle-lurkerm" 3 dm-task-reward-speech)
|
|
(flag "jungle-tower" 4 dm-task-reward-speech)
|
|
(flag "jungle-fishgame" 5 dm-task-reward-speech)
|
|
(flag "jungle-plant" 6 dm-task-reward-speech)
|
|
(flag "jungle-buzzer" 7 dm-task-reward-speech)
|
|
(flag "jungle-canyon-end" 8 dm-task-reward-speech)
|
|
(flag "jungle-temple-door" 9 dm-task-reward-speech)
|
|
(flag "village1-yakow" 10 dm-task-reward-speech)
|
|
(flag "village1-mayor-money" 11 dm-task-reward-speech)
|
|
(flag "village1-uncle-money" 12 dm-task-reward-speech)
|
|
(flag "village1-oracle-money1" 13 dm-task-reward-speech)
|
|
(flag "village1-oracle-money2" 14 dm-task-reward-speech)
|
|
(flag "beach-ecorocks" 15 dm-task-reward-speech)
|
|
(flag "beach-pelican" 16 dm-task-reward-speech)
|
|
(flag "beach-flutflut" 17 dm-task-reward-speech)
|
|
(flag "beach-seagull" 18 dm-task-reward-speech)
|
|
(flag "beach-cannon" 19 dm-task-reward-speech)
|
|
(flag "beach-buzzer" 20 dm-task-reward-speech)
|
|
(flag "beach-gimmie" 21 dm-task-reward-speech)
|
|
(flag "beach-sentinel" 22 dm-task-reward-speech)
|
|
(flag "misty-muse" 23 dm-task-reward-speech)
|
|
(flag "misty-boat" 24 dm-task-reward-speech)
|
|
(flag "misty-warehouse" 25 dm-task-reward-speech)
|
|
(flag "misty-cannon" 26 dm-task-reward-speech)
|
|
(flag "misty-bike" 27 dm-task-reward-speech)
|
|
(flag "misty-buzzer" 28 dm-task-reward-speech)
|
|
(flag "misty-bike-jump" 29 dm-task-reward-speech)
|
|
(flag "misty-eco-challenge" 30 dm-task-reward-speech)
|
|
(flag "village2-gambler-money" 31 dm-task-reward-speech)
|
|
(flag "village2-geologist-money" 32 dm-task-reward-speech)
|
|
(flag "village2-warrior-money" 33 dm-task-reward-speech)
|
|
(flag "village2-oracle-money1" 34 dm-task-reward-speech)
|
|
(flag "village2-oracle-money2" 35 dm-task-reward-speech)
|
|
(flag "swamp-billy" 36 dm-task-reward-speech)
|
|
(flag "swamp-flutflut" 37 dm-task-reward-speech)
|
|
(flag "swamp-battle" 38 dm-task-reward-speech)
|
|
(flag "swamp-tether-1" 39 dm-task-reward-speech)
|
|
(flag "swamp-tether-2" 40 dm-task-reward-speech)
|
|
(flag "swamp-tether-3" 41 dm-task-reward-speech)
|
|
(flag "swamp-tether-4" 42 dm-task-reward-speech)
|
|
(flag "swamp-buzzer" 43 dm-task-reward-speech)
|
|
(flag "sunken-platforms" 44 dm-task-reward-speech)
|
|
(flag "sunken-pipe" 45 dm-task-reward-speech)
|
|
(flag "sunken-slide" 46 dm-task-reward-speech)
|
|
(flag "sunken-room" 47 dm-task-reward-speech)
|
|
(flag "sunken-sharks" 48 dm-task-reward-speech)
|
|
(flag "sunken-buzzer" 49 dm-task-reward-speech)
|
|
(flag "sunken-top-of-helix" 50 dm-task-reward-speech)
|
|
(flag "sunken-spinning-room" 51 dm-task-reward-speech)
|
|
(flag "rolling-race" 52 dm-task-reward-speech)
|
|
(flag "rolling-robbers" 53 dm-task-reward-speech)
|
|
(flag "rolling-moles" 54 dm-task-reward-speech)
|
|
(flag "rolling-plants" 55 dm-task-reward-speech)
|
|
(flag "rolling-lake" 56 dm-task-reward-speech)
|
|
(flag "rolling-buzzer" 57 dm-task-reward-speech)
|
|
(flag "rolling-ring-chase-1" 58 dm-task-reward-speech)
|
|
(flag "rolling-ring-chase-2" 59 dm-task-reward-speech)
|
|
(flag "snow-eggtop" 60 dm-task-reward-speech)
|
|
(flag "snow-ram" 61 dm-task-reward-speech)
|
|
(flag "snow-fort" 62 dm-task-reward-speech)
|
|
(flag "snow-ball" 63 dm-task-reward-speech)
|
|
(flag "snow-bunnies" 64 dm-task-reward-speech)
|
|
(flag "snow-buzzer" 65 dm-task-reward-speech)
|
|
(flag "snow-bumpers" 66 dm-task-reward-speech)
|
|
(flag "snow-cage" 67 dm-task-reward-speech)
|
|
(flag "firecanyon-buzzer" 68 dm-task-reward-speech)
|
|
(flag "firecanyon-end" 69 dm-task-reward-speech)
|
|
(flag "citadel-sage-green" 70 dm-task-reward-speech)
|
|
(flag "citadel-sage-blue" 71 dm-task-reward-speech)
|
|
(flag "citadel-sage-red" 72 dm-task-reward-speech)
|
|
(flag "citadel-sage-yellow" 73 dm-task-reward-speech)
|
|
(flag "village3-extra1" 74 dm-task-reward-speech)
|
|
(flag "village1-buzzer" 75 dm-task-reward-speech)
|
|
(flag "village2-buzzer" 76 dm-task-reward-speech)
|
|
(flag "village3-buzzer" 77 dm-task-reward-speech)
|
|
(flag "cave-gnawers" 78 dm-task-reward-speech)
|
|
(flag "cave-dark-crystals" 79 dm-task-reward-speech)
|
|
(flag "cave-dark-climb" 80 dm-task-reward-speech)
|
|
(flag "cave-robot-climb" 81 dm-task-reward-speech)
|
|
(flag "cave-swing-poles" 82 dm-task-reward-speech)
|
|
(flag "cave-spider-tunnel" 83 dm-task-reward-speech)
|
|
(flag "cave-platforms" 84 dm-task-reward-speech)
|
|
(flag "cave-buzzer" 85 dm-task-reward-speech)
|
|
(flag "ogre-boss" 86 dm-task-reward-speech)
|
|
(flag "ogre-end" 87 dm-task-reward-speech)
|
|
(flag "ogre-buzzer" 88 dm-task-reward-speech)
|
|
(flag "lavatube-end" 89 dm-task-reward-speech)
|
|
(flag "lavatube-buzzer" 90 dm-task-reward-speech)
|
|
(flag "citadel-buzzer" 91 dm-task-reward-speech)
|
|
(flag "training-gimmie" 92 dm-task-reward-speech)
|
|
(flag "training-door" 93 dm-task-reward-speech)
|
|
(flag "training-climb" 94 dm-task-reward-speech)
|
|
(flag "training-buzzer" 95 dm-task-reward-speech)
|
|
(flag "village3-miner-money1" 96 dm-task-reward-speech)
|
|
(flag "village3-miner-money2" 97 dm-task-reward-speech)
|
|
(flag "village3-miner-money3" 98 dm-task-reward-speech)
|
|
(flag "village3-miner-money4" 99 dm-task-reward-speech)
|
|
(flag "village3-oracle-money1" 100 dm-task-reward-speech)
|
|
(flag "village3-oracle-money2" 101 dm-task-reward-speech)
|
|
(flag "firecanyon-assistant" 102 dm-task-reward-speech)
|
|
(flag "village2-levitator" 103 dm-task-reward-speech)
|
|
(flag "swamp-arm" 104 dm-task-reward-speech)
|
|
(flag "village3-button" 105 dm-task-reward-speech)
|
|
(flag "red-eggtop" 106 dm-task-reward-speech)
|
|
(flag "lavatube-balls" 107 dm-task-reward-speech)
|
|
(flag "lavatube-start" 108 dm-task-reward-speech)
|
|
(flag "intro" 109 dm-task-reward-speech)
|
|
(flag "ogre-secret" 110 dm-task-reward-speech)
|
|
(flag "village4-button" 111 dm-task-reward-speech)
|
|
(flag "finalboss-movies" 112 dm-task-reward-speech)
|
|
(flag "plunger-lurker-hit" 113 dm-task-reward-speech)
|
|
(flag "leaving-misty" 114 dm-task-reward-speech)
|
|
(flag "assistant-village3" 115 dm-task-reward-speech)
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f)))
|
|
(none))
|
|
|
|
(defun debug-menu-make-task-need-resolution-menu ((menu debug-menu) (context debug-menu-context))
|
|
"Append the need-resolution page to menu. Closing a stage here also hands out the fuel cell."
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "need-resolution"
|
|
#f
|
|
#f
|
|
(flag "jungle-eggtop" 2 dm-task-resolution)
|
|
(flag "jungle-lurkerm" 3 dm-task-resolution)
|
|
(flag "jungle-tower" 4 dm-task-resolution)
|
|
(flag "jungle-fishgame" 5 dm-task-resolution)
|
|
(flag "jungle-plant" 6 dm-task-resolution)
|
|
(flag "jungle-buzzer" 7 dm-task-resolution)
|
|
(flag "jungle-canyon-end" 8 dm-task-resolution)
|
|
(flag "jungle-temple-door" 9 dm-task-resolution)
|
|
(flag "village1-yakow" 10 dm-task-resolution)
|
|
(flag "village1-mayor-money" 11 dm-task-resolution)
|
|
(flag "village1-uncle-money" 12 dm-task-resolution)
|
|
(flag "village1-oracle-money1" 13 dm-task-resolution)
|
|
(flag "village1-oracle-money2" 14 dm-task-resolution)
|
|
(flag "beach-ecorocks" 15 dm-task-resolution)
|
|
(flag "beach-pelican" 16 dm-task-resolution)
|
|
(flag "beach-flutflut" 17 dm-task-resolution)
|
|
(flag "beach-seagull" 18 dm-task-resolution)
|
|
(flag "beach-cannon" 19 dm-task-resolution)
|
|
(flag "beach-buzzer" 20 dm-task-resolution)
|
|
(flag "beach-gimmie" 21 dm-task-resolution)
|
|
(flag "beach-sentinel" 22 dm-task-resolution)
|
|
(flag "misty-muse" 23 dm-task-resolution)
|
|
(flag "misty-boat" 24 dm-task-resolution)
|
|
(flag "misty-warehouse" 25 dm-task-resolution)
|
|
(flag "misty-cannon" 26 dm-task-resolution)
|
|
(flag "misty-bike" 27 dm-task-resolution)
|
|
(flag "misty-buzzer" 28 dm-task-resolution)
|
|
(flag "misty-bike-jump" 29 dm-task-resolution)
|
|
(flag "misty-eco-challenge" 30 dm-task-resolution)
|
|
(flag "village2-gambler-money" 31 dm-task-resolution)
|
|
(flag "village2-geologist-money" 32 dm-task-resolution)
|
|
(flag "village2-warrior-money" 33 dm-task-resolution)
|
|
(flag "village2-oracle-money1" 34 dm-task-resolution)
|
|
(flag "village2-oracle-money2" 35 dm-task-resolution)
|
|
(flag "swamp-billy" 36 dm-task-resolution)
|
|
(flag "swamp-flutflut" 37 dm-task-resolution)
|
|
(flag "swamp-battle" 38 dm-task-resolution)
|
|
(flag "swamp-tether-1" 39 dm-task-resolution)
|
|
(flag "swamp-tether-2" 40 dm-task-resolution)
|
|
(flag "swamp-tether-3" 41 dm-task-resolution)
|
|
(flag "swamp-tether-4" 42 dm-task-resolution)
|
|
(flag "swamp-buzzer" 43 dm-task-resolution)
|
|
(flag "sunken-platforms" 44 dm-task-resolution)
|
|
(flag "sunken-pipe" 45 dm-task-resolution)
|
|
(flag "sunken-slide" 46 dm-task-resolution)
|
|
(flag "sunken-room" 47 dm-task-resolution)
|
|
(flag "sunken-sharks" 48 dm-task-resolution)
|
|
(flag "sunken-buzzer" 49 dm-task-resolution)
|
|
(flag "sunken-top-of-helix" 50 dm-task-resolution)
|
|
(flag "sunken-spinning-room" 51 dm-task-resolution)
|
|
(flag "rolling-race" 52 dm-task-resolution)
|
|
(flag "rolling-robbers" 53 dm-task-resolution)
|
|
(flag "rolling-moles" 54 dm-task-resolution)
|
|
(flag "rolling-plants" 55 dm-task-resolution)
|
|
(flag "rolling-lake" 56 dm-task-resolution)
|
|
(flag "rolling-buzzer" 57 dm-task-resolution)
|
|
(flag "rolling-ring-chase-1" 58 dm-task-resolution)
|
|
(flag "rolling-ring-chase-2" 59 dm-task-resolution)
|
|
(flag "snow-eggtop" 60 dm-task-resolution)
|
|
(flag "snow-ram" 61 dm-task-resolution)
|
|
(flag "snow-fort" 62 dm-task-resolution)
|
|
(flag "snow-ball" 63 dm-task-resolution)
|
|
(flag "snow-bunnies" 64 dm-task-resolution)
|
|
(flag "snow-buzzer" 65 dm-task-resolution)
|
|
(flag "snow-bumpers" 66 dm-task-resolution)
|
|
(flag "snow-cage" 67 dm-task-resolution)
|
|
(flag "firecanyon-buzzer" 68 dm-task-resolution)
|
|
(flag "firecanyon-end" 69 dm-task-resolution)
|
|
(flag "citadel-sage-green" 70 dm-task-resolution)
|
|
(flag "citadel-sage-blue" 71 dm-task-resolution)
|
|
(flag "citadel-sage-red" 72 dm-task-resolution)
|
|
(flag "citadel-sage-yellow" 73 dm-task-resolution)
|
|
(flag "village3-extra1" 74 dm-task-resolution)
|
|
(flag "village1-buzzer" 75 dm-task-resolution)
|
|
(flag "village2-buzzer" 76 dm-task-resolution)
|
|
(flag "village3-buzzer" 77 dm-task-resolution)
|
|
(flag "cave-gnawers" 78 dm-task-resolution)
|
|
(flag "cave-dark-crystals" 79 dm-task-resolution)
|
|
(flag "cave-dark-climb" 80 dm-task-resolution)
|
|
(flag "cave-robot-climb" 81 dm-task-resolution)
|
|
(flag "cave-swing-poles" 82 dm-task-resolution)
|
|
(flag "cave-spider-tunnel" 83 dm-task-resolution)
|
|
(flag "cave-platforms" 84 dm-task-resolution)
|
|
(flag "cave-buzzer" 85 dm-task-resolution)
|
|
(flag "ogre-boss" 86 dm-task-resolution)
|
|
(flag "ogre-end" 87 dm-task-resolution)
|
|
(flag "ogre-buzzer" 88 dm-task-resolution)
|
|
(flag "lavatube-end" 89 dm-task-resolution)
|
|
(flag "lavatube-buzzer" 90 dm-task-resolution)
|
|
(flag "citadel-buzzer" 91 dm-task-resolution)
|
|
(flag "training-gimmie" 92 dm-task-resolution)
|
|
(flag "training-door" 93 dm-task-resolution)
|
|
(flag "training-climb" 94 dm-task-resolution)
|
|
(flag "training-buzzer" 95 dm-task-resolution)
|
|
(flag "village3-miner-money1" 96 dm-task-resolution)
|
|
(flag "village3-miner-money2" 97 dm-task-resolution)
|
|
(flag "village3-miner-money3" 98 dm-task-resolution)
|
|
(flag "village3-miner-money4" 99 dm-task-resolution)
|
|
(flag "village3-oracle-money1" 100 dm-task-resolution)
|
|
(flag "village3-oracle-money2" 101 dm-task-resolution)
|
|
(flag "firecanyon-assistant" 102 dm-task-resolution)
|
|
(flag "village2-levitator" 103 dm-task-resolution)
|
|
(flag "swamp-arm" 104 dm-task-resolution)
|
|
(flag "village3-button" 105 dm-task-resolution)
|
|
(flag "red-eggtop" 106 dm-task-resolution)
|
|
(flag "lavatube-balls" 107 dm-task-resolution)
|
|
(flag "lavatube-start" 108 dm-task-resolution)
|
|
(flag "intro" 109 dm-task-resolution)
|
|
(flag "ogre-secret" 110 dm-task-resolution)
|
|
(flag "village4-button" 111 dm-task-resolution)
|
|
(flag "finalboss-movies" 112 dm-task-resolution)
|
|
(flag "plunger-lurker-hit" 113 dm-task-resolution)
|
|
(flag "leaving-misty" 114 dm-task-resolution)
|
|
(flag "assistant-village3" 115 dm-task-resolution)
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f
|
|
#f)))
|
|
(none))
|
|
|
|
(defun dm-task-get-money ((id int) (msg debug-menu-msg))
|
|
"Give the player the money one task rewards, and report whether they already hold that much."
|
|
(if (= msg (debug-menu-msg press)) (send-event *target* 'get-pickup (pickup-type money) (-> *GAME-bank* money-task-inc)))
|
|
(>= (the-as float (send-event *target* 'query 'pickup (pickup-type money))) (-> *GAME-bank* money-task-inc)))
|
|
|
|
(defun dm-give-all-cells ((id int) (msg debug-menu-msg))
|
|
"Give the player every fuel cell and close the need-resolution stage of all 100 tasks. Reports
|
|
whether they are all closed already."
|
|
(when (= msg (debug-menu-msg press))
|
|
(dotimes (i 100)
|
|
(send-event *target* 'get-pickup (pickup-type fuel-cell) (the float (+ i 2)))
|
|
(close-specific-task! (the-as game-task (+ i 2)) (task-status need-resolution))))
|
|
(dotimes (i 100)
|
|
(if (not (task-closed? (the-as game-task (+ i 2)) (task-status need-resolution))) (return #f)))
|
|
#t)
|
|
|
|
(defun dm-give-cell ((task game-task))
|
|
"Give the player the fuel cell for task and close its need-resolution stage."
|
|
(send-event *target* 'get-pickup (pickup-type fuel-cell) (the float task))
|
|
(close-specific-task! task (task-status need-resolution))
|
|
(none))
|
|
|
|
(defun dm-levitator-ready ((id int) (msg debug-menu-msg))
|
|
"Set up the state the village2 levitator task expects: close its introduction and first reminder,
|
|
and hand out every cell up to sunken-sharks. Reports whether the task is waiting on its reward
|
|
speech."
|
|
(when (= msg (debug-menu-msg press))
|
|
(close-specific-task! (game-task village2-levitator) (task-status need-introduction))
|
|
(close-specific-task! (game-task village2-levitator) (task-status need-reminder-a))
|
|
(dm-give-cell (game-task jungle-eggtop))
|
|
(dm-give-cell (game-task jungle-lurkerm))
|
|
(dm-give-cell (game-task jungle-tower))
|
|
(dm-give-cell (game-task jungle-fishgame))
|
|
(dm-give-cell (game-task jungle-plant))
|
|
(dm-give-cell (game-task jungle-buzzer))
|
|
(dm-give-cell (game-task jungle-canyon-end))
|
|
(dm-give-cell (game-task jungle-temple-door))
|
|
(dm-give-cell (game-task village1-yakow))
|
|
(dm-give-cell (game-task village1-mayor-money))
|
|
(dm-give-cell (game-task village1-uncle-money))
|
|
(dm-give-cell (game-task village1-oracle-money1))
|
|
(dm-give-cell (game-task village1-oracle-money2))
|
|
(dm-give-cell (game-task beach-ecorocks))
|
|
(dm-give-cell (game-task beach-pelican))
|
|
(dm-give-cell (game-task beach-flutflut))
|
|
(dm-give-cell (game-task beach-seagull))
|
|
(dm-give-cell (game-task beach-cannon))
|
|
(dm-give-cell (game-task beach-buzzer))
|
|
(dm-give-cell (game-task beach-gimmie))
|
|
(dm-give-cell (game-task beach-sentinel))
|
|
(dm-give-cell (game-task misty-muse))
|
|
(dm-give-cell (game-task misty-boat))
|
|
(dm-give-cell (game-task misty-warehouse))
|
|
(dm-give-cell (game-task misty-cannon))
|
|
(dm-give-cell (game-task misty-bike))
|
|
(dm-give-cell (game-task misty-buzzer))
|
|
(dm-give-cell (game-task misty-bike-jump))
|
|
(dm-give-cell (game-task misty-eco-challenge))
|
|
(dm-give-cell (game-task village2-gambler-money))
|
|
(dm-give-cell (game-task village2-geologist-money))
|
|
(dm-give-cell (game-task village2-oracle-money1))
|
|
(dm-give-cell (game-task village2-oracle-money2))
|
|
(dm-give-cell (game-task swamp-billy))
|
|
(dm-give-cell (game-task swamp-flutflut))
|
|
(dm-give-cell (game-task swamp-battle))
|
|
(dm-give-cell (game-task swamp-tether-1))
|
|
(dm-give-cell (game-task swamp-tether-2))
|
|
(dm-give-cell (game-task swamp-tether-3))
|
|
(dm-give-cell (game-task swamp-tether-4))
|
|
(dm-give-cell (game-task swamp-buzzer))
|
|
(dm-give-cell (game-task sunken-platforms))
|
|
(dm-give-cell (game-task sunken-pipe))
|
|
(dm-give-cell (game-task sunken-slide))
|
|
(dm-give-cell (game-task sunken-room))
|
|
(dm-give-cell (game-task sunken-sharks)))
|
|
(= (get-task-status (game-task village2-levitator)) (task-status need-reward-speech)))
|
|
|
|
(defun dm-lavabike-ready ((id int) (msg debug-menu-msg))
|
|
"Hand out every cell up to village2-buzzer, which is what the lavatube start task requires.
|
|
Reports whether that task is waiting on its reward speech."
|
|
(when (= msg (debug-menu-msg press))
|
|
(dm-give-cell (game-task jungle-eggtop))
|
|
(dm-give-cell (game-task jungle-lurkerm))
|
|
(dm-give-cell (game-task jungle-tower))
|
|
(dm-give-cell (game-task jungle-fishgame))
|
|
(dm-give-cell (game-task jungle-plant))
|
|
(dm-give-cell (game-task jungle-buzzer))
|
|
(dm-give-cell (game-task jungle-canyon-end))
|
|
(dm-give-cell (game-task jungle-temple-door))
|
|
(dm-give-cell (game-task village1-yakow))
|
|
(dm-give-cell (game-task village1-mayor-money))
|
|
(dm-give-cell (game-task village1-uncle-money))
|
|
(dm-give-cell (game-task village1-oracle-money1))
|
|
(dm-give-cell (game-task village1-oracle-money2))
|
|
(dm-give-cell (game-task beach-ecorocks))
|
|
(dm-give-cell (game-task beach-pelican))
|
|
(dm-give-cell (game-task beach-flutflut))
|
|
(dm-give-cell (game-task beach-seagull))
|
|
(dm-give-cell (game-task beach-cannon))
|
|
(dm-give-cell (game-task beach-buzzer))
|
|
(dm-give-cell (game-task beach-gimmie))
|
|
(dm-give-cell (game-task beach-sentinel))
|
|
(dm-give-cell (game-task misty-muse))
|
|
(dm-give-cell (game-task misty-boat))
|
|
(dm-give-cell (game-task misty-warehouse))
|
|
(dm-give-cell (game-task misty-cannon))
|
|
(dm-give-cell (game-task misty-bike))
|
|
(dm-give-cell (game-task misty-buzzer))
|
|
(dm-give-cell (game-task misty-bike-jump))
|
|
(dm-give-cell (game-task misty-eco-challenge))
|
|
(dm-give-cell (game-task village2-gambler-money))
|
|
(dm-give-cell (game-task village2-geologist-money))
|
|
(dm-give-cell (game-task village2-warrior-money))
|
|
(dm-give-cell (game-task village2-oracle-money1))
|
|
(dm-give-cell (game-task village2-oracle-money2))
|
|
(dm-give-cell (game-task swamp-billy))
|
|
(dm-give-cell (game-task swamp-flutflut))
|
|
(dm-give-cell (game-task swamp-battle))
|
|
(dm-give-cell (game-task swamp-tether-1))
|
|
(dm-give-cell (game-task swamp-tether-2))
|
|
(dm-give-cell (game-task swamp-tether-3))
|
|
(dm-give-cell (game-task swamp-tether-4))
|
|
(dm-give-cell (game-task swamp-buzzer))
|
|
(dm-give-cell (game-task sunken-platforms))
|
|
(dm-give-cell (game-task sunken-pipe))
|
|
(dm-give-cell (game-task sunken-slide))
|
|
(dm-give-cell (game-task sunken-room))
|
|
(dm-give-cell (game-task sunken-sharks))
|
|
(dm-give-cell (game-task sunken-buzzer))
|
|
(dm-give-cell (game-task sunken-top-of-helix))
|
|
(dm-give-cell (game-task sunken-spinning-room))
|
|
(dm-give-cell (game-task rolling-race))
|
|
(dm-give-cell (game-task rolling-robbers))
|
|
(dm-give-cell (game-task rolling-moles))
|
|
(dm-give-cell (game-task rolling-plants))
|
|
(dm-give-cell (game-task rolling-lake))
|
|
(dm-give-cell (game-task rolling-buzzer))
|
|
(dm-give-cell (game-task rolling-ring-chase-1))
|
|
(dm-give-cell (game-task rolling-ring-chase-2))
|
|
(dm-give-cell (game-task snow-eggtop))
|
|
(dm-give-cell (game-task snow-ram))
|
|
(dm-give-cell (game-task snow-fort))
|
|
(dm-give-cell (game-task snow-ball))
|
|
(dm-give-cell (game-task snow-bunnies))
|
|
(dm-give-cell (game-task snow-buzzer))
|
|
(dm-give-cell (game-task snow-bumpers))
|
|
(dm-give-cell (game-task snow-cage))
|
|
(dm-give-cell (game-task firecanyon-buzzer))
|
|
(dm-give-cell (game-task firecanyon-end))
|
|
(dm-give-cell (game-task citadel-sage-green))
|
|
(dm-give-cell (game-task citadel-sage-blue))
|
|
(dm-give-cell (game-task citadel-sage-red))
|
|
(dm-give-cell (game-task citadel-sage-yellow))
|
|
(dm-give-cell (game-task village3-extra1))
|
|
(dm-give-cell (game-task village1-buzzer))
|
|
(dm-give-cell (game-task village2-buzzer)))
|
|
(= (get-task-status (game-task lavatube-start)) (task-status need-reward-speech)))
|
|
|
|
(defun debug-menu-make-task-menu ((context debug-menu-context))
|
|
"Build the Task page and return the item that opens it."
|
|
(let* ((menu (new 'debug 'debug-menu context "Task menu"))
|
|
(task-item (new 'debug 'debug-menu-item-submenu "Task" menu)))
|
|
(debug-menu-append-item menu (new 'debug 'debug-menu-item-flag "enough money" #f dm-task-get-money))
|
|
(debug-menu-append-item menu (new 'debug 'debug-menu-item-flag "levitator ready" #f dm-levitator-ready))
|
|
(debug-menu-append-item menu (new 'debug 'debug-menu-item-flag "lavabike ready" #f dm-lavabike-ready))
|
|
(debug-menu-append-item menu (new 'debug 'debug-menu-item-flag "all cells" #f dm-give-all-cells))
|
|
(debug-menu-make-task-unknown-menu menu context)
|
|
(debug-menu-make-task-need-hint-menu menu context)
|
|
(debug-menu-make-task-need-introduction-menu menu context)
|
|
(debug-menu-make-task-need-reminder-a-menu menu context)
|
|
(debug-menu-make-task-need-reminder-menu menu context)
|
|
(debug-menu-make-task-need-reward-speech-menu menu context)
|
|
(debug-menu-make-task-need-resolution-menu menu context)
|
|
task-item))
|
|
|
|
(defun dm-anim-tester-flag-func ((id symbol) (msg debug-menu-msg))
|
|
"Anim Tester flags. Toggles apply-align or show-joint-info on the running tester and reports the
|
|
bit, or reports #f when no tester is running."
|
|
(when *anim-tester*
|
|
(case id
|
|
(('at-apply-align)
|
|
(if (= msg (debug-menu-msg press)) (logxor! (-> *anim-tester* 0 flags) (anim-tester-flags at-apply-align)))
|
|
(return (logtest? (-> *anim-tester* 0 flags) (anim-tester-flags at-apply-align))))
|
|
(('at-show-joint-info)
|
|
(if (= msg (debug-menu-msg press)) (logxor! (-> *anim-tester* 0 flags) (anim-tester-flags at-show-joint-info)))
|
|
(return (logtest? (-> *anim-tester* 0 flags) (anim-tester-flags at-show-joint-info))))))
|
|
#f)
|
|
|
|
(defun dm-anim-tester-func ((id symbol) (msg debug-menu-msg))
|
|
"Anim Tester commands. Starts the tester if it is not running, then forwards a pick or save
|
|
request to it, or points the camera at it. The pick commands hide the debug menu so the tester
|
|
can use the pad."
|
|
(if (not *anim-tester*) (anim-tester-start))
|
|
(when *anim-tester*
|
|
(cond
|
|
((= id 'at-pick-object)
|
|
(send-event (ppointer->process *anim-tester*) 'pick-object)
|
|
(set! (-> *debug-menu-context* is-hidden) #t))
|
|
((= id 'at-pick-joint-anim)
|
|
(send-event (ppointer->process *anim-tester*) 'pick-joint-anim)
|
|
(set! (-> *debug-menu-context* is-hidden) #t))
|
|
((= id 'at-pick-sequence)
|
|
(send-event (ppointer->process *anim-tester*) 'pick-sequence)
|
|
(set! (-> *debug-menu-context* is-hidden) #t))
|
|
((= id 'at-save-sequences) (send-event (ppointer->process *anim-tester*) 'save-sequences))
|
|
((= id 'at-cam-stick) (set! *camera-orbit-target* *anim-tester*) (send-event *camera* 'change-state cam-orbit 0))
|
|
((= id 'at-cam-free-floating) (send-event *camera* 'change-state cam-free-floating 0))))
|
|
(none))
|
|
|
|
(defun build-continue-menu ((menu debug-menu) (info game-info))
|
|
"Fill menu with one entry per continue point of every level in *level-load-list*. info is unused."
|
|
(let ((levels *level-load-list*))
|
|
(while (not (null? levels))
|
|
(let ((continues (-> (the-as level-load-info (-> (the-as symbol (car levels)) value)) continues)))
|
|
(while (not (null? continues))
|
|
(let* ((continue-info (the-as continue-point (car continues)))
|
|
(item (new 'debug 'debug-menu-item-flag (-> continue-info name) (-> continue-info name) dm-current-continue)))
|
|
(debug-menu-append-item menu item))
|
|
(set! continues (cdr continues))))
|
|
(set! levels (cdr levels))))
|
|
menu)
|
|
|
|
(defun debug-menu-context-make-default-menus ((context debug-menu-context))
|
|
"Build the whole debug menu into context and install it as the root menu."
|
|
(let ((menu (new 'debug 'debug-menu context "Main menu")))
|
|
(debug-menu-context-set-root-menu context menu)
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "Artist"
|
|
(flag "Poly Stats" *stats-poly* dm-boolean-toggle-pick-func)
|
|
(flag "Memory Stats" *stats-memory* dm-boolean-toggle-pick-func)
|
|
(flag "Memory Stats Short" *stats-memory-short* dm-boolean-toggle-pick-func)
|
|
(flag "Ground Stats" *display-ground-stats* dm-boolean-toggle-pick-func)
|
|
(flag "All Visible" *artist-all-visible* dm-boolean-toggle-pick-func)
|
|
(flag "Flip Visible" *artist-flip-visible* dm-boolean-toggle-pick-func)
|
|
(flag "Fix Visible" *artist-fix-visible* dm-boolean-toggle-pick-func)
|
|
(flag "Fix Frustum" *artist-fix-frustum* dm-boolean-toggle-pick-func)
|
|
(flag "Error Spheres" *artist-error-spheres* dm-boolean-toggle-pick-func)
|
|
(flag "Use menu subdiv" *artist-use-menu-subdiv* dm-boolean-toggle-pick-func)
|
|
(float-var "Subdiv Close" close dm-subdiv-float 10 1 #t 1 200 1)
|
|
(float-var "Subdiv Far" far dm-subdiv-float 10 1 #t 1 200 1)
|
|
(function "Target Start" #f ,(lambda () (start 'debug (get-or-create-continue! *game-info*))))
|
|
(function "Target Stop" #f ,(lambda () (stop 'debug)))
|
|
(menu "Anim Tester"
|
|
(int-var "Speed" anim-speed dm-subdiv-int 10 10 #t -300 1000)
|
|
(flag "Apply Align" at-apply-align dm-anim-tester-flag-func)
|
|
(flag "Show Joint Inf" at-show-joint-info dm-anim-tester-flag-func)
|
|
(function "Camera Face" at-cam-stick dm-anim-tester-func)
|
|
(function "Camera Free" at-cam-free-floating dm-anim-tester-func)
|
|
(function "Pick Object" at-pick-object dm-anim-tester-func)
|
|
(function "Pick Joint Anim" at-pick-joint-anim dm-anim-tester-func)
|
|
(function "Pick Sequence" at-pick-sequence dm-anim-tester-func)
|
|
(function "Save Sequences" at-save-sequences dm-anim-tester-func))
|
|
(flag "Show Entity Errors" *display-entity-errors* dm-boolean-toggle-pick-func)
|
|
(flag "Sprite Info" *display-sprite-info* dm-boolean-toggle-pick-func)
|
|
(flag "Time of Day" #f dm-time-of-day-pick-func)
|
|
(flag "Preload Anims" *preload-spool-anims* dm-boolean-toggle-pick-func))))
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "Game"
|
|
(function "New Game" #f ,(lambda () (initialize! *game-info* 'game (the-as game-save #f) (the-as string #f)) (none)))
|
|
(function "New Life" #f ,(lambda () (initialize! *game-info* 'die (the-as game-save #f) (the-as string #f)) (none)))
|
|
(function "Reset Game"
|
|
#f
|
|
,(lambda ()
|
|
(set! (-> *game-info* mode) 'debug)
|
|
(initialize! *game-info* 'game (the-as game-save #f) (the-as string #f))
|
|
(none)))
|
|
(function "Reset Actors" #f ,(lambda () (reset-actors 'debug) (none)))
|
|
(function "Save Game" #f ,(lambda () (auto-save-command 'save 0 0 *default-pool*) (none)))
|
|
(function "Load Game" #f ,(lambda () (auto-save-command 'restore 0 0 *default-pool*) (none)))
|
|
(flag "Target"
|
|
#f
|
|
,(lambda ((id int) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(if *target* (stop 'debug) (start 'debug (get-or-create-continue! *game-info*))))
|
|
*target*))
|
|
(flag "Game Mode" play dm-game-mode-pick-func)
|
|
(flag "Debug Mode" debug dm-game-mode-pick-func)
|
|
(menu "Continue")
|
|
(menu "Settings"
|
|
(float-var "sfx-volume"
|
|
#f
|
|
,(lambda ((id int) (msg debug-menu-msg) (value float))
|
|
(if (= msg (debug-menu-msg press))
|
|
(set! (-> *setting-control* default sfx-volume) value)
|
|
(-> *setting-control* default sfx-volume)))
|
|
2
|
|
1
|
|
#t
|
|
0
|
|
100
|
|
0)
|
|
(float-var "music-volume"
|
|
#f
|
|
,(lambda ((id int) (msg debug-menu-msg) (value float))
|
|
(if (= msg (debug-menu-msg press))
|
|
(set! (-> *setting-control* default music-volume) value)
|
|
(-> *setting-control* default music-volume)))
|
|
2
|
|
1
|
|
#t
|
|
0
|
|
100
|
|
0)
|
|
(float-var "dialog-volume"
|
|
#f
|
|
,(lambda ((id int) (msg debug-menu-msg) (value float))
|
|
(if (= msg (debug-menu-msg press))
|
|
(set! (-> *setting-control* default dialog-volume) value)
|
|
(-> *setting-control* default dialog-volume)))
|
|
2
|
|
1
|
|
#t
|
|
0
|
|
100
|
|
0)
|
|
(menu "Language"
|
|
(flag "english" 0 dm-setting-language)
|
|
(flag "japanese" 5 dm-setting-language)
|
|
(flag "french" 1 dm-setting-language)
|
|
(flag "german" 2 dm-setting-language)
|
|
(flag "spanish" 3 dm-setting-language)
|
|
(flag "italian" 4 dm-setting-language)
|
|
(flag "uk-english" 6 dm-setting-language))
|
|
(flag "play-hints "
|
|
#f
|
|
,(lambda ((id int) (msg debug-menu-msg))
|
|
(if (= msg (debug-menu-msg press))
|
|
(set! (-> *setting-control* default play-hints) (not (-> *setting-control* default play-hints))))
|
|
(-> *setting-control* default play-hints)))
|
|
(flag "vibration"
|
|
#f
|
|
,(lambda ((id int) (msg debug-menu-msg))
|
|
(if (= msg (debug-menu-msg press))
|
|
(set! (-> *setting-control* default vibration) (not (-> *setting-control* default vibration))))
|
|
(-> *setting-control* default vibration)))
|
|
(flag "border-mode"
|
|
#f
|
|
,(lambda ((id int) (msg debug-menu-msg))
|
|
(if (= msg (debug-menu-msg press))
|
|
(set! (-> *setting-control* default border-mode) (not (-> *setting-control* default border-mode))))
|
|
(-> *setting-control* default border-mode)))))))
|
|
(let ((continue-menu (debug-menu-find-from-template context '("Game" "Continue"))))
|
|
(build-continue-menu continue-menu *game-info*))
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "Stats"
|
|
(flag "Poly" *stats-poly* dm-boolean-toggle-pick-func)
|
|
(flag "Collide" *stats-collide* dm-boolean-toggle-pick-func)
|
|
(flag "Bsp" *stats-bsp* dm-boolean-toggle-pick-func)
|
|
(flag "Buffer" *stats-buffer* dm-boolean-toggle-pick-func)
|
|
(flag "Target" *stats-target* dm-boolean-toggle-pick-func)
|
|
(flag "Dma test" *stats-dma-test* dm-boolean-toggle-pick-func)
|
|
(flag "Blerc" *stats-blerc* dm-boolean-toggle-pick-func)
|
|
(flag "Perf" *display-perf-stats* dm-boolean-toggle-pick-func))))
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "Render"
|
|
(flag "sky" 1 dm-vu1-user-toggle-pick-func)
|
|
(flag "ocean" 2 dm-vu1-user-toggle-pick-func)
|
|
(flag "ocean-wave" 4 dm-vu1-user-toggle-pick-func)
|
|
(flag "TFRAG TIE TEXTURES" #x1 dm-texture-user-toggle-pick-func)
|
|
(flag "tfrag" 8 dm-vu1-user-toggle-pick-func)
|
|
(flag "tie-near" 16 dm-vu1-user-toggle-pick-func)
|
|
(flag "tie" 32 dm-vu1-user-toggle-pick-func)
|
|
(flag "generic" 64 dm-vu1-user-toggle-pick-func)
|
|
(flag "generic-tie" *generic-tie* dm-boolean-toggle-pick-func)
|
|
(flag "PRIS TEXTURES" #x2 dm-texture-user-toggle-pick-func)
|
|
(flag "merc" 128 dm-vu1-user-toggle-pick-func)
|
|
(flag "SHRUB TEXTURES" #x4 dm-texture-user-toggle-pick-func)
|
|
(flag "shrub-near" 512 dm-vu1-user-toggle-pick-func)
|
|
(flag "shrubbery" 256 dm-vu1-user-toggle-pick-func)
|
|
(flag "billboard" 1024 dm-vu1-user-toggle-pick-func)
|
|
(flag "trans-shrubbery" 2048 dm-vu1-user-toggle-pick-func)
|
|
(flag "ALPHA TEXTURES" 1 dm-texture-user-toggle-pick-func)
|
|
(flag "trans-tfrag" 4096 dm-vu1-user-toggle-pick-func)
|
|
(flag "sprite" 8192 dm-vu1-user-toggle-pick-func)
|
|
(flag "shadow" 16384 dm-vu1-user-toggle-pick-func)
|
|
(flag "shadow-debug" *shadow-debug* dm-boolean-toggle-pick-func)
|
|
(flag "WATER TEXTURES" 2 dm-texture-user-toggle-pick-func)
|
|
(flag "depth-cue" 32768 dm-vu1-user-toggle-pick-func)
|
|
(flag "all on" 262143 dm-vu1-user-set-pick-func)
|
|
(flag "all off" 196608 dm-vu1-user-set-pick-func)
|
|
(flag "all textures on" #x1f dm-texture-user-set-pick-func)
|
|
(flag "all textures off" 0 dm-texture-user-set-pick-func))))
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "Collision"
|
|
(flag "Collide Stats" *stats-collide* dm-boolean-toggle-pick-func)
|
|
(flag "Collision Marks" *display-collision-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Collision Cache" *display-collide-cache* dm-boolean-toggle-pick-func)
|
|
(flag "Render Collision" *display-render-collision* dm-boolean-toggle-pick-func)
|
|
(flag "Hipri Collision Marks" *display-hipri-collision-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Edge Collision Marks" *display-edge-collision-marks* dm-boolean-toggle-pick-func))))
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "Display"
|
|
(flag "Profile" *display-profile* dm-boolean-toggle-pick-func)
|
|
(flag "Ticks" *profile-ticks* dm-boolean-toggle-pick-func)
|
|
(flag "File Info" *display-file-info* dm-boolean-toggle-pick-func)
|
|
(flag "Level Spheres" *display-level-spheres* dm-boolean-toggle-pick-func)
|
|
(flag "Collision Marks" *display-collision-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Collision Cache" *display-collide-cache* dm-boolean-toggle-pick-func)
|
|
(flag "Hipri Collision Marks" *display-hipri-collision-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Edge Collision Marks" *display-edge-collision-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Target Marks" *display-target-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Target Stats" *stats-target* dm-boolean-toggle-pick-func)
|
|
(flag "Entity Lights" *display-lights* dm-boolean-toggle-pick-func)
|
|
(flag "Camera Marks" *display-camera-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Camera Info" *display-camera-info* dm-boolean-toggle-pick-func)
|
|
(flag "Geometry Marks" *display-geo-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Nav Marks" *display-nav-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Path Marks" *display-path-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Vol Marks" *display-vol-marks* dm-boolean-toggle-pick-func)
|
|
(menu "Ambient Marks"
|
|
(flag "Ambient Hint Marks" *display-ambient-hint-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Sound Marks" *display-ambient-sound-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Poi Marks" *display-ambient-poi-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Light Marks" *display-ambient-light-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Dark Marks" *display-ambient-dark-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Weather Off Marks" *display-ambient-weather-off-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Ocean Off Marks" *display-ambient-ocean-off-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Ocean Near Off Marks" *display-ambient-ocean-near-off-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Music" *display-ambient-music-marks* dm-boolean-toggle-pick-func))
|
|
(menu "Actor Marks"
|
|
(flag "off" #f dm-actor-marks-pick-func)
|
|
(flag "on" #t dm-actor-marks-pick-func)
|
|
(flag "full" full dm-actor-marks-pick-func)
|
|
(flag "process" process dm-actor-marks-pick-func))
|
|
(menu "Actor Vis"
|
|
(flag "off" #f dm-actor-vis-pick-func)
|
|
(flag "box" box dm-actor-vis-pick-func)
|
|
(flag "sphere" sphere dm-actor-vis-pick-func)
|
|
(flag "all" #t dm-actor-vis-pick-func))
|
|
(flag "Art Control" *display-art-control* dm-boolean-toggle-pick-func)
|
|
(flag "Instance Info" *display-instance-info* dm-boolean-toggle-pick-func)
|
|
(menu "strip lines"
|
|
(flag "strippable" 1 dm-strip-lines-toggle-pick-func)
|
|
(flag "convertible" 2 dm-strip-lines-toggle-pick-func)
|
|
(flag "edgeable" 4 dm-strip-lines-toggle-pick-func)
|
|
(flag "ordinary" 8 dm-strip-lines-toggle-pick-func)
|
|
(flag "color mismatch" 16 dm-strip-lines-toggle-pick-func)
|
|
(flag "shader mismatch" 32 dm-strip-lines-toggle-pick-func)
|
|
(flag "uv mismatch" 64 dm-strip-lines-toggle-pick-func)
|
|
(flag "too big" 128 dm-strip-lines-toggle-pick-func)
|
|
(flag "good" 3 dm-strip-lines-set-pick-func)
|
|
(flag "bad" 240 dm-strip-lines-set-pick-func)
|
|
(flag "all edges" 255 dm-strip-lines-set-pick-func)
|
|
(flag "strips" 256 dm-strip-lines-set-pick-func)
|
|
(flag "frags" 512 dm-strip-lines-set-pick-func)
|
|
(flag "none" 0 dm-strip-lines-set-pick-func))
|
|
(menu "collision mesh"
|
|
(flag "wall" 1024 dm-strip-lines-toggle-pick-func)
|
|
(flag "ground" 2048 dm-strip-lines-toggle-pick-func)
|
|
(flag "all" 3072 dm-strip-lines-set-pick-func)
|
|
(flag "none" 0 dm-strip-lines-set-pick-func))
|
|
(flag "Texture Download" *display-texture-download* dm-boolean-toggle-pick-func)
|
|
(flag "Level Border" *display-level-border* dm-boolean-toggle-pick-func)
|
|
(flag "Split Boxes" *display-split-boxes* dm-boolean-toggle-pick-func)
|
|
(flag "Split Box Info" *display-split-box-info* dm-boolean-toggle-pick-func)
|
|
(flag "Load boundaries" *display-load-boundaries* dm-boolean-toggle-pick-func)
|
|
(flag "Memcard Info" *display-memcard-info* dm-boolean-toggle-pick-func))))
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "Actor"
|
|
(flag "Spawn Actors" *spawn-actors* dm-boolean-toggle-pick-func)
|
|
(function "Reset Actors" #f ,(lambda () (reset-actors 'debug) (none)))
|
|
(menu "Actor Compaction"
|
|
(flag "off" #f dm-compact-actor-pick-func)
|
|
(flag "on" #t dm-compact-actor-pick-func)
|
|
(flag "debug" debug dm-compact-actor-pick-func))
|
|
(flag "Ambients" *execute-ambients* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Hint Marks" *display-ambient-hint-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Sound Marks" *display-ambient-sound-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Poi Marks" *display-ambient-poi-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Light Marks" *display-ambient-light-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Dark Marks" *display-ambient-dark-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Weather Off Marks" *display-ambient-weather-off-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Ocean Off Marks" *display-ambient-ocean-off-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Ocean Near Off Marks" *display-ambient-ocean-near-off-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Ambient Music" *display-ambient-music-marks* dm-boolean-toggle-pick-func)
|
|
(menu "Actor Marks"
|
|
(flag "off" #f dm-actor-marks-pick-func)
|
|
(flag "on" #t dm-actor-marks-pick-func)
|
|
(flag "full" full dm-actor-marks-pick-func)
|
|
(flag "process" process dm-actor-marks-pick-func))
|
|
(menu "Actor Vis"
|
|
(flag "off" #f dm-actor-vis-pick-func)
|
|
(flag "box" box dm-actor-vis-pick-func)
|
|
(flag "sphere" sphere dm-actor-vis-pick-func)
|
|
(flag "all" #t dm-actor-vis-pick-func))
|
|
(flag "Actor Vis" *vis-actors* dm-boolean-toggle-pick-func))))
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "Target"
|
|
(flag "Target Stats" *stats-target* dm-boolean-toggle-pick-func)
|
|
(function "Play" #f ,(lambda () (play #t #t)))
|
|
(function "Start" #f ,(lambda () (the-as int (start 'debug (get-or-create-continue! *game-info*)))))
|
|
(function "Stop" #f ,(lambda () (stop 'debug)))
|
|
(flag "Invulnerable"
|
|
#f
|
|
,(lambda ((id int) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(if *target* (logxor! (-> *target* state-flags) (state-flags invulnerable))))
|
|
(the-as symbol (and *target* (logtest? (-> *target* state-flags) (state-flags invulnerable))))))
|
|
(function "Reset Trans"
|
|
#f
|
|
,(lambda ()
|
|
(when *target*
|
|
(position-in-front-of-camera! (target-pos 0) (meters 10) (meters 1))
|
|
(vector-zero! (-> *target* control transv))
|
|
(quaternion-identity! (-> *target* control quat))
|
|
(quaternion-identity! (-> *target* control quat-for-control))
|
|
(quaternion-identity! (-> *target* control dir-targ)))))
|
|
(function "Zero Trans"
|
|
#f
|
|
,(lambda ()
|
|
(when *target*
|
|
(set-vector! (-> *target* control trans) 0.0 (meters 40) 0.0 1.0)
|
|
(vector-zero! (-> *target* control transv))
|
|
(quaternion-identity! (-> *target* control quat))
|
|
(quaternion-identity! (-> *target* control quat-for-control))
|
|
(quaternion-identity! (-> *target* control dir-targ)))))
|
|
(menu "Mode"
|
|
(function "normal" #f ,(lambda () (send-event *target* 'end-mode)))
|
|
(function "racing" #f ,(lambda () (send-event *target* 'change-mode 'racing #f)))
|
|
(function "snowball" #f ,(lambda () (send-event *target* 'change-mode 'snowball #f))))
|
|
(flag "Slow Frame Rate" *slow-frame-rate* dm-boolean-toggle-pick-func)
|
|
(function "Print Pos"
|
|
#f
|
|
,(lambda ()
|
|
(let ((pos (target-pos 0))) (format #t "~6,,2m ~6,,2m ~6,,2m~%" (-> pos x) (-> pos y) (-> pos z)))
|
|
0
|
|
(none)))
|
|
(function "Save Continue" #f ,(lambda () (if *target* (trsq->continue-point (-> *target* control))) (none))))))
|
|
(debug-menu-append-item menu (debug-menu-make-camera-menu context))
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "Subdiv"
|
|
(flag "Textured" 0 dm-subdiv-draw-func)
|
|
(flag "Outline" 1 dm-subdiv-draw-func)
|
|
(flag "Gouraud" 2 dm-subdiv-draw-func)
|
|
(flag "Hack" 3 dm-subdiv-draw-func))))
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "Ocean Subdiv"
|
|
(flag "Textured" 0 dm-ocean-subdiv-draw-func)
|
|
(flag "Outline" 1 dm-ocean-subdiv-draw-func)
|
|
(flag "Gouraud" 2 dm-ocean-subdiv-draw-func))))
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "Time of day"
|
|
(flag "7am sunrise" 0 dm-time-of-day-func)
|
|
(flag "9am morning" 1 dm-time-of-day-func)
|
|
(flag "12pm noon" 2 dm-time-of-day-func)
|
|
(flag "3pm afternoon" 3 dm-time-of-day-func)
|
|
(flag "6pm sunset" 4 dm-time-of-day-func)
|
|
(flag "7pm twilight" 5 dm-time-of-day-func)
|
|
(flag "11pm evening" 6 dm-time-of-day-func)
|
|
(flag "4am green sun" 7 dm-time-of-day-func)
|
|
(flag "on" 8 dm-time-of-day-func)
|
|
(flag "Effects" *time-of-day-effects* dm-boolean-toggle-pick-func)
|
|
(flag "Fast" *time-of-day-fast* dm-time-of-day-func2))))
|
|
(debug-menu-append-item menu
|
|
(debug-menu-make-from-template context
|
|
'(menu "Sound"
|
|
(flag "Effect Debug" *debug-effect-control* dm-boolean-toggle-pick-func)
|
|
(flag "Amb Snd Marks" *display-ambient-sound-marks* dm-boolean-toggle-pick-func)
|
|
(flag "Amb Snd Class" *ambient-sound-class* dm-boolean-toggle-pick-func)
|
|
(flag "Amb Spheres" *execute-ambients* dm-boolean-toggle-pick-func)
|
|
(flag "Sound channels" *display-iop-info* dm-boolean-toggle-pick-func)
|
|
(function "List Sounds" #f ,(lambda () (list-sounds))))))
|
|
(debug-menu-append-item menu (debug-menu-make-shader-menu context))
|
|
(debug-menu-append-item menu (debug-menu-make-instance-menu context))
|
|
(debug-menu-append-item menu (debug-menu-make-task-menu context)))
|
|
context)
|
|
|
|
(define *popup-menu-context* (new 'debug 'debug-menu-context))
|
|
|
|
(defun popup-menu-context-make-default-menus ((context debug-menu-context))
|
|
"Build the popup menu into context: the few entries reachable by holding L3 on the pause screen."
|
|
(debug-menu-make-from-template context
|
|
'(main-menu "Popup"
|
|
(flag "Cam 1" pad-1 dm-cam-externalize)
|
|
(flag "Target"
|
|
#f
|
|
,(lambda ((id int) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(if *target* (stop 'debug) (start 'debug (get-or-create-continue! *game-info*))))
|
|
*target*))
|
|
(flag "Game"
|
|
#f
|
|
,(lambda ((id int) (msg debug-menu-msg))
|
|
(when (= msg (debug-menu-msg press))
|
|
(let ((mode (-> *game-info* mode)))
|
|
(set! (-> *game-info* mode)
|
|
(cond
|
|
((= mode 'play) 'debug)
|
|
((= mode 'debug) 'play)
|
|
(else (-> *game-info* mode))))))
|
|
(= (-> *game-info* mode) 'play)))
|
|
(function "Clean"
|
|
#f
|
|
,(lambda ((id int) (msg debug-menu-msg))
|
|
(if (time-of-day-setup #f) (time-of-day-setup #t))
|
|
(set! *display-entity-errors* #f)
|
|
(set! *display-profile* #f)
|
|
(set! *display-actor-marks* #f)
|
|
#f))
|
|
(flag "Stats" *stats-target* dm-boolean-toggle-pick-func)
|
|
(function "Reset" #f ,(lambda () (reset-actors 'debug) (none)))))
|
|
context)
|
|
|
|
(debug-menu-context-make-default-menus *debug-menu-context*)
|
|
|
|
(popup-menu-context-make-default-menus *popup-menu-context*)
|
|
|
|
(defun menu-respond-to-pause ()
|
|
"Called while the pause screen is up. Activates the popup menu when L3 is held and the main menu
|
|
otherwise, and deactivates both once the game is no longer paused."
|
|
(case *master-mode*
|
|
(('menu)
|
|
(if (cpad-hold? 0 l3)
|
|
(debug-menu-context-send-msg *popup-menu-context* (debug-menu-msg activate) (debug-menu-dest activation))
|
|
(debug-menu-context-send-msg *debug-menu-context* (debug-menu-msg activate) (debug-menu-dest activation))))
|
|
(else
|
|
(debug-menu-context-send-msg *debug-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation))
|
|
(debug-menu-context-send-msg *popup-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation))))
|
|
#f)
|
|
|
|
(defun *menu-hook* ()
|
|
"Per-frame entry point for both debug menu contexts."
|
|
(debug-menus-handler *debug-menu-context*)
|
|
(debug-menus-handler *popup-menu-context*))
|