;;-*-Lisp-*-
(in-package goal)

;; name: volcano-part.gc
;; name in dgo: volcano-part
;; dgos: VOCA

;; DECOMP BEGINS

(defpartgroup group-volcano-embers
  :id 1386
  :flags (sp0)
  :bounds (static-bspherem 0 0 0 40)
  :parts ((sp-item 4596 :fade-after (meters 100) :falloff-to (meters 200) :flags (sp7)))
  )

(defpart 4596
  :init-specs ((:texture (motion-blur-part level-default-sprite))
    (:num 0.01 0.5)
    (:x (meters 0) (meters 20))
    (:y (meters 30) (meters 10))
    (:scale-x (meters 0.04) (meters 0.04))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 20.0 40.0)
    (:b 0.0)
    (:a 55.0 200.0)
    (:omega (degrees 0.045))
    (:accel-y (meters -0.00033333333) (meters -0.00066666666))
    (:timer (seconds 33.335))
    (:flags (sp-cpuinfo-flag-3 sp-cpuinfo-flag-14))
    (:func 'spt-func-part-volcano-embers)
    (:next-time (seconds 0.017))
    (:next-launcher 4597)
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpart 4597
  :init-specs ((:g 20.0 40.0)
    (:a 128.0 128.0)
    (:accel-x (meters -0.001) 1 (meters 0.002))
    (:accel-z (meters -0.001) 1 (meters 0.002))
    (:friction 0.93 0.03)
    (:next-time (seconds 0.067) (seconds 0.03))
    (:next-launcher 4597)
    )
  )

(defun spt-func-part-volcano-embers ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 sparticle-launchinfo))
  (sparticle-motion-blur arg0 arg1 (-> arg2 launchrot))
  (check-drop-group-center arg0 arg1 arg2)
  (none)
  )

(defpartgroup group-volcano-lantern-glow
  :id 1387
  :bounds (static-bspherem 0 0 0 8)
  :parts ((sp-item 4598 :fade-after (meters 120) :flags (sp6))
    (sp-item 4599 :fade-after (meters 120) :flags (sp6))
    (sp-item 4600 :fade-after (meters 120) :flags (sp6))
    )
  )

(defpart 4598
  :init-specs ((:texture (glow-hotdot level-default-sprite))
    (:num 1.0)
    (:scale-x (meters 2) (meters 0.1))
    (:rot-x (degrees 4.5))
    (:rot-z (degrees -17))
    (:scale-y :copy scale-x)
    (:r 128.0)
    (:g 128.0)
    (:b 80.0)
    (:a 70.0)
    (:omega (degrees 2715.75))
    (:timer (seconds 0.017))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
    (:userdata 1638.4)
    )
  )

(defpart 4599
  :init-specs ((:texture (glow-soft level-default-sprite))
    (:num 1.0)
    (:scale-x (meters 10) (meters 0.1))
    (:rot-x (degrees 9))
    (:rot-z (degrees -17))
    (:scale-y :copy scale-x)
    (:r 128.0)
    (:g 80.0)
    (:b 0.0)
    (:a 30.0 10.0)
    (:omega (degrees 2715.75))
    (:timer (seconds 0.017))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
    (:userdata 819.2)
    )
  )

(defpart 4600
  :init-specs ((:texture (ring level-default-sprite))
    (:num 1.0)
    (:scale-x (meters 3) (meters 0.1))
    (:rot-x (degrees 9))
    (:rot-z (degrees -17))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 128.0)
    (:b 0.0)
    (:a 2.0 1.0)
    (:omega (degrees 1815.7499))
    (:timer (seconds 0.017))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
    (:userdata 819.2)
    )
  )

(defpartgroup group-lava-shoot
  :id 1388
  :flags (sp4 sp6)
  :bounds (static-bspherem 0 -15 0 20)
  :parts ((sp-item 4601 :fade-after (meters 100) :falloff-to (meters 200) :flags (sp7)))
  )

