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

;; name: sewer-part.gc
;; name in dgo: sewer-part
;; dgos: SEA

(define-extern *range-color-sewer-gas* curve-color-fast)
(define-extern *range-alpha-sewer-gas* curve2d-fast)
(define-extern *range-scale-sewer-gas-x* curve2d-fast)
(define-extern *range-scale-sewer-gas-y* curve2d-fast)
(define-extern *r-curve-sewer-gas* curve2d-fast)
(define-extern *g-curve-sewer-gas* curve2d-fast)
(define-extern *b-curve-sewer-gas* curve2d-fast)
(define-extern *curve-alpha-sewer-gas* curve2d-fast)
(define-extern *curve-sewer-gas-x* curve2d-fast)
(define-extern *curve-sewer-gas-y* curve2d-fast)

;; DECOMP BEGINS

(defpartgroup group-sewer-gas
  :id 1470
  :flags (sp0)
  :bounds (static-bspherem 0 0 0 640)
  :parts ((sp-item 4856 :fade-after (meters 200) :falloff-to (meters 300) :flags (is-3d)))
  )

(defpart 4856
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:num 0.15)
    (:x (meters 10) (meters 50))
    (:y (meters 20) (meters 40))
    (:scale-x (meters 20) (meters 20))
    (:scale-y :copy scale-x)
    (:r 128.0)
    (:g 128.0 128.0)
    (:b 128.0 64.0)
    (:a 0.0)
    (:vel-x (meters -0.016666668) (meters 0.033333335))
    (:vel-y (meters 0) (meters 0.0033333334))
    (:scalevel-x (meters 0) (meters 0.033333335))
    (:scalevel-y (meters 0) (meters 0.033333335))
    (:fade-a 0.053333335)
    (:timer (seconds 8))
    (:flags (sp-cpuinfo-flag-13 left-multiply-quat))
    (:next-time (seconds 4))
    (:next-launcher 4857)
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpart 4857
  :init-specs ((:fade-a -0.053333335))
  )

(defpartgroup group-sewer-steamvent
  :id 1471
  :flags (sp1 sp4)
  :bounds (static-bspherem 0 0 0 6)
  :parts ((sp-item 4858 :fade-after (meters 200) :falloff-to (meters 300) :flags (sp7)))
  )

(defpart 4858
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:birth-func 'birth-func-curve)
    (:num 0.15)
    (:x (meters -1) (meters 2))
    (:y (meters -2) (meters 4))
    (:z (meters 2))
    (:scale-x (meters 4) (meters 8))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 150.0)
    (:g 255.0)
    (:b 20.0)
    (:a 0.0)
    (:vel-y (meters 0.0033333334) (meters 0.0016666667))
    (:vel-z (meters 0.006666667) (meters 0.02))
    (:scalevel-x (meters 0.0033333334) (meters 0.0033333334))
    (:rotvel-z (degrees -0.2) (degrees 0.4))
    (:scalevel-y :copy scalevel-x)
    (:accel-y (meters 0.000033333334))
    (:timer (seconds 1))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:userdata 0.0)
    (:func 'live-func-curve)
    (:launchrot-x (degrees -5) (degrees 10))
    (:launchrot-y (degrees -5) (degrees 10))
    )
  )

(if #t
    (set! *range-color-sewer-gas* (new 'static 'curve-color-fast
                                    :xs (new 'static 'vector :y -1.0 :z -2.0 :w -3.0)
                                    :ys (new 'static 'inline-array vector 4
                                      (new 'static 'vector :x 8.0 :y 8.0 :z 8.0 :w 128.0)
                                      (new 'static 'vector :x 64.0 :y 64.0 :z 64.0 :w 128.0)
                                      (new 'static 'vector :x 64.0 :y 64.0 :z 64.0 :w 128.0)
                                      (new 'static 'vector :x 64.0 :y 64.0 :z 64.0 :w 128.0)
                                      )
                                    :one-over-x-deltas (new 'static 'vector :x 1.0 :y 1.0 :z 1.0 :w 1.0)
                                    )
          )
    )

(if #t
    (set! *range-alpha-sewer-gas* (new 'static 'curve2d-fast
                                    :xs (new 'static 'vector :y -1.0 :z -2.0 :w -3.0)
                                    :ys (new 'static 'vector :x 32.0 :y 64.0 :z 65.0 :w 66.0)
                                    :one-over-x-deltas (new 'static 'vector :x 32.0 :y 1.0 :z 1.0 :w 1.0)
                                    )
          )
    )

(if #t
    (set! *range-scale-sewer-gas-x* (new 'static 'curve2d-fast
                                      :xs (new 'static 'vector :y -1.0 :z -2.0 :w -3.0)
                                      :ys (new 'static 'vector :x 4.0 :y 4.0 :z 5.0 :w 6.0)
                                      :one-over-x-deltas (new 'static 'vector :y 1.0 :z 1.0 :w 1.0)
                                      )
          )
    )

(if #t
    (set! *range-scale-sewer-gas-y* (new 'static 'curve2d-fast
                                      :xs (new 'static 'vector :y -1.0 :z -2.0 :w -3.0)
                                      :ys (new 'static 'vector :x 4.0 :y 4.0 :z 5.0 :w 6.0)
                                      :one-over-x-deltas (new 'static 'vector :y 1.0 :z 1.0 :w 1.0)
                                      )
          )
    )

(if #t
    (set! *r-curve-sewer-gas* (new 'static 'curve2d-fast
                                :xs (new 'static 'vector :y -0.5 :z -0.7 :w -1.0)
                                :ys (new 'static 'vector :x 1.0 :y 0.5 :z 0.3)
                                :one-over-x-deltas (new 'static 'vector :x -1.0 :y -1.0 :z -1.0 :w 1.0)
                                )
          )
    )

(if #t
    (set! *g-curve-sewer-gas* (new 'static 'curve2d-fast
                                :xs (new 'static 'vector :y -0.5 :z -0.7 :w -1.0)
                                :ys (new 'static 'vector :x 1.0 :y 1.0 :z 1.0 :w 1.0)
                                :one-over-x-deltas (new 'static 'vector :w 1.0)
                                )
          )
    )

(if #t
    (set! *b-curve-sewer-gas* (new 'static 'curve2d-fast
                                :xs (new 'static 'vector :y -1.0 :z -2.0 :w -3.0)
                                :ys (new 'static 'vector :x 0.1 :y 0.1 :z 1.1 :w 2.1)
                                :one-over-x-deltas (new 'static 'vector :y 1.0 :z 0.9999999 :w 1.0)
                                )
          )
    )

(if #t
    (set! *curve-alpha-sewer-gas* (new 'static 'curve2d-fast
                                    :xs (new 'static 'vector :y -0.2 :z -0.7 :w -1.0)
                                    :ys (new 'static 'vector :y 0.5 :z 1.0)
                                    :one-over-x-deltas (new 'static 'vector :x 2.5 :y 1.0 :z -3.3333333 :w 1.0)
                                    )
          )
    )

