Files
jak-project/goal_src/jak1/engine/debug/part-tester.gc
T
ManDude 324def1303 split new pc features in some files into their own code files + address some old issues + ripple graphics improvements (#2216)
Moves PC-specific entity and debug menu things to `entity-debug.gc` and
`default-menu-pc.gc` respectively and makes `(declare-file (debug))`
work as it should (no need to wrap the entire file in `(when
*debug-segment*` now!).

Also changes the DGO descriptor format so that it's less verbose. It
might break custom levels, but the format change is very simple so it
should not be difficult for anyone to update to the new format. Sadly,
you lose the completely useless ability to use DGO object names that
don't match the source file name. The horror!

I've also gone ahead and expanded the force envmap option to also force
the ripple effect to be active. I did not notice any performance or
visual drawbacks from this. Gets rid of some distracting LOD and some
water pools appearing super flat (and pitch back for dark eco).

Fixes #1424
2023-02-13 21:39:14 +00:00

125 lines
3.7 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: part-tester.gc
;; name in dgo: part-tester
;; dgos: GAME, ENGINE
(#when PC_PORT
(define *part-tester-id* 105)
)
;; DECOMP BEGINS
;; this file is debug only
(declare-file (debug))
(defpartgroup group-part-tester :id 105 :bounds (static-bspherem 0 0 0 1) :parts ((sp-item 56) (sp-item 57)))
(deftype part-tester (process)
((root trsqv :offset-assert 112)
(part sparticle-launch-control :offset-assert 116)
(old-group sparticle-launch-group :offset-assert 120)
)
:heap-base #x100
:method-count-assert 14
:size-assert #x7c
:flag-assert #xe0100007c
)
(define-extern *part-tester* part-tester)
(define *part-tester-name* (the-as string #f))
(defmethod deactivate part-tester ((obj part-tester))
(if (nonzero? (-> obj part))
(kill-and-free-particles (-> obj part))
)
((method-of-type process deactivate) obj)
(none)
)
(defstate part-tester-idle (part-tester)
:code (behavior ()
(loop
(let ((gp-0 (entity-by-name *part-tester-name*)))
(when gp-0
(let ((s5-0 (-> gp-0 extra process)))
(if (and s5-0 (type-type? (-> s5-0 type) process-drawable) (nonzero? (-> (the-as process-drawable s5-0) root)))
(set! (-> self root trans quad) (-> (the-as process-drawable s5-0) root trans quad))
(set! (-> self root trans quad) (-> gp-0 extra trans quad))
)
)
)
)
(add-debug-x
#t
(bucket-id debug-no-zbuf)
(-> self root trans)
(the-as rgba (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80))
)
;; change this line to change the particle group to test
;; notes:
;; - particles that use aux list won't work (warp parts)
;; - some particles may have callbacks that won't work yet
(let ((gp-1 (-> *part-group-id-table* 105)))
(#when PC_PORT
(if (nonzero? (-> *part-group-id-table* *part-tester-id*))
(set! gp-1 (-> *part-group-id-table* *part-tester-id*))
)
)
(let ((s5-1 (-> self root trans)))
(when (!= gp-1 (-> self old-group))
(when (nonzero? (-> self part))
(kill-and-free-particles (-> self part))
(set! (-> self heap-cur) (&-> (-> self part) type))
)
(set! (-> self part) (create-launch-control gp-1 self))
)
(if (nonzero? (-> self part))
(spawn (-> self part) (cond
((logtest? (-> gp-1 flags) (sp-group-flag screen-space))
*zero-vector*
)
(else
(empty)
s5-1
)
)
)
)
)
(set! (-> self old-group) gp-1)
)
(suspend)
)
(none)
)
)
(defbehavior part-tester-init-by-other process-drawable ((arg0 vector))
(set! (-> self root) (new 'process 'trsqv))
(set! (-> self root trans quad) (-> arg0 quad))
(set! *part-tester* (the-as part-tester (process->ppointer self)))
(go part-tester-idle)
(none)
)
(define-perm *debug-part-dead-pool* dead-pool (new 'debug 'dead-pool 1 #x10000 '*debug-part-dead-pool*))
(defun start-part ()
(kill-by-type part-tester *active-pool*)
(process-spawn
part-tester
(if *anim-tester*
(-> *anim-tester* 0 root trans)
(target-pos 0)
)
:from *debug-part-dead-pool*
)
(none)
)