(defpart 4601
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 1.0)
    (:x (meters -0.5) (meters 1))
    (:z (meters -0.5) (meters 1))
    (:scale-x (meters 1) (meters 1))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 60.0 60.0)
    (:b 0.0)
    (:a 128.0)
    (:vel-z (meters 0.026666667) (meters 0.006666667))
    (:scalevel-x (meters 0.000033333334))
    (:rotvel-z (degrees -0.033333335) (degrees 0.06666667))
    (:scalevel-y :copy scalevel-x)
    (:accel-y (meters -0.0023333333))
    (:timer (seconds 1.167))
    (:flags (sp-cpuinfo-flag-3 launch-along-z))
    (:conerot-x (degrees 0) (degrees 10))
    (:rotate-z (degrees 0) (degrees 3600))
    )
  )

(defpartgroup group-volcano-lava-ripples
  :id 1389
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 6)
  :parts ((sp-item 4602 :fade-after (meters 100) :falloff-to (meters 200) :flags (is-3d sp7))
    (sp-item 4603 :fade-after (meters 100) :falloff-to (meters 200) :flags (is-3d sp7))
    )
  )

(defpart 4602
  :init-specs ((:texture (laser-hit-rim level-default-sprite))
    (:num 0.01 0.01)
    (:y (meters 0.1))
    (:scale-x (meters 3))
    (:rot-y (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 80.0 80.0)
    (:b 0.0)
    (:a 255.0)
    (:scalevel-x (meters 0.005) (meters 0.0016666667))
    (:scalevel-y :copy scalevel-x)
    (:timer (seconds 6.667))
    (:flags (left-multiply-quat))
    (:next-time (seconds 3.335))
    (:next-launcher 4604)
    (:rotate-y (degrees 0))
    )
  )

(defpart 4604
  :init-specs ((:fade-a -0.256))
  )

(defpart 4603
  :init-specs ((:texture (laser-hit-rim level-default-sprite))
    (:num 0.01 0.01)
    (:y (meters 0.1))
    (:scale-x (meters 3))
    (:rot-y (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 40.0)
    (:g 10.0)
    (:b 0.0)
    (:a 128.0)
    (:scalevel-x (meters 0.0033333334) (meters 0.0016666667))
    (:scalevel-y :copy scalevel-x)
    (:timer (seconds 6.667))
    (:flags (left-multiply-quat))
    (:next-time (seconds 5))
    (:next-launcher 4604)
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-volcano-lava-bubbles
  :id 1390
  :flags (sp0 sp4 sp8)
  :bounds (static-bspherem 0 0 0 7)
  :parts ((sp-item 4605 :fade-after (meters 100) :falloff-to (meters 200)))
  )

(defpart 4605
  :init-specs ((:texture (lava-bubble volcanoa-sprite))
    (:num 0.01 0.04)
    (:x (meters 0) (meters 6))
    (:y (meters 0.25))
    (:scale-x (meters 0.1))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 100.0 40.0)
    (:b 0.0)
    (:a 128.0)
    (:scalevel-x (meters 0.0013333333) (meters 0.001))
    (:scalevel-y :copy scalevel-x)
    (:timer (seconds 1) (seconds 1.997))
    (:flags (sp-cpuinfo-flag-3))
    (:func 'spt-func-birth-on-pop)
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

;; WARN: Return type mismatch (pointer process) vs none.
(defun spt-func-birth-on-pop ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 sparticle-launchinfo))
  (when (zero? (-> arg1 timer))
    (cond
      ((logtest? (-> group-volcano-lava-splash flags) (sp-group-flag sp13))
       (let ((v1-6 (-> *launch-matrix* trans))
             (a0-1 (new 'stack-no-clear 'vector))
             )
         (set! (-> a0-1 x) (-> arg2 launchrot x))
         (set! (-> a0-1 y) (-> arg2 launchrot y))
         (set! (-> a0-1 z) (-> arg2 launchrot z))
         (set! (-> a0-1 w) 1.0)
         (vector-copy! v1-6 a0-1)
         )
       (part-tracker-spawn part-tracker-subsampler :to *entity-pool* :group group-volcano-lava-splash)
       )
      (else
        (let ((v1-19 (-> *launch-matrix* trans))
              (a0-6 (new 'stack-no-clear 'vector))
              )
          (set! (-> a0-6 x) (-> arg2 launchrot x))
          (set! (-> a0-6 y) (-> arg2 launchrot y))
          (set! (-> a0-6 z) (-> arg2 launchrot z))
          (set! (-> a0-6 w) 1.0)
          (vector-copy! v1-19 a0-6)
          )
        (part-tracker-spawn part-tracker :to *entity-pool* :group group-volcano-lava-splash)
        )
      )
    )
  (none)
  )

(defpartgroup group-volcano-lava-splash
  :id 1391
  :linger-duration (seconds 0)
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 7)
  :parts ((sp-item 4606 :fade-after (meters 100) :falloff-to (meters 200) :flags (sp7) :period (seconds 20) :length (seconds 0.035))
    )
  )

(defpart 4606
  :init-specs ((:texture (lava-drop-01 volcanoa-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 10.0)
    (:x (meters -0.5) (meters 1))
    (:z (meters -0.5) (meters 1))
    (:scale-x (meters 0.1) (meters 0.5))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 60.0 60.0)
    (:b 0.0)
    (:a 128.0)
    (:vel-y (meters 0.0033333334) (meters 0.026666667))
    (:scalevel-x (meters 0.000033333334))
    (:rotvel-z (degrees -2) (degrees 4))
    (:scalevel-y :copy scalevel-x)
    (:accel-y (meters -0.001))
    (:timer (seconds 1.167))
    (:flags (sp-cpuinfo-flag-3 launch-along-z))
    (:userdata :data (new 'static 'boxed-array :type int32 5 1 0 -2145386496 -2145386240 -2145385984 -2145385728))
    (:func 'check-drop-group-center)
    (:conerot-x (degrees 0) (degrees 50.000004))
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpartgroup group-lavawave-falls
  :id 1392
  :flags (sp4 sp6)
  :bounds (static-bspherem 0 -15 0 20)
  :parts ((sp-item 4607 :fade-after (meters 100) :falloff-to (meters 200) :flags (sp7)))
  )

(defpart 4607
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 1.0 1.0)
    (:x (meters -2) (meters 4))
    (:y (meters -0.6))
    (:scale-x (meters 1.5) (meters 1.5))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 60.0 60.0)
    (:b 0.0)
    (:a 128.0)
    (:vel-y (meters 0.01) (meters 0.01))
    (:scalevel-x (meters 0.001))
    (:rotvel-z (degrees -0.13333334) (degrees 0.26666668))
    (:scalevel-y :copy scalevel-x)
    (:accel-y (meters -0.0016666667))
    (:timer (seconds 0.5))
    (:flags (launch-along-z))
    (:conerot-x (degrees 0) (degrees 10))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-volcano-lava-rocks-heat
  :id 1393
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 15)
  :parts ((sp-item 4608 :falloff-to (meters 100)))
  )

(defpart 4608
  :init-specs ((:num 1.0)
    (:x (meters 0) (meters 10))
    (:y (meters 0))
    (:rot-x 6)
    (:r 40960.0)
    (:g 20480.0)
    (:b 20480.0)
    (:vel-y (meters 0.016666668))
    (:fade-b -40.96)
    (:timer (seconds 0.335))
    (:flags (distort))
    (:next-time (seconds 0.167))
    (:next-launcher 4609)
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpart 4609
  :init-specs ((:fade-b 40.96))
  )

(defpartgroup group-steam-geyser-shoot
  :id 1394
  :flags (sp4 sp6)
  :bounds (static-bspherem 0 10 0 15)
  :parts ((sp-item 4610 :fade-after (meters 200) :falloff-to (meters 300) :flags (sp7)))
  )

(defpart 4610
  :init-specs ((:texture (dirtpuff01 level-default-sprite))
    (:num 1.0)
    (:x (meters 0) (meters 1))
    (:scale-x (meters 12))
    (:scale-y (meters 4))
    (:r 128.0 80.0)
    (:g :copy r)
    (:b :copy r)
    (:a 0.0)
    (:vel-y (meters 0.1) (meters 0.033333335))
    (:scalevel-x (meters -0.02) (meters -0.02))
    (:scalevel-y (meters 0.053333335))
    (:fade-a 0.32)
    (:friction 0.94)
    (:timer (seconds 1))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:func 'sparticle-2d-spline-align-instant)
    (:next-time (seconds 0.335))
    (:next-launcher 4611)
    (:launchrot-x (degrees -20) (degrees 40))
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpart 4611
  :init-specs ((:scalevel-x (meters -0.006666667))
    (:scalevel-y (meters 0.006666667))
    (:fade-a -0.10666667 -0.10666667)
    (:friction 0.9 0.04)
    )
  )

(defpartgroup group-lava-ball-spout
  :id 1395
  :flags (sp4 sp6)
  :bounds (static-bspherem 0 10 0 15)
  :parts ((sp-item 4612 :fade-after (meters 200) :falloff-to (meters 250) :flags (sp7)))
  )

(define *lava-particle-list*
  (new 'static 'boxed-array :type int32 -2145386496 -2145386240 -2145385984 -2145385728)
  )

(defun birth-func-texture-group-lava ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 sparticle-launchinfo))
  (particle-adgif-callback
    (-> arg1 adgif)
    (the-as
      texture-id
      (-> *lava-particle-list*
          (mod (the-as int (rand-uint31-gen *random-generator*)) (-> *lava-particle-list* length))
          )
      )
    )
  0
  (none)
  )

(defpart 4612
  :init-specs ((:texture (lava-drop-01 volcanoa-sprite))
    (:birth-func 'birth-func-texture-group-lava)
    (:num 1.0)
    (:x (meters -1) (meters 2))
    (:z (meters -1) (meters 2))
    (:scale-x (meters 0.5) (meters 1))
    (:rot-z (degrees 0))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 80.0 60.0)
    (:b 0.0)
    (:a 128.0)
    (:omega (degrees 0.045))
    (:vel-y (meters 0.033333335) (meters 0.016666668))
    (:accel-y (meters -0.0033333334))
    (:timer (seconds 4))
    (:flags (launch-along-z))
    (:func 'spt-func-part-lava-ball-spout-puff)
    (:next-time (seconds 0.667))
    (:next-launcher 4613)
    (:conerot-x (degrees 0) (degrees 5))
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpart 4613
  :init-specs ((:rotvel-z (degrees -2) (degrees 4)) (:func 'none))
  )

(defun spt-func-part-lava-ball-spout-puff ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 sparticle-launchinfo))
  (sparticle-motion-blur arg0 arg1 (-> arg2 launchrot))
  (check-drop-group-center arg0 arg1 arg2)
  (none)
  )

;; WARN: Return type mismatch float vs none.
(defun spt-birth-func-brightness-part-volcano-leaf-fall ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 sparticle-launchinfo) (arg3 object) (arg4 object))
  (let ((s5-0 (+ (mod (the-as int (rand-uint31-gen *random-generator*)) 11) 90))
        (s3-0 (+ (mod (the-as int (rand-uint31-gen *random-generator*)) 61) 10))
        (s4-0 (mod (the-as int (rand-uint31-gen *random-generator*)) 21))
        (v1-7 (+ (mod (the-as int (rand-uint31-gen *random-generator*)) 41) 70))
        )
    (set! (-> arg2 rotate-x) (the float (- s5-0 s3-0)))
    (set! (-> arg2 rotate-y) (the float (- s5-0 s4-0)))
    (set! (-> arg2 rotate-z) (the float (- s5-0 v1-7)))
    )
  (none)
  )

(defpartgroup group-volcano-leaf-fall
  :id 1396
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 20)
  :parts ((sp-item 4614 :fade-after (meters 200) :falloff-to (meters 200) :flags (is-3d) :period (seconds 1) :length (seconds 0.017))
    )
  )