(if #t
    (set! *curve-sewer-gas-x* (new 'static 'curve2d-fast
                                :xs (new 'static 'vector :y -1.0 :z -2.0 :w -3.0)
                                :ys (new 'static 'vector :x 1.0 :y 4.0 :z 5.0 :w 6.0)
                                :one-over-x-deltas (new 'static 'vector :x 3.0 :y 1.0 :z 1.0 :w 1.0)
                                )
          )
    )

(if #t
    (set! *curve-sewer-gas-y* (new 'static 'curve2d-fast
                                :xs (new 'static 'vector :y -1.0 :z -2.0 :w -3.0)
                                :ys (new 'static 'vector :x 1.0 :y 4.0 :z 5.0 :w 6.0)
                                :one-over-x-deltas (new 'static 'vector :x 3.0 :y 1.0 :z 1.0 :w 1.0)
                                )
          )
    )

(define *part-sewer-steam-puff-curve-settings* (new 'static 'particle-curve-settings
                                                 :lifetime-base (seconds 3)
                                                 :lifetime-offset (seconds 2)
                                                 :flags (particle-curve-flags pcf0 pcf1)
                                                 )
        )

(set! (-> *part-id-table* 4858 init-specs 21 initial-valuef)
      (the-as float *part-sewer-steam-puff-curve-settings*)
      )

(set! (-> *part-sewer-steam-puff-curve-settings* color-start) *range-color-sewer-gas*)

(set! (-> *part-sewer-steam-puff-curve-settings* alpha-start) *range-alpha-sewer-gas*)

(set! (-> *part-sewer-steam-puff-curve-settings* scale-x-start) *range-scale-sewer-gas-x*)

(set! (-> *part-sewer-steam-puff-curve-settings* scale-y-start) *range-scale-sewer-gas-y*)

(set! (-> *part-sewer-steam-puff-curve-settings* r-scalar) *r-curve-sewer-gas*)

(set! (-> *part-sewer-steam-puff-curve-settings* g-scalar) *g-curve-sewer-gas*)

(set! (-> *part-sewer-steam-puff-curve-settings* b-scalar) *b-curve-sewer-gas*)

(set! (-> *part-sewer-steam-puff-curve-settings* a-scalar) *curve-alpha-sewer-gas*)

(set! (-> *part-sewer-steam-puff-curve-settings* scale-x-scalar) *curve-sewer-gas-x*)

(set! (-> *part-sewer-steam-puff-curve-settings* scale-y-scalar) *curve-sewer-gas-y*)

(defpartgroup group-sewer-hard-blowing-steam
  :id 1472
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 6)
  :parts ((sp-item 4859 :flags (sp7)))
  )

(define *steam-particle-list* (new 'static 'boxed-array :type int32 #x405c00 #x400000))

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

(defpart 4859
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:birth-func 'birth-func-texture-group-steam)
    (:num 2.0)
    (:scale-x (meters 0.3))
    (:scale-y :copy scale-x)
    (:r 128.0)
    (:g 128.0)
    (:b 128.0)
    (:a 0.0)
    (:omega (degrees 0.1575))
    (:vel-z (meters 0.2) (meters 0.033333335))
    (:scalevel-x (meters 0.033333335))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.16)
    (:friction 0.92)
    (:timer (seconds 0.5))
    (:flags (sp-cpuinfo-flag-13 left-multiply-quat))
    (:func 'sparticle-motion-blur)
    (:next-time (seconds 0.335))
    (:next-launcher 4860)
    (:conerot-x (degrees 0) (degrees 10))
    (:rotate-y (degrees 0))
    (:rotate-z (degrees 0) (degrees 3600))
    )
  )

(defpart 4860
  :init-specs ((:fade-a -0.32))
  )

(defpartgroup group-sewer-green-steam
  :id 1473
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 6)
  :parts ((sp-item 4861 :flags (sp7)))
  )

(defpart 4861
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:birth-func 'birth-func-texture-group-steam)
    (:num 2.0)
    (:x (meters 0) (meters 2))
    (:scale-x (meters 1) (meters 2))
    (:scale-y :copy scale-x)
    (:r 90.0 30.0)
    (:g 130.0)
    (:b 32.0)
    (:a 0.0)
    (:omega (degrees 0.1575))
    (:vel-y (meters 0.2) (meters 0.033333335))
    (:scalevel-x (meters 0.033333335))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.32)
    (:friction 0.92 0.02)
    (:timer (seconds 0.5))
    (:flags (sp-cpuinfo-flag-13 left-multiply-quat))
    (:func 'sparticle-motion-blur)
    (:next-time (seconds 0.167))
    (:next-launcher 4862)
    (:conerot-x (degrees 0) (degrees 10))
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpart 4862
  :init-specs ((:fade-a -0.16))
  )

(defpartgroup group-sewer-deadly-mist
  :id 1474
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 100)
  :parts ((sp-item 4863 :flags (sp7)))
  )

(defpart 4863
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:num 0.5)
    (:x (meters 0) (meters 2))
    (:scale-x (meters 1) (meters 2))
    (:scale-y :copy scale-x)
    (:r 90.0 30.0)
    (:g 130.0)
    (:b 32.0)
    (:a 0.0)
    (:vel-y (meters 0.0033333334) (meters 0.016666668))
    (:scalevel-x (meters 0.033333335))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.32)
    (:accel-y (meters 0.00033333333))
    (:friction 0.98)
    (:timer (seconds 3))
    (:flags (sp-cpuinfo-flag-13 left-multiply-quat))
    (:next-time (seconds 0.167))
    (:next-launcher 4864)
    (:conerot-x (degrees 0) (degrees 90))
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpart 4864
  :init-specs ((:fade-a -0.018823529))
  )

(defpartgroup group-sewer-light-glow
  :id 1475
  :bounds (static-bspherem 0 0 0 8)
  :parts ((sp-item 4865 :fade-after (meters 200) :flags (sp6)))
  )

(defpart 4865
  :init-specs ((:texture (glow level-default-sprite))
    (:num 1.0)
    (:scale-x (meters 3.5) (meters 0.1))
    (:rot-x (degrees 4.5))
    (:rot-z (degrees -17))
    (:scale-y :copy scale-x)
    (:r 128.0)
    (:g 255.0)
    (:b 64.0)
    (:a 12.0 4.0)
    (:omega (degrees 4515.75))
    (:timer (seconds 0.017))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
    (:userdata 2048.0)
    )
  )

(defpartgroup group-sewer-panel-light-glow
  :id 1476
  :bounds (static-bspherem 0 0 0 8)
  :parts ((sp-item 4866 :fade-after (meters 200) :flags (sp6)))
  )

(defpart 4866
  :init-specs ((:texture (glow level-default-sprite))
    (:num 1.0)
    (:scale-x (meters 7) (meters 0.1))
    (:rot-x (degrees 4.5))
    (:rot-z (degrees -17))
    (:scale-y :copy scale-x)
    (:r 100.0)
    (:g 255.0)
    (:b 255.0)
    (:a 12.0 4.0)
    (:omega (degrees 4515.75))
    (:timer (seconds 0.017))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
    (:userdata 2048.0)
    )
  )

