jak-project/goal_src/jak3/engine/common-obs/debris.gc
Hat Kid dacb704ef6
decomp3: more engine stuff, fix ja macro detection for jak 2/3, unmerged let matcher, part-tracker-spawn macro (#3436)
- `aligner`
- `effect-control`
- `pov-camera`
- `powerups`
- `los-control-h`
- `airlock`
- `water-anim`
- `blocking-plane`
- `proc-focusable-spawner`
- `idle-control`
- `enemy-h`
- `nav-enemy-h`
- `enemy`
- `enemy-states`
- `particle-curves`
- `base-plat`
- `plat`
- `bouncer`
- `elevator`
- `rigid-body`
- `rigid-body-queue`
- `process-taskable`
- `scene-actor`
- `warp-gate`
- `guard-projectile`
- `metalhead-projectile`
- `los-control`
- `joint-exploder`
- `ragdoll-test`
- `debris`
- `shield-sphere`
- `text`
- `target-launch`
2024-03-30 10:28:02 -04:00

600 lines
24 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: debris.gc
;; name in dgo: debris
;; dgos: GAME
;; DECOMP BEGINS
(deftype debris-static-joint-params (structure)
((parent-joint-index int16)
(group string)
(offset vector)
)
)
(deftype debris-static-params (basic)
((joints (array debris-static-joint-params))
(collide-spec collide-spec)
(sound-hit sound-name)
(art-level symbol)
)
)
(deftype debris (basic)
((root transformq :inline)
(node-list cspace-array)
(draw draw-control)
(duration float)
(hit-xz-reaction float)
(hit-y-reaction float)
(prev-pos vector :inline)
(gravity float)
(rot-axis vector :inline)
(rot-angle float)
(transv vector :inline)
(time-fade-out time-frame)
(params debris-static-params)
)
)
(deftype debris-box (structure)
((start uint32)
(num uint32)
(bbox bounding-box :inline)
)
)
(deftype debris-group (process)
((dead-debris-num int32)
(debris-num int32)
(debris (array debris))
(max-probe-width float)
(state-time time-frame)
(num-boxes uint32)
(boxes debris-box 16 :inline)
)
(:state-methods
idle
)
(:methods
(do-collision (_type_ int) none)
(update-box! (_type_ int) none)
)
)
(deftype debris-tuning (structure)
((explosion uint64)
(duration time-frame)
(gravity float)
(rot-speed float)
(bounds-inflate float)
(max-probe-width float)
(max-probe-height float)
(max-probe-depth float)
(fountain-rand-transv-lo vector :inline)
(fountain-rand-transv-hi vector :inline)
(away-from-focal-pt vector :inline :overlay-at fountain-rand-transv-lo)
(away-from-rand-transv-xz-lo float :overlay-at (-> fountain-rand-transv-hi data 0))
(away-from-rand-transv-xz-hi float :overlay-at (-> fountain-rand-transv-hi data 1))
(away-from-rand-transv-y-lo float :overlay-at (-> fountain-rand-transv-hi data 2))
(away-from-rand-transv-y-hi float :overlay-at (-> fountain-rand-transv-hi data 3))
(hit-xz-reaction float)
(hit-y-reaction float)
(scale-rand-lo float)
(scale-rand-hi float)
)
(:methods
(new (symbol type uint) _type_)
)
)
;; WARN: Return type mismatch structure vs debris-tuning.
(defmethod new debris-tuning ((allocation symbol) (type-to-make type) (arg0 uint))
(let ((t9-0 (method-of-type structure new))
(v1-1 type-to-make)
)
(-> type-to-make size)
(let ((v0-0 (t9-0 allocation v1-1)))
(set! (-> (the-as debris-tuning v0-0) explosion) arg0)
(set! (-> (the-as debris-tuning v0-0) duration) (seconds 1))
(set! (-> (the-as debris-tuning v0-0) gravity) -286720.0)
(set! (-> (the-as debris-tuning v0-0) rot-speed) 180.0)
(set! (-> (the-as debris-tuning v0-0) bounds-inflate) 16384.0)
(set! (-> (the-as debris-tuning v0-0) max-probe-width) 40960.0)
(set! (-> (the-as debris-tuning v0-0) max-probe-height) 24576.0)
(set! (-> (the-as debris-tuning v0-0) max-probe-depth) 20480.0)
(set! (-> (the-as debris-tuning v0-0) hit-xz-reaction) 0.75)
(set! (-> (the-as debris-tuning v0-0) hit-y-reaction) 0.7)
(set! (-> (the-as debris-tuning v0-0) scale-rand-lo) 0.8)
(set! (-> (the-as debris-tuning v0-0) scale-rand-hi) 2.0)
(cond
((zero? arg0)
(set-vector! (-> (the-as debris-tuning v0-0) fountain-rand-transv-lo) -81920.0 20480.0 -81920.0 1.0)
(set-vector! (-> (the-as debris-tuning v0-0) fountain-rand-transv-hi) 81920.0 61440.0 81920.0 1.0)
)
((= arg0 1)
(vector-reset! (-> (the-as debris-tuning v0-0) fountain-rand-transv-lo))
(set! (-> (the-as debris-tuning v0-0) fountain-rand-transv-hi x) 49152.0)
(set! (-> (the-as debris-tuning v0-0) fountain-rand-transv-hi y) 163840.0)
(set! (-> (the-as debris-tuning v0-0) fountain-rand-transv-hi z) 20480.0)
(set! (-> (the-as debris-tuning v0-0) fountain-rand-transv-hi w) 61440.0)
)
)
(the-as debris-tuning v0-0)
)
)
)
(defmethod update-box! ((this debris-group) (idx int))
(let ((debris-box (-> this boxes idx)))
(dotimes (i (the-as int (-> debris-box num)))
(let ((debris (-> this debris (+ i (-> debris-box start)))))
(if (zero? i)
(set-to-point! (-> debris-box bbox) (the-as vector (-> debris root)))
(add-point! (-> debris-box bbox) (the-as vector (-> debris root)))
)
)
)
)
0
(none)
)
(defmethod do-collision ((this debris-group) (idx int))
(local-vars
(sv-80 (function sound-name sound-id int int int sound-group object sound-id :behavior process-drawable))
(name sound-name)
)
(rlet ((acc :class vf)
(vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
(vf7 :class vf)
)
(init-vf0-vector)
(let* ((debris-box (-> this boxes idx))
(box-num (-> debris-box num))
(box-start (-> debris-box start))
(bbox (-> debris-box bbox))
)
(when (> box-num 0)
(let ((cquery (new 'static 'collide-query)))
(let ((debris-start (-> this debris box-start)))
(let ((a3-0 (-> cquery bbox))
(a1-2 (-> bbox min))
(a2-0 (new 'stack-no-clear 'vector))
)
(set! (-> a2-0 x) 4096.0)
(set! (-> a2-0 y) 4096.0)
(set! (-> a2-0 z) 4096.0)
(set! (-> a2-0 w) 1.0)
(vector-! (the-as vector a3-0) a1-2 a2-0)
)
(let ((a1-3 (-> cquery bbox max))
(a0-2 (-> bbox max))
(a2-1 (new 'stack-no-clear 'vector))
)
(set! (-> a2-1 x) 4096.0)
(set! (-> a2-1 y) 4096.0)
(set! (-> a2-1 z) 4096.0)
(set! (-> a2-1 w) 1.0)
(vector+! a1-3 a0-2 a2-1)
)
(set! (-> cquery collide-with) (-> debris-start params collide-spec))
)
(set! (-> cquery ignore-process0) #f)
(set! (-> cquery ignore-process1) #f)
(set! (-> cquery ignore-pat)
(new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1 :board #x1)
)
(set! (-> cquery action-mask) (collide-action solid))
(fill-using-bounding-box *collide-cache* cquery)
(dotimes (s2-0 (the-as int box-num))
(let ((s1-0 (-> this debris (+ s2-0 box-start))))
(when (not (logtest? (-> this debris (+ s2-0 box-start) draw status) (draw-control-status no-draw)))
(let ((f0-9 (* (-> s1-0 gravity) (seconds-per-frame)))
(s0-0 (new 'stack-no-clear 'quaternion))
)
(set! (-> s1-0 prev-pos quad) (-> s1-0 root trans quad))
(+! (-> s1-0 transv y) f0-9)
(vector-v+! (the-as vector (-> s1-0 root)) (the-as vector (-> s1-0 root)) (-> s1-0 transv))
(quaternion-vector-angle! s0-0 (-> s1-0 rot-axis) (* (-> s1-0 rot-angle) (seconds-per-frame)))
(quaternion*! (-> s1-0 root quat) (-> s1-0 root quat) s0-0)
)
(quaternion-normalize! (-> s1-0 root quat))
(set! (-> s1-0 rot-angle) (- (-> s1-0 rot-angle) (* (seconds-per-frame) (-> s1-0 rot-angle))))
(when (nonzero? (-> s1-0 params collide-spec))
(let ((s0-1 (new 'stack-no-clear 'vector)))
(vector-! (-> cquery move-dist) (the-as vector (-> s1-0 root)) (-> s1-0 prev-pos))
(set! (-> cquery start-pos quad) (-> s1-0 prev-pos quad))
(let ((v1-34 cquery))
(set! (-> v1-34 radius) 2048.0)
(set! (-> v1-34 collide-with) (-> s1-0 params collide-spec))
(set! (-> v1-34 ignore-process0) #f)
(set! (-> v1-34 ignore-process1) #f)
(set! (-> v1-34 ignore-pat)
(new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1 :board #x1)
)
(set! (-> v1-34 action-mask) (collide-action solid))
)
(let ((f0-16 (probe-using-line-sphere *collide-cache* cquery)))
(when (>= f0-16 0.0)
(let ((a1-12 s0-1))
(let ((v1-37 (-> cquery start-pos)))
(let ((a0-21 (-> cquery move-dist)))
(let ((a2-5 f0-16))
(.mov vf7 a2-5)
)
(.lvf vf5 (&-> a0-21 quad))
)
(.lvf vf4 (&-> v1-37 quad))
)
(.add.x.vf vf6 vf0 vf0 :mask #b1000)
(.mul.x.vf acc vf5 vf7 :mask #b111)
(.add.mul.w.vf vf6 vf4 vf0 acc :mask #b111)
(.svf (&-> a1-12 quad) vf6)
)
(let* ((v1-38 (-> s1-0 transv))
(f30-0 (sqrtf (+ (* (-> v1-38 x) (-> v1-38 x)) (* (-> v1-38 z) (-> v1-38 z)))))
)
(let ((f28-0 (vector-length (-> s1-0 transv))))
(when (< (-> s1-0 transv y) -61440.0)
(set! sv-80 sound-play-by-name)
(set! name (-> s1-0 params sound-hit))
(let ((id (new-sound-id))
(a2-6 1024)
(a3-6 0)
(t0-4 0)
(t1-0 0)
(t2-0 (-> s1-0 root))
)
(sv-80 name id a2-6 a3-6 t0-4 (the-as sound-group t1-0) t2-0)
)
)
(vector-reflect! (-> s1-0 transv) (-> s1-0 transv) (-> cquery best-other-tri normal))
(vector-reflect! (-> s1-0 rot-axis) (-> s1-0 rot-axis) (-> cquery best-other-tri normal))
(set! (-> s1-0 rot-angle) f28-0)
)
(let ((f28-1 (-> s1-0 transv y)))
(vector-xz-normalize! (-> s1-0 transv) (* f30-0 (-> s1-0 hit-xz-reaction)))
(set! (-> s1-0 transv y) (* f28-1 (-> s1-0 hit-y-reaction)))
)
)
(+! (-> s0-1 y) (* 40.96 (-> cquery best-other-tri normal y)))
(set! (-> s0-1 w) 1.0)
(set! (-> s1-0 root trans quad) (-> s0-1 quad))
)
)
)
)
)
)
)
)
)
)
0
(none)
)
)
(defstate idle (debris-group)
:virtual #t
:enter (behavior ()
(set-time! (-> self state-time))
)
:trans (behavior ()
(set! (-> self dead-debris-num) (-> self debris-num))
(dotimes (i (-> self debris-num))
(let ((debris (-> self debris i))
(draw-ctrl (-> self debris i draw))
)
(matrix<-transformq+trans!
(the-as matrix (-> draw-ctrl skeleton bones 3))
(-> debris root)
(-> draw-ctrl skeleton bones 0 transform trans)
)
(logclear! (-> draw-ctrl status) (draw-control-status no-draw-temp uninited))
(vector+! (-> draw-ctrl origin) (-> draw-ctrl skeleton bones 3 transform trans) (-> draw-ctrl bounds))
(set! (-> draw-ctrl origin w) (-> draw-ctrl bounds w))
(cond
((zero? (-> debris time-fade-out))
(if (or (< (vector-length (-> debris transv)) 4096.0)
(time-elapsed? (-> self state-time) (the int (-> debris duration)))
)
(set-time! (-> debris time-fade-out))
)
)
((time-elapsed? (-> debris time-fade-out) (seconds 0.5))
(logior! (-> draw-ctrl status) (draw-control-status no-draw))
(+! (-> self dead-debris-num) -1)
)
(else
(logior! (-> draw-ctrl status) (draw-control-status force-fade))
(set! (-> draw-ctrl force-fade)
(the-as uint (the int (- 128.0 (* 0.85333335 (the float (- (current-time) (-> debris time-fade-out)))))))
)
)
)
)
)
(if (zero? (-> self dead-debris-num))
(deactivate self)
)
(dotimes (ii (the-as int (-> self num-boxes)))
(let* ((debris-box (-> self boxes ii))
(box-num (-> debris-box num))
(box-start (-> debris-box start))
(bbox (-> debris-box bbox))
(s2-0 0)
)
(update-box! self ii)
(if (< (- (-> bbox max data s2-0) (-> bbox min data s2-0)) (- (-> bbox max y) (-> bbox min y)))
(set! s2-0 1)
)
(if (< (- (-> bbox max data s2-0) (-> bbox min data s2-0)) (- (-> bbox max z) (-> bbox min z)))
(set! s2-0 2)
)
(when (and (< (-> self max-probe-width) (- (-> debris-box bbox max data s2-0) (-> bbox min data s2-0)))
(< (-> self num-boxes) (the-as uint 15))
)
0.0
(let ((a1-3 (new 'static 'boxed-array :type debris :length 0 :allocated-length 32))
(a0-12 0)
(v1-72 0)
(a2-4 (-> self boxes (-> self num-boxes)))
)
(let ((f0-14 (* 0.5 (+ (-> debris-box bbox min data s2-0) (-> debris-box bbox max data s2-0)))))
(dotimes (a3-6 (the-as int box-num))
(let ((t0-4 (-> self debris (+ a3-6 (-> debris-box start)))))
(cond
((< (-> t0-4 root trans data s2-0) f0-14)
(set! (-> self debris (+ a0-12 box-start)) (-> self debris (+ a3-6 box-start)))
(+! a0-12 1)
)
(else
(set! (-> a1-3 v1-72) (-> self debris (+ a3-6 box-start)))
(+! v1-72 1)
)
)
)
)
)
(dotimes (a3-9 v1-72)
(set! (-> self debris (+ a0-12 box-start a3-9)) (-> a1-3 a3-9))
)
(set! (-> debris-box num) (the-as uint a0-12))
(set! (-> a2-4 start) (+ box-start a0-12))
(set! (-> a2-4 num) (the-as uint v1-72))
)
(update-box! self ii)
(update-box! self (the-as int (-> self num-boxes)))
(+! (-> self num-boxes) 1)
)
)
)
(dotimes (gp-2 (the-as int (-> self num-boxes)))
(do-collision self gp-2)
)
)
:code sleep-code
)
;; WARN: Return type mismatch process vs debris-group.
(defmethod relocate ((this debris-group) (offset int))
(dotimes (v1-0 (-> this debris length))
(if (nonzero? (-> this debris v1-0 node-list))
(&+! (-> this debris v1-0 node-list) offset)
)
(if (nonzero? (-> this debris v1-0 draw))
(&+! (-> this debris v1-0 draw) offset)
)
(if (nonzero? (-> this debris v1-0))
(&+! (-> this debris v1-0) offset)
)
)
(if (nonzero? (-> this debris))
(&+! (-> this debris) offset)
)
(the-as debris-group ((method-of-type process relocate) this offset))
)
(defbehavior debris-group-init-by-other debris-group ((tuning debris-tuning) (params debris-static-params) (pdraw process-drawable))
(local-vars (tuning-scale vector) (debris-scale vector) (sv-80 vector) (sv-96 vector) (sv-112 vector))
(rlet ((vf0 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
)
(init-vf0-vector)
(stack-size-set! (-> self main-thread) 512)
(set! (-> self debris-num) (-> params joints length))
(set! (-> self debris) (new 'process 'boxed-array debris (-> self debris-num)))
(set! (-> self debris length) (-> self debris allocated-length))
(dotimes (i (-> params joints length))
(set! (-> self debris i) (new 'process 'debris))
(let ((skel (art-group-get-by-name *level* (-> params joints i group) (the-as (pointer level) #f)))
(debris (-> self debris i))
)
(cond
((and skel (nonzero? skel))
(set! (-> debris params) params)
(let ((joint-transform (-> pdraw node-list data (-> params joints i parent-joint-index) bone transform)))
(matrix->quaternion (-> debris root quat) joint-transform)
(matrix->trans joint-transform (the-as vector (-> debris root)))
(set! (-> debris root scale quad) (-> pdraw root scale quad))
(if (nonzero? (-> params joints i offset))
(vector-matrix*! (the-as vector (-> debris root)) (-> params joints i offset) joint-transform)
)
)
(set! debris-scale (-> debris root scale))
(let ((s0-1 (-> debris root scale)))
(set! tuning-scale (new 'stack-no-clear 'vector))
(set! (-> tuning-scale x) (rand-vu-float-range (-> tuning scale-rand-lo) (-> tuning scale-rand-hi)))
(set! (-> tuning-scale y) (rand-vu-float-range (-> tuning scale-rand-lo) (-> tuning scale-rand-hi)))
(set! (-> tuning-scale z) (rand-vu-float-range (-> tuning scale-rand-lo) (-> tuning scale-rand-hi)))
(set! (-> tuning-scale w) 1.0)
(.lvf vf4 (&-> s0-1 quad))
)
(.lvf vf5 (&-> tuning-scale quad))
(.add.x.vf vf6 vf0 vf0 :mask #b1000)
(.mul.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> debris-scale quad) vf6)
(case (-> tuning explosion)
((1)
(vector-! (-> debris transv) (the-as vector (-> debris root)) (-> tuning fountain-rand-transv-lo))
(let ((s0-2 vector-normalize!))
(set! sv-80 (-> debris transv))
(let ((a1-17 (rand-vu-float-range (-> tuning fountain-rand-transv-hi x) (-> tuning fountain-rand-transv-hi y))))
(s0-2 sv-80 a1-17)
)
)
(+! (-> debris transv y)
(rand-vu-float-range (-> tuning fountain-rand-transv-hi z) (-> tuning fountain-rand-transv-hi w))
)
(set! (-> debris transv w) 1.0)
)
(else
(set! sv-96 (-> tuning fountain-rand-transv-lo))
(set! sv-112 (-> tuning fountain-rand-transv-hi))
(set-vector!
(-> debris transv)
(rand-vu-float-range (-> sv-96 x) (-> sv-112 x))
(rand-vu-float-range (-> sv-96 y) (-> sv-112 y))
(rand-vu-float-range (-> sv-96 z) (-> sv-112 z))
1.0
)
)
)
(let ((s0-5 (new 'stack-no-clear 'vector)))
(rand-vu-sphere-point-uniform! s0-5 1.0)
(vector-normalize! s0-5 1.0)
(set! (-> debris rot-axis quad) (-> s0-5 quad))
)
(set! (-> debris rot-angle) (* 182.04445 (-> tuning rot-speed)))
(set! (-> debris duration) (the float (-> tuning duration)))
(set! (-> debris hit-xz-reaction) (-> tuning hit-xz-reaction))
(set! (-> debris hit-y-reaction) (-> tuning hit-y-reaction))
(set! (-> debris gravity) (-> tuning gravity))
(set! (-> debris time-fade-out) 0)
(let ((draw (skeleton-group->draw-control
(the-as process-drawable self)
(the-as skeleton-group skel)
(&-> debris node-list)
)
)
)
(set! (-> debris draw) draw)
(set! (-> draw skeleton bones 0 transform trans quad) (-> *null-vector* quad))
)
)
(else
)
)
)
)
(set! (-> self max-probe-width) (-> tuning max-probe-width))
(set! (-> self num-boxes) (the-as uint 1))
(set! (-> self boxes 0 start) (the-as uint 0))
(set! (-> self boxes 0 num) (the-as uint (-> self debris-num)))
(go-virtual idle)
)
)
;; WARN: Return type mismatch (pointer process) vs (pointer debris-group).
(defun debris-spawn ((arg0 process-drawable) (arg1 debris-tuning) (arg2 debris-static-params) (arg3 process-drawable))
(if (not arg3)
(set! arg3 arg0)
)
(process-spawn debris-group arg1 arg2 arg3 :name "debris-group" :to arg0 :stack-size #x8000)
)
(defskelgroup skel-kg-debris-a kg-debris kg-debris-a-lod0-jg -1
((kg-debris-a-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-kg-debris-b kg-debris kg-debris-b-lod0-jg -1
((kg-debris-b-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-kg-debris-c kg-debris kg-debris-c-lod0-jg -1
((kg-debris-c-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-kg-debris-d kg-debris kg-debris-d-lod0-jg -1
((kg-debris-d-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-neo-debris-a neo-debris neo-debris-a-lod0-jg -1
((neo-debris-a-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-neo-debris-b neo-debris neo-debris-b-lod0-jg -1
((neo-debris-b-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-neo-debris-c neo-debris neo-debris-c-lod0-jg -1
((neo-debris-c-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-neo-debris-d neo-debris neo-debris-d-lod0-jg -1
((neo-debris-d-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-v-marauder-debris-ring interceptor interceptor-debris-ring-lod0-jg -1
((interceptor-debris-ring-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-v-marauder-debris-nut interceptor interceptor-debris-nut-lod0-jg -1
((interceptor-debris-nut-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-v-marauder-debris-rod interceptor interceptor-debris-rod-lod0-jg -1
((interceptor-debris-rod-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-v-marauder-debris-panel interceptor interceptor-debris-panel-lod0-jg -1
((interceptor-debris-panel-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-dm-debris-a dm-debris dm-debris-a-lod0-jg -1
((dm-debris-a-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-dm-debris-b dm-debris dm-debris-b-lod0-jg -1
((dm-debris-b-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-dm-debris-c dm-debris dm-debris-c-lod0-jg -1
((dm-debris-c-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)
(defskelgroup skel-dm-debris-d dm-debris dm-debris-d-lod0-jg -1
((dm-debris-d-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 2)
)