(defpart 4614
  :init-specs ((:texture (forest-leaf volcanoa-sprite))
    (:birth-func 'spt-birth-func-part-volcano-leaf-fall)
    (:num 1.0)
    (:x (meters 0) (meters 6))
    (:y (meters 0) (meters 4))
    (:scale-x (meters 0.5) (meters 1))
    (:rot-x 4)
    (:rot-y (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 128.0)
    (:g 128.0)
    (:b 128.0)
    (:a 128.0)
    (:rotvel-x (degrees -0.2) (degrees 0.4))
    (:rotvel-y (degrees -0.2) 1 (degrees 0.4))
    (:rotvel-z (degrees -0.2) (degrees 0.4))
    (:accel-y (meters -0.00006666667) (meters -0.00006666667))
    (:friction 0.99)
    (:timer (seconds 6.667))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z left-multiply-quat))
    (:userdata :data (new 'static 'boxed-array :type int32 5 1 0 -2145384960 -2145384704 -2145384448 -2145384192))
    (:next-time (seconds 1))
    (:next-launcher 4615)
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpart 4615
  :init-specs ((:rotvel-x (degrees -0.6666667) (degrees 1.3333334))
    (:rotvel-y (degrees -0.2) 1 (degrees 0.4))
    (:rotvel-z (degrees -0.6666667) (degrees 1.3333334))
    (:accel-x (meters -0.00016666666) (meters 0.00033333333))
    (:accel-y (meters 0.000033333334) (meters -0.00066666666))
    (:accel-z (meters -0.00016666666) (meters 0.00033333333))
    (:next-time (seconds 0.5) (seconds 0.497))
    (:next-launcher 4615)
    )
  )

(defun spt-birth-func-part-volcano-leaf-fall ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 sparticle-launchinfo) (arg3 object) (arg4 object))
  (birth-func-texture-group-2d arg0 arg1 arg2 arg3 arg4)
  (spt-birth-func-brightness-part-volcano-leaf-fall arg0 arg1 arg2 arg3 arg4)
  (none)
  )