(defpartgroup group-sew-little-ridge-wake
  :id 1477
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 4)
  :parts ((sp-item 4867 :flags (sp7)))
  )

(defpart 4867
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 0.3 0.8)
    (:scale-x (meters 0.5) (meters 1))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:vel-y (meters 0.006666667) (meters 0.006666667))
    (:scalevel-x (meters 0.0033333334) (meters 0.006666667))
    (:scalevel-y :copy scalevel-x)
    (:accel-y (meters -0.001))
    (:accel-z (meters 0.001))
    (:timer (seconds 0.5))
    (:flags (sp-cpuinfo-flag-13))
    (:conerot-x (degrees -5) (degrees 10))
    (:conerot-z (degrees -5) (degrees 10))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sew-fan-lasersight
  :id 1478
  :bounds (static-bspherem 0 0 0 4)
  :parts ((sp-item 4868 :flags (sp6 sp7)) (sp-item 4869 :flags (sp6 sp7)))
  )

(defpart 4868
  :init-specs ((:texture (glow-soft level-default-sprite))
    (:num 1.0)
    (:scale-x (meters 1.5))
    (:rot-x (degrees 11.25))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 16.0)
    (:g 64.0)
    (:b 10.0)
    (:a 64.0 1.0)
    (:omega (degrees 6761.25))
    (:timer (seconds 0.017))
    (:flags (glow))
    (:userdata 4096.0)
    (:rotate-y (degrees 0))
    )
  )

(defpart 4869
  :init-specs ((:texture (glow-soft level-default-sprite))
    (:num 1.0)
    (:z (meters -1))
    (:scale-x (meters 1.5))
    (:rot-x (degrees 11.25))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 16.0)
    (:g 64.0)
    (:b 10.0)
    (:a 64.0 1.0)
    (:omega (degrees 6761.25))
    (:timer (seconds 0.017))
    (:flags (glow))
    (:userdata 4096.0)
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sew-fan-lasersight-hostile
  :id 1479
  :bounds (static-bspherem 0 0 0 4)
  :parts ((sp-item 4870 :flags (sp6 sp7)) (sp-item 4871 :flags (sp6 sp7)))
  )

(defpart 4870
  :init-specs ((:texture (glow-soft level-default-sprite))
    (:num 1.0)
    (:scale-x (meters 1.5))
    (:rot-x (degrees 11.25))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 112.0)
    (:g 16.0)
    (:b 10.0)
    (:a 64.0 1.0)
    (:omega (degrees 6761.25))
    (:timer (seconds 0.017))
    (:flags (glow))
    (:userdata 4096.0)
    (:rotate-y (degrees 0))
    )
  )

(defpart 4871
  :init-specs ((:texture (glow-soft level-default-sprite))
    (:num 1.0)
    (:z (meters -1))
    (:scale-x (meters 1.5))
    (:rot-x (degrees 11.25))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 112.0)
    (:g 16.0)
    (:b 10.0)
    (:a 64.0 1.0)
    (:omega (degrees 6761.25))
    (:timer (seconds 0.017))
    (:flags (glow))
    (:userdata 1228.8)
    (:rotate-y (degrees 0))
    )
  )

(defpart 4872
  :init-specs ((:texture (glow-soft level-default-sprite))
    (:num 1.0)
    (:z (meters -1))
    (:scale-x (meters 3) (meters 0.1))
    (:rot-x (degrees 11.25))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 0.0)
    (:b 0.0)
    (:a 30.0 2.0)
    (:timer (seconds 0.017))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
    (:userdata 4096.0)
    )
  )

(defpart 4873
  :init-specs ((:texture (glow-soft level-default-sprite))
    (:num 1.0)
    (:z (meters -1))
    (:scale-x (meters 3) (meters 0.1))
    (:rot-x (degrees 11.25))
    (:scale-y :copy scale-x)
    (:r 0.0)
    (:g 64.0)
    (:b 0.0)
    (:a 30.0 2.0)
    (:timer (seconds 0.017))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
    (:userdata 4096.0)
    )
  )

(defpartgroup group-sew-wake-small
  :id 1480
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 4)
  :parts ((sp-item 4874 :flags (is-3d sp7)))
  )

(defpart 4874
  :init-specs ((:texture (splash-foam level-default-sprite))
    (:num 0.2)
    (:scale-x (meters 1) (meters 1))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:scalevel-x (meters 0.008333334) (meters 0.0016666667))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.07111111 -0.07111111)
    (:accel-z (meters 0.00033333333))
    (:timer (seconds 10))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z))
    (:rotate-y (degrees 0) (degrees 360))
    )
  )

(defpartgroup group-sew-grate-wake
  :id 1481
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 4)
  :parts ((sp-item 4875 :flags (is-3d sp7)))
  )

(defpart 4875
  :init-specs ((:texture (water-wake sewa-sprite))
    (:num 0.5)
    (:x (meters 0))
    (:z (meters -6) 6 (meters 2.1))
    (:scale-x (meters 0.3) (meters 0.3))
    (:rot-x (degrees 0) 1 (degrees 180))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:scalevel-x (meters 0.016666668) (meters 0.0016666667))
    (:scalevel-y (meters 0.006666667) (meters 0.0016666667))
    (:fade-a -0.10666667 -0.10666667)
    (:accel-z (meters 0.00033333333))
    (:timer (seconds 10))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z))
    (:rotate-y (degrees 90))
    )
  )

(defpartgroup group-sew-yellow-grate-wake
  :id 1482
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 4)
  :parts ((sp-item 4876 :flags (is-3d sp7)))
  )

(defpart 4876
  :init-specs ((:texture (water-wake sewa-sprite))
    (:num 1.0)
    (:x (meters 0))
    (:z (meters -7.6) 4 (meters 3))
    (:scale-x (meters 0.5) (meters 0.3))
    (:rot-x (degrees 0) 1 (degrees 180))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 64.0 64.0)
    (:scalevel-x (meters 0.016666668) (meters 0.0016666667))
    (:scalevel-y (meters 0.013333334) (meters 0.0016666667))
    (:fade-a -0.21333334 -0.21333334)
    (:accel-x (meters 0.00033333333))
    (:timer (seconds 10))
    (:flags (sp-cpuinfo-flag-2 launch-along-z))
    (:rotate-y (degrees 90))
    )
  )

(defpartgroup group-sewer-falls-froth
  :id 1483
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 10)
  :parts ((sp-item 4877 :flags (is-3d sp7))
    (sp-item 4878 :fade-after (meters 60) :falloff-to (meters 100) :flags (sp7))
    )
  )

(defpart 4877
  :init-specs ((:texture (water-froth sewa-sprite))
    (:num 0.02 0.02)
    (:x (meters -4) (meters 8))
    (:z (meters -10))
    (:scale-x (meters 5) (meters 20))
    (:rot-y (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 128.0)
    (:g 110.0)
    (:b 60.0 20.0)
    (:a 32.0 32.0)
    (:vel-z (meters 0.02) (meters 0.006666667))
    (:rotvel-y (degrees -0.010000001) (degrees 0.020000001))
    (:timer (seconds 10))
    (:flags (sp-cpuinfo-flag-2 launch-along-z left-multiply-quat))
    (:next-time (seconds 5))
    (:next-launcher 4879)
    (:rotate-y (degrees 0))
    )
  )

(defpart 4879
  :init-specs ((:fade-a -0.042666666))
  )

(defpart 4878
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 4.0)
    (:x (meters -5) (meters 10))
    (:y (meters 0))
    (:z (meters -0.3) (meters 0.6))
    (:scale-x (meters 0.3) (meters 0.3))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:vel-y (meters -0.01))
    (:scalevel-x (meters 0.0033333334) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.256)
    (:accel-y (meters 0.00033333333))
    (:accel-z (meters 0.00016666666))
    (:timer (seconds 0.835))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sewer-whirlpool-center
  :id 1484
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 10)
  :parts ((sp-item 4880 :fade-after (meters 60) :falloff-to (meters 100) :flags (sp7))
    (sp-item 4881 :fade-after (meters 60) :falloff-to (meters 100) :flags (sp7))
    )
  )

(defpart 4881
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 0.5)
    (:x (meters 0) (meters 1))
    (:y (meters -0.5))
    (:scale-x (meters 0.2) (meters 0.2))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 16.0 16.0)
    (:vel-y (meters 0.016666668))
    (:scalevel-x (meters 0.0033333334) (meters 0.006666667))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.053333335)
    (:accel-y (meters -0.00033333333))
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:conerot-x (degrees 0) (degrees 2))
    (:rotate-y (degrees 0) (degrees 360))
    )
  )

(defpart 4880
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:num 0.5)
    (:x (meters 0) (meters 2))
    (:y (meters 1))
    (:scale-x (meters 1) (meters 2))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 0.0)
    (:vel-y (meters 0.0033333334) (meters 0.016666668))
    (:scalevel-x (meters 0.006666667))
    (:rotvel-z (degrees -0.1) (degrees 0.2))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.32)
    (:accel-y (meters 0) (meters 0.00033333333))
    (:friction 0.95)
    (:timer (seconds 3))
    (:flags (sp-cpuinfo-flag-13 left-multiply-quat))
    (:next-time (seconds 0.167))
    (:next-launcher 4882)
    (:conerot-x (degrees 0) (degrees 90))
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpart 4882
  :init-specs ((:fade-a -0.018823529))
  )

(defpartgroup group-sewer-falls-tilt
  :id 1485
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 10)
  :parts ((sp-item 4883 :fade-after (meters 60) :falloff-to (meters 100) :flags (sp7)))
  )

(defpart 4883
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 6.0)
    (:x (meters -9) (meters 18))
    (:y (meters 0.4))
    (:z (meters -0.3) (meters 0.6))
    (:scale-x (meters 0.5) (meters 0.5))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:vel-y (meters -0.01))
    (:scalevel-x (meters 0.006666667) (meters 0.006666667))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.256)
    (:accel-x (meters -0.00066666666))
    (:accel-y (meters 0.00033333333))
    (:timer (seconds 0.835))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sewer-waterfall-base
  :id 1486
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 10)
  :parts ((sp-item 4884 :fade-after (meters 60) :falloff-to (meters 100) :flags (is-3d sp7))
    (sp-item 4885 :fade-after (meters 60) :falloff-to (meters 100) :flags (sp7))
    )
  )

(defpart 4884
  :init-specs ((:texture (laser-hit2 level-default-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 0.5)
    (:z (meters 1))
    (:scale-x (meters 3) (meters 0.5))
    (:rot-y (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 16.0 16.0)
    (:scalevel-x (meters 0.006666667) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.053333335 -0.053333335)
    (:accel-z (meters 0.00033333333))
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z left-multiply-quat))
    (:userdata :data (new 'static 'boxed-array :type int32 5 0 0 #x406400 #x408200))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4885
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 4.0)
    (:x (meters -1.5) (meters 3))
    (:y (meters 0))
    (:z (meters -0.3) (meters 0.6))
    (:scale-x (meters 0.3) (meters 0.3))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:vel-y (meters -0.01))
    (:scalevel-x (meters 0.0033333334) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.256)
    (:accel-y (meters 0.00033333333))
    (:timer (seconds 0.835))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sewer-waterfall-base-big
  :id 1487
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 20)
  :parts ((sp-item 4886 :fade-after (meters 100) :falloff-to (meters 400) :flags (sp7))
    (sp-item 4887 :fade-after (meters 100) :falloff-to (meters 200) :flags (sp7))
    )
  )

(defpart 4886
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:num 0.3 0.3)
    (:x (meters -10) (meters 15))
    (:y (meters -0.4))
    (:z (meters 0))
    (:scale-x (meters 1) (meters 4))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 180.0 70.0)
    (:g :copy r)
    (:b :copy r)
    (:a 0.0)
    (:vel-z (meters 0) (meters 0.06666667))
    (:scalevel-x (meters 0.0033333334) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.021333333 0.021333333)
    (:accel-y (meters 0.000033333334) (meters 0.000033333334))
    (:friction 0.95)
    (:timer (seconds 5))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:next-time (seconds 2.5))
    (:next-launcher 4888)
    (:conerot-y (degrees -10) (degrees 20))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4888
  :init-specs ((:fade-a -0.042666666 -0.042666666))
  )

(defpart 4889
  :init-specs ((:texture (laser-hit2 level-default-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 0.1)
    (:z (meters 1))
    (:scale-x (meters 12) (meters 0.5))
    (:rot-y (degrees 0) 1 (degrees 180))
    (:scale-y (meters 3) (meters 0.5))
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:scalevel-x (meters 0.013333334) (meters 0.006666667))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.053333335 -0.053333335)
    (:accel-z (meters 0.00033333333))
    (:friction 0.9)
    (:timer (seconds 4))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z left-multiply-quat))
    (:userdata :data (new 'static 'boxed-array :type int32 5 0 0 #x406400 #x408200))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4890
  :init-specs ((:texture (laser-hit2 level-default-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 0.1)
    (:z (meters 1))
    (:scale-x (meters 3) (meters 0.5))
    (:rot-y (degrees 90) 1 (degrees 180))
    (:scale-y (meters 12) (meters 0.5))
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:scalevel-x (meters 0.013333334) (meters 0.006666667))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.053333335 -0.053333335)
    (:accel-z (meters 0.00033333333))
    (:friction 0.9)
    (:timer (seconds 4))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z left-multiply-quat))
    (:userdata :data (new 'static 'boxed-array :type int32 5 0 0 #x406400 #x408200))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4887
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 4.0)
    (:x (meters -6) (meters 12))
    (:y (meters 0))
    (:z (meters -0.3) (meters 0.6))
    (:scale-x (meters 1) (meters 0.3))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:vel-y (meters -0.01))
    (:scalevel-x (meters 0.0033333334) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.256)
    (:accel-y (meters 0.00033333333))
    (:timer (seconds 0.835))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sewer-waterfall-base-tube
  :id 1488
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 20)
  :parts ((sp-item 4891 :fade-after (meters 100) :falloff-to (meters 200) :flags (sp7)))
  )