;; WARN: Return type mismatch quaternion vs none.
(defun spt-volcano-check-ground-lie-flat ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 sparticle-launchinfo))
  (local-vars (v1-9 float) (v1-10 float) (v1-15 float) (v1-16 float) (s5-1 quaternion))
  (rlet ((vf0 :class vf)
         (vf1 :class vf)
         (vf2 :class vf)
         )
    (init-vf0-vector)
    (let* ((v1-0 (-> arg1 key))
           (f0-1 (+ 819.2 (-> v1-0 origin trans y)))
           (f30-0 (+ 8192.0 f0-1))
           )
      (when (< (-> arg2 launchrot y) f0-1)
        (let ((s4-0 (new 'stack-no-clear 'quaternion)))
          (let ((s3-0 (new 'stack-no-clear 'matrix)))
            (set! (-> arg1 next-launcher) (the-as basic 0))
            (set! (-> arg1 next-time) (the-as uint 5))
            (set! (-> arg1 acc quad) (the-as uint128 0))
            (set! (-> arg1 vel-sxvel quad) (the-as uint128 0))
            (set! (-> arg1 rot-syvel quad) (the-as uint128 0))
            (quaternion-identity! (-> arg1 rotvel3d))
            (let* ((v1-7 s4-0)
                   (a0-3 arg2)
                   (f0-2 (-> a0-3 conerot x))
                   (f1-3 (-> a0-3 conerot y))
                   (f2-0 (-> a0-3 conerot z))
                   )
              (set! (-> v1-7 x) f0-2)
              (set! (-> v1-7 y) f1-3)
              (set! (-> v1-7 z) f2-0)
              (set! (-> v1-7 w) (sqrtf (- (- (- 1.0 (* f2-0 f2-0)) (* f1-3 f1-3)) (* f0-2 f0-2))))
              )
            (matrix-u-f-compose s3-0 *y-vector* (vector-z-quaternion! (new 'stack-no-clear 'vector) s4-0))
            (matrix->quaternion s4-0 s3-0)
            )
          (let ((v1-8 arg2))
            (cond
              ((< (-> s4-0 w) 0.0)
               (.lvf vf1 (&-> v1-8 conerot quad))
               (.lvf vf2 (&-> s4-0 quad))
               (.sub.vf.xyz vf1 vf0 vf2)
               (.svf (&-> v1-8 conerot quad) vf1)
               (.mov v1-9 vf1)
               )
              (else
                (.lvf vf1 (&-> v1-8 conerot quad))
                (.lvf vf2 (&-> s4-0 quad))
                (.add.vf.xyz vf1 vf0 vf2)
                (.svf (&-> v1-8 conerot quad) vf1)
                (.mov v1-10 vf1)
                )
              )
            )
          )
        (set! (-> arg1 sp-func) (the-as (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d uint none) 0))
        0
        )
      (set! s5-1
            (when (< (-> arg2 launchrot y) f30-0)
              (set! s5-1 (new 'stack-no-clear 'quaternion))
              (let ((s4-1 (new 'stack-no-clear 'quaternion)))
                (let ((s3-1 (new 'stack-no-clear 'matrix)))
                  (let* ((v1-12 s5-1)
                         (a0-9 arg2)
                         (f0-8 (-> a0-9 conerot x))
                         (f1-7 (-> a0-9 conerot y))
                         (f2-3 (-> a0-9 conerot z))
                         )
                    (set! (-> v1-12 x) f0-8)
                    (set! (-> v1-12 y) f1-7)
                    (set! (-> v1-12 z) f2-3)
                    (set! (-> v1-12 w) (sqrtf (- (- (- 1.0 (* f2-3 f2-3)) (* f1-7 f1-7)) (* f0-8 f0-8))))
                    )
                  (matrix-u-f-compose s3-1 *y-vector* (vector-z-quaternion! (new 'stack-no-clear 'vector) s5-1))
                  (matrix->quaternion s4-1 s3-1)
                  )
                (quaternion-pseudo-seek s5-1 s5-1 s4-1 (* 3.034074 (seconds-per-frame)))
                )
              (cond
                ((< (-> s5-1 w) 0.0)
                 (.lvf vf1 (&-> arg2 conerot quad))
                 (.lvf vf2 (&-> s5-1 quad))
                 (.sub.vf.xyz vf1 vf0 vf2)
                 (.svf (&-> arg2 conerot quad) vf1)
                 (.mov v1-15 vf1)
                 )
                (else
                  (.lvf vf1 (&-> arg2 conerot quad))
                  (.lvf vf2 (&-> s5-1 quad))
                  (.add.vf.xyz vf1 vf0 vf2)
                  (.svf (&-> arg2 conerot quad) vf1)
                  (.mov v1-16 vf1)
                  )
                )
              s5-1
              )
            )
      )
    (none)
    )
  )