(defpart 4891
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 4.0)
    (:x (meters -6) (meters 12))
    (:y (meters 0))
    (:z (meters -0.3) (meters 0.6))
    (:scale-x (meters 1) (meters 0.3))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 50.0 50.0)
    (:b 40.0)
    (:a 32.0 32.0)
    (:vel-y (meters -0.01))
    (:vel-z (meters 0.0033333334) (meters 0.02))
    (:scalevel-x (meters 0.0033333334) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.256)
    (:accel-y (meters 0.00033333333))
    (:timer (seconds 0.835))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sew-wake-medium
  :id 1489
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 4)
  :parts ((sp-item 4892 :flags (sp7)) (sp-item 4893 :flags (sp7)) (sp-item 4894 :flags (is-3d sp7)))
  )

(defpart 4892
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 5.0)
    (:x (meters -3.5))
    (:scale-x (meters 0.3) (meters 0.3))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 100.0 28.0)
    (:vel-y (meters 0.0033333334) (meters 0.026666667))
    (:scalevel-x (meters 0.01))
    (:rotvel-z (degrees -0.2) (degrees 0.4))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.85333335)
    (:accel-y (meters -0.001))
    (:accel-z (meters 0.0016666667))
    (:friction 0.96)
    (:timer (seconds 0.5))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:func 'check-drop-group-center)
    (:conerot-z (degrees -5) (degrees 10))
    (:rotate-y (degrees -10) (degrees -90))
    )
  )

(defpart 4893
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 5.0)
    (:x (meters -3.5))
    (:scale-x (meters 0.3) (meters 0.3))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 100.0 28.0)
    (:vel-y (meters 0.0033333334) (meters 0.026666667))
    (:scalevel-x (meters 0.01))
    (:rotvel-z (degrees -0.2) (degrees 0.4))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.85333335)
    (:accel-y (meters -0.001))
    (:accel-z (meters -0.0016666667))
    (:friction 0.96)
    (:timer (seconds 0.5))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:func 'check-drop-group-center)
    (:conerot-z (degrees -5) (degrees 10))
    (:rotate-y (degrees 180) (degrees 100.00001))
    )
  )

(defpart 4894
  :init-specs ((:texture (splash-foam level-default-sprite))
    (:num 0.5)
    (:scale-x (meters 8) (meters 1))
    (:rot-y (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:vel-z (meters 0.02))
    (:scalevel-x (meters -0.013333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.07111111)
    (:accel-x (meters -0.00013333333))
    (:timer (seconds 10))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sew-wake-large
  :id 1490
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 4)
  :parts ((sp-item 4895 :flags (is-3d sp7)))
  )

(defpart 4895
  :init-specs ((:texture (splash-foam level-default-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 0.1)
    (:scale-x (meters 3.3))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 64.0)
    (:scalevel-x (meters 0.01))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.10666667)
    (:accel-x (meters 0.00066666666))
    (:friction 0.98)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z left-multiply-quat))
    (:userdata :data (new 'static 'boxed-array :type int32 5 0 0 #x406500 #x408200))
    (:next-time (seconds 0.335))
    (:next-launcher 4896)
    (:rotate-y (degrees 0) (degrees 360))
    )
  )

(defpart 4896
  :init-specs ((:scalevel-x (meters -0.006666667)) (:scalevel-y :copy scalevel-x))
  )

(defpartgroup group-sew-wake-tiny
  :id 1491
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 4)
  :parts ((sp-item 4897 :flags (is-3d sp7)))
  )

(defpart 4897
  :init-specs ((:texture (splash-foam level-default-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 0.2)
    (:scale-x (meters 2))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 64.0)
    (:scalevel-x (meters -0.0026666666))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.10666667)
    (:accel-x (meters 0.00066666666))
    (:friction 0.98)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z))
    (:userdata :data (new 'static 'boxed-array :type int32 5 0 0 #x406500 #x408200))
    (:rotate-y (degrees 0) (degrees 360))
    )
  )

(defpartgroup group-sewer-deep-mist
  :id 1492
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 200)
  :parts ((sp-item 4898 :flags (sp7)))
  )

(defpart 4898
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:num 0.1 0.1)
    (:x (meters 0))
    (:y (meters 0))
    (:z (meters 0) (meters 10))
    (:scale-x (meters 10) (meters 4))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 100.0 20.0)
    (:g :copy r)
    (:b :copy r)
    (:a 0.0)
    (:vel-x (meters 0) (meters 0.06666667))
    (:scalevel-x (meters 0.0033333334) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.008 0.008)
    (:accel-y (meters 0.0001) (meters 0.000033333334))
    (:friction 0.99)
    (:timer (seconds 10))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:next-time (seconds 6.667))
    (:next-launcher 4899)
    (:conerot-y (degrees -10) (degrees 20))
    (:rotate-y (degrees 0) (degrees 360))
    )
  )

(defpart 4899
  :init-specs ((:fade-a -0.032 -0.032))
  )

(defpartgroup group-sewer-waterfall-base-huge
  :id 1493
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 30)
  :parts ((sp-item 4900 :fade-after (meters 50) :falloff-to (meters 100) :flags (sp7))
    (sp-item 4901 :fade-after (meters 50) :falloff-to (meters 100) :flags (sp7))
    (sp-item 4902 :fade-after (meters 50) :falloff-to (meters 100) :flags (sp7))
    )
  )

(defpart 4900
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:num 0.3 0.3)
    (:x (meters 0))
    (:y (meters -0.4))
    (:z (meters -40) (meters 80))
    (:scale-x (meters 1) (meters 4))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 180.0 70.0)
    (:g :copy r)
    (:b :copy r)
    (:a 0.0)
    (:vel-x (meters 0) (meters 0.06666667))
    (:scalevel-x (meters 0.013333334) (meters 0.013333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.021333333 0.021333333)
    (:accel-y (meters 0.000033333334) (meters 0.000033333334))
    (:friction 0.95)
    (:timer (seconds 5))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:next-time (seconds 2.5))
    (:next-launcher 4903)
    (:conerot-y (degrees -10) (degrees 20))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4903
  :init-specs ((:fade-a -0.042666666 -0.042666666))
  )

(defpart 4901
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 10.0)
    (:x (meters -0.3) (meters 0.6))
    (:y (meters 0))
    (:z (meters -40) (meters 40))
    (:scale-x (meters 1) (meters 0.3))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:vel-y (meters -0.01))
    (:scalevel-x (meters 0.0033333334) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.256)
    (:accel-x (meters 0.00033333333) (meters 0.00066666666))
    (:accel-y (meters 0.00033333333))
    (:timer (seconds 0.835))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4902
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 10.0)
    (:x (meters -0.3) (meters 0.6))
    (:y (meters 0))
    (:z (meters 0) (meters 40))
    (:scale-x (meters 1) (meters 0.3))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:vel-y (meters -0.01))
    (:scalevel-x (meters 0.0033333334) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.256)
    (:accel-x (meters 0.00033333333) (meters 0.00066666666))
    (:accel-y (meters 0.00033333333))
    (:timer (seconds 0.835))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sewer-waterfall-base-top
  :id 1494
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 10)
  :parts ((sp-item 4904 :fade-after (meters 100) :falloff-to (meters 200) :flags (sp7))
    (sp-item 4905 :fade-after (meters 100) :falloff-to (meters 200) :flags (sp7))
    )
  )

(defpart 4904
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:num 0.3 0.3)
    (:x (meters 0))
    (:y (meters -0.4))
    (:z (meters -30) (meters 60))
    (:scale-x (meters 1) (meters 4))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 180.0 70.0)
    (:g :copy r)
    (:b :copy r)
    (:a 0.0)
    (:vel-x (meters 0) (meters 0.06666667))
    (:scalevel-x (meters 0.013333334) (meters 0.013333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.021333333 0.021333333)
    (:accel-y (meters 0.000033333334) (meters 0.000033333334))
    (:friction 0.95)
    (:timer (seconds 5))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:next-time (seconds 2.5))
    (:next-launcher 4903)
    (:conerot-y (degrees -10) (degrees 20))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4905
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 20.0)
    (:x (meters -0.3) (meters 0.6))
    (:y (meters 0))
    (:z (meters -30) (meters 60))
    (:scale-x (meters 1) (meters 0.3))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:vel-y (meters -0.01))
    (:scalevel-x (meters 0.0033333334) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.256)
    (:accel-x (meters 0.00033333333) (meters 0.00066666666))
    (:accel-y (meters 0.00033333333))
    (:timer (seconds 0.835))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sew-4-waterfalls
  :id 1495
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 20)
  :parts ((sp-item 4906 :fade-after (meters 60) :falloff-to (meters 100) :flags (sp7))
    (sp-item 4907 :fade-after (meters 60) :falloff-to (meters 100) :flags (is-3d sp7))
    (sp-item 4908 :fade-after (meters 60) :falloff-to (meters 100) :flags (sp7))
    (sp-item 4909 :fade-after (meters 60) :falloff-to (meters 100) :flags (is-3d sp7))
    (sp-item 4910 :fade-after (meters 60) :falloff-to (meters 100) :flags (sp7))
    (sp-item 4911 :fade-after (meters 60) :falloff-to (meters 100) :flags (is-3d sp7))
    (sp-item 4912 :fade-after (meters 60) :falloff-to (meters 100) :flags (sp7))
    (sp-item 4913 :fade-after (meters 60) :falloff-to (meters 100) :flags (is-3d sp7))
    (sp-item 4914 :fade-after (meters 60) :falloff-to (meters 100) :flags (sp7))
    )
  )

(defpart 4906
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:num 0.5 0.5)
    (:x (meters 0))
    (:y (meters -0.4))
    (:z (meters -20) (meters 35))
    (:scale-x (meters 1) (meters 4))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 180.0 70.0)
    (:g :copy r)
    (:b :copy r)
    (:a 0.0)
    (:vel-x (meters 0) (meters 0.06666667))
    (:scalevel-x (meters 0.006666667) (meters 0.006666667))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.021333333 0.021333333)
    (:accel-y (meters 0.000033333334) (meters 0.000033333334))
    (:friction 0.95)
    (:timer (seconds 5))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:next-time (seconds 2.5))
    (:next-launcher 4915)
    (:conerot-y (degrees -10) (degrees 20))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4915
  :init-specs ((:fade-a -0.042666666 -0.042666666))
  )

(defpart 4907
  :init-specs ((:texture (water-drops level-default-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 0.5)
    (:x (meters 1))
    (:z (meters 13))
    (:scale-x (meters 6) (meters 0.5))
    (:rot-y (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 16.0 16.0)
    (:scalevel-x (meters 0.006666667) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.053333335 -0.053333335)
    (:accel-x (meters 0.00066666666))
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z left-multiply-quat))
    (:userdata :data (new 'static 'boxed-array :type int32 5 0 0 #x406500 #x408200))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4908
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 4.0)
    (:x (meters -0.5) (meters 1))
    (:y (meters 0))
    (:z (meters 10) (meters 6))
    (:scale-x (meters 0.3) (meters 0.3))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 64.0 64.0)
    (:vel-y (meters -0.013333334))
    (:scalevel-x (meters 0.0033333334) (meters 0.006666667))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.4 -0.4)
    (:accel-x (meters 0.00033333333) (meters 0.00033333333))
    (:accel-y (meters 0.00033333333))
    (:timer (seconds 0.835))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4909
  :init-specs ((:texture (water-drops level-default-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 0.5)
    (:x (meters 1))
    (:z (meters 4.6))
    (:scale-x (meters 6) (meters 0.5))
    (:rot-y (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 16.0 16.0)
    (:scalevel-x (meters 0.006666667) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.053333335 -0.053333335)
    (:accel-x (meters 0.00066666666))
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z left-multiply-quat))
    (:userdata :data (new 'static 'boxed-array :type int32 5 0 0 #x406500 #x408200))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4910
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 4.0)
    (:x (meters -0.5) (meters 1))
    (:y (meters 0))
    (:z (meters 1.4) (meters 6))
    (:scale-x (meters 0.3) (meters 0.3))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 64.0 64.0)
    (:vel-y (meters -0.013333334))
    (:scalevel-x (meters 0.0033333334) (meters 0.006666667))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.4 -0.4)
    (:accel-x (meters 0.00033333333) (meters 0.00033333333))
    (:accel-y (meters 0.00033333333))
    (:timer (seconds 0.835))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4911
  :init-specs ((:texture (water-drops level-default-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 0.5)
    (:x (meters 1))
    (:z (meters -3))
    (:scale-x (meters 6) (meters 0.5))
    (:rot-y (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 16.0 16.0)
    (:scalevel-x (meters 0.006666667) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.053333335 -0.053333335)
    (:accel-x (meters 0.00066666666))
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z left-multiply-quat))
    (:userdata :data (new 'static 'boxed-array :type int32 5 0 0 #x406500 #x408200))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4912
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 4.0)
    (:x (meters -0.5) (meters 1))
    (:y (meters 0))
    (:z (meters -6.5) (meters 6))
    (:scale-x (meters 0.3) (meters 0.3))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 64.0 64.0)
    (:vel-y (meters -0.013333334))
    (:scalevel-x (meters 0.0033333334) (meters 0.006666667))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.4 -0.4)
    (:accel-x (meters 0.00033333333) (meters 0.00033333333))
    (:accel-y (meters 0.00033333333))
    (:timer (seconds 0.835))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4913
  :init-specs ((:texture (water-drops level-default-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 0.5)
    (:x (meters 1))
    (:z (meters -11.5))
    (:scale-x (meters 6) (meters 0.5))
    (:rot-y (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 16.0 16.0)
    (:scalevel-x (meters 0.006666667) (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.053333335 -0.053333335)
    (:accel-x (meters 0.00066666666))
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z left-multiply-quat))
    (:userdata :data (new 'static 'boxed-array :type int32 5 0 0 #x406500 #x408200))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4914
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 4.0)
    (:x (meters -0.5) (meters 1))
    (:y (meters 0))
    (:z (meters -15) (meters 6))
    (:scale-x (meters 0.3) (meters 0.3))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 64.0 64.0)
    (:vel-y (meters -0.013333334))
    (:scalevel-x (meters 0.0033333334) (meters 0.006666667))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.4 -0.4)
    (:accel-x (meters 0.00033333333) (meters 0.00033333333))
    (:accel-y (meters 0.00033333333))
    (:timer (seconds 0.835))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sew-moving-step-a-wake
  :id 1496
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 5)
  :parts ((sp-item 4916 :flags (sp7)) (sp-item 4917 :flags (sp7)) (sp-item 4918 :flags (is-3d sp7)))
  )