(defpartgroup group-vol-lava-ball
  :id 1397
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 20)
  :parts ((sp-item 4616 :flags (sp7)))
  )

(defpart 4616
  :init-specs ((:texture (lava-drop-01 volcanoa-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 5.0)
    (:x (meters -0.5) (meters 1))
    (:y (meters -1))
    (:z (meters -0.5) (meters 1))
    (:scale-x (meters 0.5) (meters 0.5))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 60.0 60.0)
    (:b 0.0)
    (:a 128.0)
    (:vel-y (meters 0.0033333334) (meters 0.026666667))
    (:scalevel-x (meters -0.0016666667) (meters -0.0016666667))
    (:rotvel-z (degrees -2) (degrees 4))
    (:scalevel-y :copy scalevel-x)
    (:accel-y (meters -0.0016666667))
    (:timer (seconds 1.167))
    (:flags (sp-cpuinfo-flag-0 sp-cpuinfo-flag-3 launch-along-z))
    (:userdata :data (new 'static 'boxed-array :type int32 5 1 0 -2145386496 -2145386240 -2145385984 -2145385728))
    (:conerot-x (degrees 80) (degrees 20))
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpartgroup group-vol-break-ground
  :id 1398
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 20)
  :parts ((sp-item 4617 :flags (sp7)))
  )

(defpart 4617
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:num 0.3)
    (:z (meters -5) (meters 10))
    (:scale-x (meters 1))
    (:scale-y :copy scale-x)
    (:r 120.0)
    (:g 100.0)
    (:b 80.0)
    (:a 0.0)
    (:scalevel-x (meters 0.033333335) (meters 0.016666668))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.64)
    (:accel-y (meters -0.00033333333))
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-13))
    (:next-time (seconds 0.335))
    (:next-launcher 4618)
    (:rotate-y (degrees 0))
    )
  )

(defpart 4618
  :init-specs ((:scalevel-x (meters 0.0033333334)) (:scalevel-y :copy scalevel-x) (:fade-a -0.128))
  )