(defpart 4916
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 2.0)
    (:x (meters -3.5))
    (:scale-x (meters 0.3) (meters 0.3))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 100.0 28.0)
    (:vel-y (meters 0.0033333334) (meters 0.026666667))
    (:scalevel-x (meters 0.01))
    (:rotvel-z (degrees -0.2) (degrees 0.4))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.85333335)
    (:accel-y (meters -0.001))
    (:accel-z (meters 0.0016666667))
    (:friction 0.96)
    (:timer (seconds 0.5))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:func 'check-drop-group-center)
    (:conerot-z (degrees -5) (degrees 10))
    (:rotate-y (degrees 80) (degrees -90))
    )
  )

(defpart 4917
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 2.0)
    (:x (meters -3.5))
    (:scale-x (meters 0.3) (meters 0.3))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 100.0 28.0)
    (:vel-y (meters 0.0033333334) (meters 0.026666667))
    (:scalevel-x (meters 0.01))
    (:rotvel-z (degrees -0.2) (degrees 0.4))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.85333335)
    (:accel-y (meters -0.001))
    (:accel-z (meters -0.0016666667))
    (:friction 0.96)
    (:timer (seconds 0.5))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:func 'check-drop-group-center)
    (:conerot-z (degrees -5) (degrees 10))
    (:rotate-y (degrees 260) (degrees 100.00001))
    )
  )

(defpart 4918
  :init-specs ((:texture (splash-foam level-default-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 0.1)
    (:scale-x (meters 6.5) (meters 0.5))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 64.0)
    (:scalevel-x (meters 0.01))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.10666667)
    (:accel-x (meters 0.00066666666))
    (:friction 0.98)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z left-multiply-quat))
    (:userdata :data (new 'static 'boxed-array :type int32 5 0 0 #x406500 #x408200))
    (:next-time (seconds 0.335))
    (:next-launcher 4919)
    (:rotate-y (degrees 0) (degrees 360))
    )
  )

(defpart 4919
  :init-specs ((:scalevel-x (meters -0.006666667)) (:scalevel-y :copy scalevel-x))
  )

(defpartgroup group-sew-moving-step-b-wake
  :id 1497
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 5)
  :parts ((sp-item 4920 :fade-after (meters 80) :falloff-to (meters 100) :flags (sp7))
    (sp-item 4921 :fade-after (meters 80) :falloff-to (meters 100) :flags (is-3d sp7))
    )
  )

(defpart 4920
  :init-specs ((:texture (water-drops level-default-sprite))
    (:num 3.0)
    (:x (meters -4.2) (meters 8.4))
    (:z (meters 1.2))
    (:scale-x (meters 0.3) (meters 0.3))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 100.0 28.0)
    (:vel-y (meters 0.0033333334) (meters 0.013333334))
    (:scalevel-x (meters 0.01))
    (:rotvel-z (degrees -0.2) (degrees 0.4))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.42666668)
    (:accel-y (meters -0.0016666667))
    (:accel-z (meters 0.001))
    (:friction 0.96)
    (:timer (seconds 1))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:func 'check-drop-group-center)
    (:conerot-z (degrees -5) (degrees 10))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4921
  :init-specs ((:texture (splash-foam level-default-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 0.4)
    (:y (meters 0.8))
    (:z (meters 1.5))
    (:scale-x (meters 9) (meters 1))
    (:rot-y (degrees 0))
    (:scale-y (meters 1) (meters 1))
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 32.0 32.0)
    (:scalevel-y (meters 0.013333334))
    (:fade-a -0.21333334)
    (:accel-z (meters 0.001))
    (:timer (seconds 1))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:userdata :data (new 'static 'boxed-array :type int32 5 0 0 #x406500 #x408200))
    (:rotate-x (degrees 55))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sew-grate-bubbles
  :id 1498
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 8)
  :parts ((sp-item 4922 :fade-after (meters 80) :falloff-to (meters 100) :flags (is-3d sp7)))
  )

(defpart 4922
  :init-specs ((:texture (splash-foam level-default-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 0.2)
    (:z (meters -1))
    (:scale-x (meters 4) (meters 0.5))
    (:rot-y (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 16.0)
    (:vel-z (meters 0.033333335))
    (:scalevel-x (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.017777778 -0.017777778)
    (:accel-z (meters 0.00066666666))
    (:friction 0.9)
    (:timer (seconds 3))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:userdata :data (new 'static 'boxed-array :type int32 5 0 0 #x406500 #x408200))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sewer-slide-froth
  :id 1499
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 8)
  :parts ((sp-item 4923 :fade-after (meters 80) :falloff-to (meters 100) :flags (is-3d sp7)))
  )

(defpart 4923
  :init-specs ((:texture (splash-foam level-default-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 0.5)
    (:x (meters -2) (meters 4))
    (:z (meters -1))
    (:scale-x (meters 4) (meters 0.5))
    (:rot-y (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 120.0 50.0)
    (:g :copy r)
    (:b :copy r)
    (:a 0.0)
    (:vel-z (meters 0.033333335))
    (:scalevel-x (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.32)
    (:accel-z (meters 0.00066666666))
    (:friction 0.9 0.03)
    (:timer (seconds 3))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 left-multiply-quat))
    (:userdata :data (new 'static 'boxed-array :type int32 5 0 0 #x406500 #x58300600))
    (:next-time (seconds 0.335))
    (:next-launcher 4924)
    (:rotate-y (degrees 0))
    )
  )

(defpart 4924
  :init-specs ((:fade-a -0.04))
  )

(defpartgroup group-flyingsaw-sparks
  :id 1500
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 10)
  :parts ((sp-item 4925 :flags (sp7)) (sp-item 4926 :flags (sp7)))
  )

(defpart 4925
  :init-specs ((:texture (hitspark level-default-sprite))
    (:num 1.0)
    (:scale-x (meters 0.1) (meters 0.5))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 128.0)
    (:g 128.0)
    (:b 128.0)
    (:a 255.0)
    (:timer (seconds 0.017))
    (:flags (sp-cpuinfo-flag-3))
    )
  )

(defpart 4926
  :init-specs ((:texture (motion-blur-part level-default-sprite))
    (:num 0.5 0.5)
    (:scale-x (meters 0.05) (meters 0.05))
    (:rot-x 4)
    (:scale-y :copy scale-x)
    (:r 128.0)
    (:g 128.0)
    (:b 128.0)
    (:a 255.0)
    (:omega (degrees 0.0225))
    (:vel-y (meters 0.033333335) (meters 0.033333335))
    (:fade-g -0.64)
    (:fade-b -2.56)
    (:fade-a -1.28 -1.28)
    (:accel-y (meters -0.0013333333))
    (:friction 0.9)
    (:timer (seconds 0.335))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
    (:func 'sparticle-motion-blur)
    (:conerot-x (degrees 0) (degrees 360))
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpartgroup group-sew-fan-gust
  :id 1501
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 20)
  :parts ((sp-item 4927 :flags (sp7)))
  )

(defpart 4927
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:num 6.0)
    (:y (meters 1) (meters 0.5))
    (:scale-x (meters 1))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 128.0)
    (:g 128.0)
    (:b 128.0)
    (:a 8.0 8.0)
    (:vel-z (meters 0.1))
    (:scalevel-x (meters 0.013333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.064)
    (:timer (seconds 0.835))
    (:flags (sp-cpuinfo-flag-2))
    (:conerot-x (degrees 0) (degrees 20))
    (:rotate-z (degrees 0) (degrees 3600))
    )
  )

(defpartgroup group-sewer-rising-bubbles
  :id 1502
  :flags (sp0)
  :bounds (static-bspherem 0 0 0 40)
  :parts ((sp-item 4928 :fade-after (meters 100) :falloff-to (meters 200) :flags (sp7)))
  )

(defpart 4928
  :init-specs ((:texture (lakedrop level-default-sprite))
    (:num 0.01 0.5)
    (:x (meters 0) (meters 2))
    (:y (meters 0))
    (:scale-x (meters 0.1))
    (:scale-y :copy scale-x)
    (:r 128.0)
    (:g 128.0)
    (:b 128.0)
    (:a 0.0)
    (:accel-y (meters 0.00083333335))
    (:timer (seconds 3.667))
    (:flags (sp-cpuinfo-flag-0 sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
    (:func 'spt-func-birth-on-bubble-pop)
    (:next-time (seconds 0.017))
    (:next-launcher 4929)
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpart 4929
  :init-specs ((:scale-x (meters 0.2) (meters 0.2))
    (:scale-y :copy scale-x)
    (:fade-a -0.04 0.16)
    (:accel-x (meters -0.00033333333) 1 (meters 0.00066666666))
    (:accel-z (meters -0.00033333333) 1 (meters 0.00066666666))
    (:friction 0.9)
    (:next-time (seconds 0.1) (seconds 0.03))
    (:next-launcher 4929)
    )
  )

;; WARN: Return type mismatch (pointer process) vs none.
(defun spt-func-birth-on-bubble-pop ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 sparticle-launchinfo))
  (when (zero? (-> arg1 timer))
    (cond
      ((logtest? (-> group-sewer-rising-bubbles-pop 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-sewer-rising-bubbles-pop)
       )
      (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-sewer-rising-bubbles-pop)
        )
      )
    )
  (none)
  )

(defpartgroup group-sewer-rising-bubbles-pop
  :id 1503
  :duration (seconds 1.5)
  :linger-duration (seconds 0)
  :flags (sp0)
  :bounds (static-bspherem 0 0 0 40)
  :parts ((sp-item 4930 :fade-after (meters 100) :falloff-to (meters 200) :flags (is-3d sp7) :period (seconds 20) :length (seconds 0.035))
    )
  )

(defpart 4930
  :init-specs ((:texture (splash-foam level-default-sprite))
    (:num 1.0)
    (:scale-x (meters 0.3) (meters 0.3))
    (:rot-y (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 128.0)
    (:g 128.0)
    (:b 128.0)
    (:a 32.0 32.0)
    (:scalevel-x (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.21333334)
    (:timer (seconds 1))
    (:flags (sp-cpuinfo-flag-2))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-sewer-abyss-waterfall-mist
  :id 1504
  :flags (sp0 sp4)
  :bounds (static-bspherem 0 0 0 100)
  :parts ((sp-item 4931 :fade-after (meters 200) :falloff-to (meters 400) :flags (sp7))
    (sp-item 4932 :fade-after (meters 200) :falloff-to (meters 400) :flags (sp7))
    )
  )

(defpart 4932
  :init-specs ((:texture (ceiling-dust sewa-sprite))
    (:num 0.04 0.02)
    (:x (meters 0))
    (:y (meters 0))
    (:z (meters 0))
    (:scale-x (meters 4) (meters 2))
    (:scale-y :copy scale-x)
    (:r 180.0 70.0)
    (:g :copy r)
    (:b :copy r)
    (:a 0.0)
    (:vel-z (meters 0.046666667))
    (:scalevel-x (meters 0.00033333333) (meters 0.0016666667))
    (:scalevel-y (meters 0.0033333334) (meters 0.0033333334))
    (:fade-a 0.021333333 0.021333333)
    (:accel-y (meters -0.0005))
    (:friction 0.99)
    (:timer (seconds 5))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:next-time (seconds 2.5))
    (:next-launcher 4933)
    (:conerot-y (degrees -20) (degrees 40))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4933
  :init-specs ((:fade-a -0.042666666 -0.042666666))
  )

(defpart 4931
  :init-specs ((:texture (big-cloud level-default-sprite))
    (:num 0.2 0.2)
    (:x (meters -5) (meters 10))
    (:y (meters 1))
    (:z (meters -10))
    (:scale-x (meters 6) (meters 2))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 180.0 70.0)
    (:g :copy r)
    (:b :copy r)
    (:a 0.0)
    (:vel-z (meters 0.046666667))
    (:scalevel-x (meters 0.006666667) (meters 0.026666667))
    (:rotvel-z (degrees -0.13333334) (degrees 0.26666668))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.064 0.064)
    (:accel-y (meters -0.00006666667) (meters -0.00006666667))
    (:friction 0.99)
    (:timer (seconds 5))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
    (:next-time (seconds 0.835))
    (:next-launcher 4934)
    (:conerot-y (degrees -30) (degrees 60))
    (:rotate-y (degrees 0))
    )
  )

(defpart 4934
  :init-specs ((:fade-a -0.032 -0.032))
  )
