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

;; name: drill-spool.gc
;; name in dgo: drill-spool
;; dgos: DMI

;; DECOMP BEGINS

(defpartgroup group-drill-crane-explosion
  :id 453
  :duration (seconds 3)
  :linger-duration (seconds 2)
  :flags (use-local-clock)
  :bounds (static-bspherem 0 0 0 640)
  :parts ((sp-item 1996 :period (seconds 32) :length (seconds 0.085))
    (sp-item 1997 :period (seconds 32) :length (seconds 0.035) :offset 10)
    (sp-item 1998 :period (seconds 32) :length (seconds 0.167) :offset 25)
    (sp-item 1999 :period (seconds 32) :length (seconds 0.117) :offset 10)
    (sp-item 2000 :period (seconds 32) :length (seconds 0.167) :offset 15)
    (sp-item 2001 :period (seconds 32) :length (seconds 0.017))
    (sp-item 2002 :period (seconds 32) :length (seconds 0.167) :offset 15)
    (sp-item 2003 :period (seconds 32) :length (seconds 0.017))
    (sp-item 2004 :flags (is-3d) :period (seconds 32) :length (seconds 0.017))
    )
  )

(defpart 2004
  :init-specs ((:texture (water-ring effects))
    (:num 8.0)
    (:scale-x (meters 16))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g :copy r)
    (:b 128.0)
    (:a 136.0)
    (:scalevel-x (meters 2))
    (:rotvel-y (degrees 0.1))
    (:scalevel-y :copy scalevel-x)
    (:fade-r -1.0625)
    (:fade-g -2.125)
    (:fade-b -2.1333334)
    (:fade-a -3.2)
    (:timer (seconds 1.067))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14))
    (:next-time (seconds 0.135))
    (:next-launcher 2005)
    (:rotate-y (degrees 0) (degrees 3600))
    )
  )

(defpart 2005
  :init-specs ((:fade-a -0.06666667))
  )

(defpart 2001
  :init-specs ((:texture (glow effects))
    (:num 1.0)
    (:y (meters -2.5))
    (:scale-x (meters 32))
    (:rot-x (degrees 45))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 96.0)
    (:scalevel-x (meters 0.26666668))
    (:rotvel-z (degrees 0.3))
    (:scalevel-y :copy scalevel-x)
    (:fade-r 0.0)
    (:fade-g -1.28)
    (:fade-b -5.1)
    (:fade-a 0.0)
    (:timer (seconds 0.217))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
    (:userdata 122880.0)
    (:next-time (seconds 0.1))
    (:next-launcher 2006)
    )
  )

(defpart 2006
  :init-specs ((:scalevel-x (meters -0.22857143))
    (:scalevel-y :copy scalevel-x)
    (:fade-r 0.0)
    (:fade-g -3.6571429)
    (:fade-b 0.0)
    (:fade-a -2.7428572)
    )
  )

(defpart 2003
  :init-specs ((:texture (glow-soft effects))
    (:num 1.0)
    (:scale-x (meters 120))
    (:rot-x (degrees 45))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 24.0)
    (:scalevel-x (meters 0.4))
    (:rotvel-z (degrees 0.3))
    (:scalevel-y :copy scalevel-x)
    (:fade-r 0.0)
    (:fade-g -4.266667)
    (:fade-b -4.266667)
    (:fade-a 0.0)
    (:timer (seconds 0.5))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 glow))
    (:userdata 409600.0)
    (:next-time (seconds 0.25))
    (:next-launcher 2007)
    )
  )

(defpart 2007
  :init-specs ((:scalevel-x (meters 0))
    (:scalevel-y :copy scalevel-x)
    (:fade-r -0.85333335)
    (:fade-g -1.7066667)
    (:fade-b -1.7066667)
    (:fade-a -0.64)
    )
  )

(defpart 1999
  :init-specs ((:texture (motion-blur-part effects))
    (:num 16.0)
    (:y (meters 0))
    (:scale-x (meters 2.5))
    (:rot-x 4)
    (:scale-y (meters 0.2) (meters 0.3))
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 64.0 32.0)
    (:omega (degrees 0.0675))
    (:vel-y (meters 0.53333336) (meters 0.33333334))
    (:fade-b -8.0)
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.9 0.08)
    (:timer (seconds 1.5) (seconds 0.997))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
    (:func 'sparticle-motion-blur)
    (:next-time (seconds 0.05))
    (:next-launcher 2008)
    (:conerot-x (degrees 0) (degrees 3600))
    (:conerot-y (degrees 0) (degrees 3600))
    (:rotate-y (degrees 90))
    )
  )

(defpart 2008
  :init-specs ((:r 255.0)
    (:g 255.0)
    (:b 0.0)
    (:fade-r 0.0)
    (:fade-g -2.6133332)
    (:fade-b -1.7066667)
    (:fade-a -0.096 -0.096)
    (:next-time (seconds 0.25))
    (:next-launcher 2009)
    )
  )

(defpart 2009
  :init-specs ((:fade-r 0.0) (:fade-g 0.0) (:fade-b 0.0))
  )

(defpart 2002
  :init-specs ((:texture (explosion-wave effects))
    (:num 5.0)
    (:y (meters -2.5))
    (:scale-x (meters 6) (meters 8))
    (:rot-x 4)
    (:rot-z (degrees 0) (degrees 3600) :store)
    (:scale-y (meters 20) (meters 8))
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 16.0 16.0)
    (:vel-y (meters 0.1) (meters 0.4))
    (:scalevel-x (meters 0.26666668) (meters 0.13333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-r 0.0)
    (:fade-g -0.36)
    (:fade-b -4.24)
    (:fade-a -0.13333334)
    (:friction 0.92 0.02)
    (:timer (seconds 3.335))
    (:flags (sp-cpuinfo-flag-2))
    (:func 'sparticle-motion-blur)
    (:next-time (seconds 0.085))
    (:next-launcher 2010)
    (:conerot-x '*sp-temp*)
    (:conerot-y (degrees 0) (degrees 3600))
    (:rotate-y (degrees 90))
    (:conerot-radius (meters 0) (meters 2))
    )
  )

(defpart 2010
  :init-specs ((:scalevel-x (meters 0.016666668) (meters 0.016666668))
    (:scalevel-y :copy scalevel-x)
    (:fade-r -0.55)
    (:fade-g -2.95)
    (:fade-b -3.3)
    (:next-time (seconds 0.1) (seconds 0.03))
    (:next-launcher 2011)
    )
  )

(defpart 2011
  :init-specs ((:scalevel-x (meters 0.008333334) (meters 0.008333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-r -1.2944444)
    (:fade-g -0.7111111)
    (:fade-b -0.2)
    (:fade-a -0.1 -0.1)
    )
  )

(defpart 2000
  :init-specs ((:texture (explosion-nebula effects))
    (:birth-func 'birth-func-texture-group)
    (:num 16.0 10.0)
    (:y (meters -2.5))
    (:scale-x (meters 6) (meters 4))
    (:rot-z (degrees 0))
    (:scale-y (meters 12.8) (meters 2.4))
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 32.0 32.0)
    (:vel-y (meters 0.06666667) (meters 0.2))
    (:scalevel-x (meters 0.26666668) (meters 0.2))
    (:rotvel-z (degrees -0.3) (degrees 0.6))
    (:scalevel-y :copy scalevel-x)
    (:fade-r 0.0)
    (:fade-g -0.36)
    (:fade-b -4.24)
    (:fade-a -0.32)
    (:friction 0.94)
    (:timer (seconds 3.335))
    (:flags (sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc03300))
    (:next-time (seconds 0.085))
    (:next-launcher 2012)
    (:conerot-x (degrees 0) (degrees 3600))
    (:conerot-y (degrees 0) (degrees 3600))
    (:rotate-y (degrees 90))
    (:conerot-radius (meters 0) (meters 8))
    )
  )

(defpart 2012
  :init-specs ((:fade-r 0.0) (:fade-g 0.0) (:fade-b 0.0) (:next-time (seconds 0.017) (seconds 0.065)) (:next-launcher 2013))
  )

(defpart 2013
  :init-specs ((:scalevel-x (meters 0.016666668) (meters 0.016666668))
    (:scalevel-y :copy scalevel-x)
    (:fade-r -0.44)
    (:fade-g -2.36)
    (:fade-b -2.64)
    (:next-time (seconds 0.117) (seconds 0.047))
    (:next-launcher 2014)
    )
  )

(defpart 2014
  :init-specs ((:scalevel-x (meters 0.008333334) (meters 0.008333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-r -1.2)
    (:fade-g -0.7111111)
    (:fade-b -0.2)
    (:fade-a -0.06545454 -0.06545454)
    (:next-time (seconds 0.5) (seconds 0.097))
    (:next-launcher 2015)
    )
  )

(defpart 2015
  :init-specs ((:fade-r 0.0) (:fade-g 0.0) (:fade-b 0.0) (:fade-a -0.1125))
  )

(defpart 1998
  :init-specs ((:texture (specs effects))
    (:num 16.0 4.0)
    (:x (meters 0.25))
    (:y (meters -2.5))
    (:scale-x (meters 4) (meters 4))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 32.0 48.0)
    (:vel-y (meters 0.13333334) (meters 0.8))
    (:scalevel-x (meters 0.02) (meters 0.02))
    (:rotvel-z (degrees -0.12) (degrees 0.24))
    (:scalevel-y :copy scalevel-x)
    (:fade-r 0.0)
    (:fade-g -0.18)
    (:fade-b -2.12)
    (:accel-y (meters -0.0013333333) (meters -0.0056666667))
    (:friction 0.84 0.02)
    (:timer (seconds 10))
    (:flags (sp-cpuinfo-flag-2))
    (:next-time (seconds 0.117) (seconds 0.047))
    (:next-launcher 2016)
    (:conerot-x (degrees 0) (degrees 3600))
    (:conerot-y (degrees 0) (degrees 3600))
    (:rotate-y (degrees 90))
    (:conerot-radius (meters 3) (meters 5))
    )
  )

(defpart 2016
  :init-specs ((:scalevel-x (meters 0.0016666667))
    (:scalevel-y :copy scalevel-x)
    (:fade-r 0.0)
    (:fade-g 0.02)
    (:fade-b 0.23555556)
    (:next-time (seconds 0.15) (seconds 0.047))
    (:next-launcher 2017)
    )
  )

(defpart 2017
  :init-specs ((:fade-r -0.5543478) (:fade-g -0.5543478) (:fade-b -0.5543478) (:fade-a -0.13333334 -0.10666667))
  )

(defpart 1996
  :init-specs ((:texture (bigpuff effects))
    (:num 12.0 8.0)
    (:y (meters -2.5))
    (:scale-x (meters 16.5) (meters 16))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 70.0 20.0)
    (:g 70.0 20.0)
    (:b 70.0 20.0)
    (:a 0.0 40.0)
    (:vel-y (meters 0.06666667) (meters 0.33333334))
    (:scalevel-x (meters 0.033333335) (meters 0.086666666))
    (:rotvel-z (degrees -0.12) (degrees 0.24))
    (:scalevel-y :copy scalevel-x)
    (:fade-r 3.3)
    (:fade-g 3.12)
    (:fade-b 1.18)
    (:fade-a 1.76)
    (:friction 0.89)
    (:timer (seconds 2.367))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
    (:next-time (seconds 0.117) (seconds 0.047))
    (:next-launcher 2018)
    (:conerot-x (degrees 0) (degrees 3600))
    (:conerot-y (degrees 0) (degrees 3600))
    (:rotate-y (degrees 90))
    (:conerot-radius (meters 0) (meters 16))
    )
  )

(defpart 2018
  :init-specs ((:scalevel-x (meters 0.0033333334))
    (:scalevel-y :copy scalevel-x)
    (:fade-r -0.53333336)
    (:fade-g -1.9666667)
    (:fade-b -2.2)
    (:fade-a -0.41666666)
    (:next-time (seconds 0.15) (seconds 0.047))
    (:next-launcher 2019)
    )
  )

(defpart 2019
  :init-specs ((:scalevel-x (meters 0))
    (:scalevel-y :copy scalevel-x)
    (:fade-r -0.38833332)
    (:fade-g -0.21333334)
    (:fade-b -0.028333334)
    (:fade-a -0.38833332)
    )
  )

(defpart 1997
  :init-specs ((:texture (flamingstick effects))
    (:num 8.0)
    (:y (meters -2.5))
    (:scale-x (meters 16) (meters 16))
    (:rot-x 4)
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y (meters 1.5) (meters 0.5))
    (:r 128.0 128.0)
    (:g 96.0)
    (:b 64.0)
    (:a 64.0 64.0)
    (:scalevel-x (meters 0.4) (meters 0.4))
    (:fade-g 1.6)
    (:fade-b 3.2)
    (:fade-a -0.9142857)
    (:timer (seconds 0.3))
    (:flags (sp-cpuinfo-flag-2))
    )
  )

(defpartgroup group-drill-crane-dust-explosion
  :id 454
  :duration (seconds 3)
  :linger-duration (seconds 2)
  :flags (use-local-clock)
  :bounds (static-bspherem 0 0 0 640)
  :parts ((sp-item 2020 :period (seconds 32) :length (seconds 0.085))
    (sp-item 2021 :period (seconds 32) :length (seconds 0.035) :offset 10)
    (sp-item 2022 :period (seconds 32) :length (seconds 0.335) :offset 25)
    (sp-item 2023 :period (seconds 32) :length (seconds 0.117) :offset 10)
    (sp-item 2024 :period (seconds 32) :length (seconds 0.167) :offset 15)
    (sp-item 2025 :period (seconds 32) :length (seconds 0.167) :offset 15)
    )
  )

(defpart 2023
  :init-specs ((:texture (hotdot effects))
    (:num 32.0)
    (:y (meters -3.5) (meters 2))
    (:scale-x (meters 3.5))
    (:rot-x 4)
    (:scale-y (meters 0.3) (meters 0.5))
    (:r 64.0 128.0)
    (:g :copy r)
    (:b :copy g)
    (:a 64.0 32.0)
    (:omega (degrees 0.0675))
    (:vel-y (meters 0.5) (meters 0.6666667))
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.9 0.08)
    (:timer (seconds 1.5) (seconds 0.997))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-12))
    (:func 'sparticle-motion-blur)
    (:next-time (seconds 0.05))
    (:next-launcher 2026)
    (:conerot-x (degrees 0) (degrees 140))
    (:conerot-y (degrees 0) (degrees 3600))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2026
  :init-specs ((:fade-a -0.096 -0.096))
  )

(defpart 2025
  :init-specs ((:texture (explosion-wave effects))
    (:num 8.0 5.0)
    (:y (meters -2.5))
    (:scale-x (meters 13) (meters 12))
    (:rot-x 4)
    (:rot-z (degrees 0) (degrees 360) :store)
    (:scale-y (meters 18) (meters 14))
    (:r 64.0 128.0)
    (:g :copy r)
    (:b :copy g)
    (:a 16.0 16.0)
    (:vel-y (meters 0.2) (meters 0.5))
    (:scalevel-x (meters 0.06666667) (meters 0.06666667))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.26666668)
    (:friction 0.92 0.02)
    (:timer (seconds 3.335))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-12))
    (:func 'sparticle-motion-blur)
    (:next-time (seconds 0.085))
    (:next-launcher 2027)
    (:conerot-x '*sp-temp*)
    (:conerot-y (degrees 0) (degrees 3600))
    (:rotate-y (degrees 0))
    (:conerot-radius (meters 0) (meters 2))
    )
  )

(defpart 2027
  :init-specs ((:scalevel-x (meters 0.033333335) (meters 0.033333335))
    (:scalevel-y :copy scalevel-x)
    (:next-time (seconds 0.1) (seconds 0.03))
    (:next-launcher 2028)
    )
  )

(defpart 2028
  :init-specs ((:scalevel-x (meters 0.016666668) (meters 0.016666668))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.225 -0.225)
    )
  )

(defpart 2024
  :init-specs ((:birth-func 'birth-func-texture-group)
    (:num 8.0 5.0)
    (:y (meters -2.5))
    (:scale-x (meters 13) (meters 12))
    (:rot-z (degrees 0) (degrees 3600) :store)
    (:scale-y (meters 18) (meters 14))
    (:r 64.0 128.0)
    (:g :copy r)
    (:b :copy g)
    (:a 16.0 16.0)
    (:vel-y (meters 0.2) (meters 0.5))
    (:scalevel-x (meters 0.06666667) (meters 0.06666667))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -0.26666668)
    (:friction 0.92 0.02)
    (:timer (seconds 3.335))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-12))
    (:userdata :data (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc03300))
    (:next-time (seconds 0.085))
    (:next-launcher 2027)
    (:conerot-x '*sp-temp*)
    (:conerot-y (degrees 0) (degrees 3600))
    (:rotate-y (degrees 0))
    (:conerot-radius (meters 0) (meters 2))
    )
  )

(defpart 2022
  :init-specs ((:texture (specs effects))
    (:num 6.0 8.0)
    (:x (meters 0.25))
    (:y (meters -2.5))
    (:scale-x (meters 3) (meters 5))
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y :copy scale-x)
    (:r 64.0 128.0)
    (:g :copy r)
    (:b :copy g)
    (:a 16.0 48.0)
    (:vel-y (meters 0.33333334) (meters 0.5))
    (:scalevel-x (meters 0.033333335) (meters 0.033333335))
    (:rotvel-z (degrees -0.12) (degrees 0.24))
    (:scalevel-y :copy scalevel-x)
    (:accel-y (meters -0.00033333333) (meters -0.0023333333))
    (:friction 0.88 0.02)
    (:timer (seconds 10))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-12))
    (:next-time (seconds 0.117) (seconds 0.047))
    (:next-launcher 2029)
    (:conerot-x (degrees 0) (degrees 3600))
    (:conerot-y (degrees 0) (degrees 3600))
    (:rotate-y (degrees 0))
    (:conerot-radius (meters 5) (meters 20))
    )
  )

(defpart 2029
  :init-specs ((:scalevel-x (meters 0.016666668))
    (:scalevel-y :copy scalevel-x)
    (:next-time (seconds 0.15) (seconds 0.047))
    (:next-launcher 2030)
    )
  )

(defpart 2030
  :init-specs ((:scalevel-x (meters 0.006666667)) (:scalevel-y :copy scalevel-x) (:fade-a -0.10666667 -0.10666667))
  )

(defpart 2020
  :init-specs ((:texture (bigpuff effects))
    (:num 16.0 4.0)
    (:x (meters 0) (meters 0.6))
    (:y (meters -2.5))
    (:scale-x (meters 16.5) (meters 20))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 64.0 128.0)
    (:g :copy r)
    (:b :copy g)
    (:a 0.0)
    (:vel-y (meters 0.33333334) (meters 0.4))
    (:scalevel-x (meters 0.06666667) (meters 0.06666667))
    (:rotvel-z (degrees -0.12) (degrees 0.24))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.32 0.32)
    (:friction 0.89 0.04)
    (:timer (seconds 8))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-12))
    (:next-time (seconds 0.117) (seconds 0.047))
    (:next-launcher 2031)
    (:conerot-x (degrees 0) (degrees 3600))
    (:conerot-y (degrees 0) (degrees 3600))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2031
  :init-specs ((:scalevel-x (meters 0.033333335))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.0)
    (:next-time (seconds 2) (seconds 1.997))
    (:next-launcher 2032)
    )
  )

(defpart 2032
  :init-specs ((:scalevel-x (meters 0.016666668)) (:scalevel-y :copy scalevel-x) (:fade-a -0.026666667 -0.026666667))
  )

(defpart 2021
  :init-specs ((:texture (flamingstick effects))
    (:num 8.0)
    (:y (meters -2.5))
    (:scale-x (meters 16) (meters 16))
    (:rot-x 4)
    (:rot-z (degrees 0) (degrees 360))
    (:scale-y (meters 1) (meters 0.5))
    (:r 64.0 128.0)
    (:g :copy r)
    (:b :copy g)
    (:a 64.0 64.0)
    (:scalevel-x (meters 0.26666668) (meters 0.33333334))
    (:fade-a -0.7111111)
    (:timer (seconds 0.3))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-12))
    )
  )

(defpartgroup group-drill-crane-trailer-small
  :id 455
  :bounds (static-bspherem 0 0 0 4)
  :parts ((sp-item 2033))
  )

(defpart 2033
  :init-specs ((:texture (bigpuff effects))
    (:num 0.0 1.0)
    (:scale-x (meters 3) (meters 5))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 3) (meters 5))
    (:r 64.0 128.0)
    (:g :copy r)
    (:b :copy g)
    (:a 0.0)
    (:scalevel-x (meters 0.006666667) (meters 0.01))
    (:rotvel-z (degrees -0.3) (degrees 0.6))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 0.8 1.6)
    (:accel-y (meters -0.00033333333) (meters -0.00033333333))
    (:timer (seconds 2.167))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-12))
    (:next-time (seconds 0.067))
    (:next-launcher 2034)
    (:conerot-x (degrees 0) (degrees 3600))
    (:conerot-y (degrees 0) (degrees 3600))
    (:conerot-radius (meters -1.5) (meters 5))
    )
  )

(defpartgroup group-drill-crane-trailer-medium
  :id 456
  :bounds (static-bspherem 0 0 0 6)
  :parts ((sp-item 2035))
  )

(defpart 2035
  :init-specs ((:texture (bigpuff effects))
    (:num 0.0 1.0)
    (:scale-x (meters 6) (meters 6))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 6) (meters 6))
    (:r 64.0 128.0)
    (:g :copy r)
    (:b :copy g)
    (:a 0.0)
    (:scalevel-x (meters 0.006666667) (meters 0.013333334))
    (:rotvel-z (degrees -0.3) (degrees 0.6))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 1.6 1.6)
    (:accel-y (meters -0.00033333333) (meters -0.00033333333))
    (:timer (seconds 2.167))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-12))
    (:next-time (seconds 0.067))
    (:next-launcher 2034)
    (:conerot-x (degrees 0) (degrees 3600))
    (:conerot-y (degrees 0) (degrees 3600))
    (:conerot-radius (meters -1) (meters 4))
    )
  )

(defpart 2034
  :init-specs ((:fade-a -0.10666667 -0.42666668))
  )

(defpartgroup group-drill-crane-trailer-large
  :id 457
  :bounds (static-bspherem 0 0 0 12)
  :parts ((sp-item 2036))
  )

(defpart 2036
  :init-specs ((:texture (bigpuff effects))
    (:num 0.0 1.0)
    (:scale-x (meters 12) (meters 12))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 8) (meters 8))
    (:r 64.0 128.0)
    (:g :copy r)
    (:b :copy g)
    (:a 0.0)
    (:scalevel-x (meters 0.01) (meters 0.02))
    (:rotvel-z (degrees -0.3) (degrees 0.6))
    (:scalevel-y :copy scalevel-x)
    (:fade-a 1.6 2.4)
    (:accel-y (meters -0.00033333333) (meters -0.00033333333))
    (:timer (seconds 2.167))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-12))
    (:next-time (seconds 0.067))
    (:next-launcher 2034)
    (:conerot-x (degrees 0) (degrees 3600))
    (:conerot-y (degrees 0) (degrees 3600))
    (:conerot-radius (meters -2) (meters 6))
    )
  )

(deftype drill-wall (process-focusable)
  ((anim       spool-anim)
   (art-name   string)
   (egg-group  actor-group)
   )
  (:state-methods
    idle
    (hit symbol)
    )
  )


(defskelgroup skel-drill-wall drill-wall drill-wall-lod0-jg -1
              ((drill-wall-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 10)
              :origin-joint-index 4
              )

(defstate idle (drill-wall)
  :virtual #t
  :event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
    (local-vars (v1-2 symbol))
    (case message
      (('trigger)
       (let ((v1-1 (-> self egg-group)))
         (when v1-1
           0
           (dotimes (a0-4 (-> v1-1 length))
             (when (not (logtest? (-> v1-1 data a0-4 actor extra perm status) (entity-perm-status subtask-complete)))
               (set! v1-2 #f)
               (goto cfg-10)
               )
             )
           )
         )
       (set! v1-2 #t)
       (label cfg-10)
       (when v1-2
         (logclear! (-> self mask) (process-mask actor-pause))
         (go-virtual hit (the-as symbol (if (>= argc 1)
                                            (-> block param 0)
                                            (the-as uint #f)
                                            )
                                 )
                     )
         )
       )
      )
    )
  :code (behavior ()
    (add-process *gui-control* self (gui-channel art-load) (gui-action queue) (-> self anim name) -99.0 0)
    (until #f
      (transform-post)
      (logior! (-> self mask) (process-mask sleep))
      (suspend)
      )
    #f
    )
  )

(defstate hit (drill-wall)
  :virtual #t
  :exit (behavior ()
    (ja-abort-spooled-anim (-> self anim) (the-as art-joint-anim #f) -1)
    )
  :trans (-> (method-of-type drill-wall idle) trans)
  :code (behavior ((arg0 symbol))
    (-> self draw bounds w)
    (let ((v1-2 (-> self root root-prim)))
      (set! (-> v1-2 prim-core collide-as) (collide-spec))
      (set! (-> v1-2 prim-core collide-with) (collide-spec))
      )
    0
    (set! (-> self draw bounds w) 573440.0)
    (set! (-> self root root-prim local-sphere w) 573440.0)
    (process-entity-status! self (entity-perm-status subtask-complete) #t)
    (let* ((gp-0 (-> self draw art-group))
           (s4-0 (method-of-object gp-0 get-art-by-name-method))
           )
      (format (clear *temp-string*) "~S-end" (-> self art-name))
      (let ((gp-1 (s4-0 gp-0 *temp-string* art-joint-anim)))
        (when (not arg0)
          (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000)))
            (when s5-1
              (let ((t9-5 (method-of-type part-tracker activate)))
                (t9-5
                  (the-as part-tracker s5-1)
                  *entity-pool*
                  (symbol->string (-> part-tracker symbol))
                  (the-as pointer #x70004000)
                  )
                )
              (let ((t9-6 run-function-in-process)
                    (a0-7 s5-1)
                    (a1-5 part-tracker-init)
                    (a2-7 (-> *part-group-id-table* 421))
                    (a3-1 0)
                    (t0-0 #f)
                    (t1-0 #f)
                    (t2-0 #f)
                    (t3-0 *launch-matrix*)
                    )
                (set! (-> t3-0 trans quad) (-> self root trans quad))
                ((the-as (function object object object object object object object object none) t9-6)
                 a0-7
                 a1-5
                 a2-7
                 a3-1
                 t0-0
                 t1-0
                 t2-0
                 t3-0
                 )
                )
              (-> s5-1 ppointer)
              )
            )
          (sound-play "egg-wall-break" :position (-> self root trans))
          ;; og:preserve-this added cast
          (ja-play-spooled-anim (-> self anim) (ja-group) (the-as art-joint-anim gp-1) (the-as (function process-drawable symbol) false-func))
          )
        (ja-channel-set! 1)
        ;; og:preserve-this added cast
        (set! (-> self skel root-channel 0 frame-group) (the-as art-joint-anim gp-1))
        )
      )
    (suspend)
    (logior! (-> self mask) (process-mask sleep))
    (suspend)
    0
    )
  :post transform-post
  )

;; WARN: Return type mismatch object vs none.
(defmethod init-from-entity! ((this drill-wall) (arg0 entity-actor))
  "Typically the method that does the initial setup on the process, potentially using the [[entity-actor]] provided as part of that.
   This commonly includes things such as:
   - stack size
   - collision information
   - loading the skeleton group / bones
   - sounds"
  (local-vars (sv-16 res-tag))
  (stack-size-set! (-> this main-thread) 512)
  (logior! (-> this mask) (process-mask collectable))
  (let ((s3-0 ((method-of-type res-lump get-property-struct)
               (-> this entity)
               'art-name
               'interp
               -1000000000.0
               "drill-wall-1"
               (the-as (pointer res-tag) #f)
               *res-static-buf*
               )
              )
        (s4-0 (art-group-get-by-name *level* "skel-drill-wall" (the-as (pointer uint32) #f)))
        )
    (set! (-> this art-name) (the-as string s3-0))
    (let ((s2-0 (new 'process 'collide-shape-moving this (collide-list-enum usually-hit-by-player))))
      (set! (-> s2-0 dynam) (copy *standard-dynamics* 'process))
      (set! (-> s2-0 reaction) cshape-reaction-default)
      (set! (-> s2-0 no-reaction)
            (the-as (function collide-shape-moving collide-query vector vector object) nothing)
            )
      (let ((s1-0 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 0) (the-as uint 0))))
        (set! (-> s1-0 prim-core collide-as) (collide-spec obstacle pusher))
        (set! (-> s1-0 prim-core collide-with) (collide-spec jak player-list))
        (set! (-> s1-0 prim-core action) (collide-action solid))
        (set! (-> s1-0 transform-index) 4)
        (set-vector! (-> s1-0 local-sphere) 0.0 0.0 0.0 40960.0)
        (set! (-> s2-0 total-prims) (the-as uint 1))
        (set! (-> s2-0 root-prim) s1-0)
        )
      (pusher-init s2-0)
      (set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w)))
      (let ((v1-22 (-> s2-0 root-prim)))
        (set! (-> s2-0 backup-collide-as) (-> v1-22 prim-core collide-as))
        (set! (-> s2-0 backup-collide-with) (-> v1-22 prim-core collide-with))
        )
      (set! (-> this root) s2-0)
      )
    (if (string= (-> this art-name) "drill-wall-1")
        (set! (-> this anim)
              (new 'static 'spool-anim :name "drill-wall-1" :anim-name "1-break" :parts 1 :command-list '())
              )
        (go process-drawable-art-error (the-as string s3-0))
        )
    (process-drawable-from-entity! this arg0)
    (initialize-skeleton this (the-as skeleton-group s4-0) (the-as pair 0))
    )
  (ja-channel-set! 1)
  (let* ((s5-1 (-> this skel root-channel 0))
         (s4-1 (-> this draw art-group))
         (s3-1 (method-of-object s4-1 get-art-by-name-method))
         )
    (format (clear *temp-string*) "~S-idle" (-> this art-name))
    (set! (-> s5-1 frame-group) (the-as art-joint-anim (s3-1 s4-1 *temp-string* (the-as type #f))))
    )
  (set! sv-16 (new 'static 'res-tag))
  (let ((v1-35 (res-lump-data (-> this entity) 'actor-groups (pointer actor-group) :tag-ptr (& sv-16))))
    (cond
      ((and v1-35 (nonzero? (-> sv-16 elt-count)))
       (set! (-> this egg-group) (-> v1-35 0))
       )
      (else
        )
      )
    )
  (cond
    ((and (-> this entity) (logtest? (-> this entity extra perm status) (entity-perm-status subtask-complete)))
     (logclear! (-> this mask) (process-mask actor-pause))
     (go (method-of-object this hit) #t)
     )
    (else
      (go (method-of-object this idle))
      )
    )
  (none)
  )

(deftype drill-crane (process-focusable)
  ((anim       spool-anim)
   (art-name   string)
   (egg-group  actor-group)
   )
  (:state-methods
    idle
    (hit symbol)
    )
  )


(defskelgroup skel-drill-crane drill-crane drill-crane-lod0-jg drill-crane-idle-ja
              ((drill-crane-lod0-mg (meters 20)) (drill-crane-lod1-mg (meters 999999)))
              :bounds (static-spherem 0 0 -20 140)
              :origin-joint-index 8
              )

(defskelgroup skel-drill-crane-a drill-crane drill-crane-a-lod0-jg drill-crane-a-idle-ja
              ((drill-crane-a-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 200)
              :origin-joint-index 30
              )

(defskelgroup skel-drill-crane-b drill-crane drill-crane-b-lod0-jg drill-crane-b-idle-ja
              ((drill-crane-b-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 240)
              :origin-joint-index 30
              )

(defskelgroup skel-drill-crane-c drill-crane drill-crane-c-lod0-jg drill-crane-c-idle-ja
              ((drill-crane-c-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 200)
              :origin-joint-index 30
              )

(defskelgroup skel-drill-crane-d drill-crane drill-crane-d-lod0-jg drill-crane-d-idle-ja
              ((drill-crane-d-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 200)
              :origin-joint-index 29
              )

(defstate idle (drill-crane)
  :virtual #t
  :event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
    (local-vars (v1-2 symbol))
    (case message
      (('trigger)
       (let ((v1-1 (-> self egg-group)))
         (when v1-1
           0
           (dotimes (a0-5 (-> v1-1 length))
             (when (not (logtest? (-> v1-1 data a0-5 actor extra perm status) (entity-perm-status subtask-complete)))
               (set! v1-2 #f)
               (goto cfg-10)
               )
             )
           )
         )
       (set! v1-2 #t)
       (label cfg-10)
       (when v1-2
         (logclear! (-> self mask) (process-mask actor-pause))
         (go-virtual hit #f)
         )
       )
      (('die)
       (logclear! (-> self mask) (process-mask actor-pause))
       (go-virtual hit #f)
       )
      )
    )
  :code (behavior ()
    (add-process *gui-control* self (gui-channel art-load) (gui-action queue) (-> self anim name) -99.0 0)
    (until #f
      (transform-post)
      (logior! (-> self mask) (process-mask sleep))
      (suspend)
      )
    #f
    )
  )

(defstate hit (drill-crane)
  :virtual #t
  :exit (behavior ()
    (ja-abort-spooled-anim (-> self anim) (the-as art-joint-anim #f) -1)
    )
  :trans (-> (method-of-type drill-crane idle) trans)
  :code (behavior ((arg0 symbol))
    (-> self draw bounds w)
    (set! (-> self draw bounds w) 573440.0)
    (set! (-> self draw force-lod) 0)
    (process-entity-status! self (entity-perm-status subtask-complete) #t)
    (let ((s5-0 (get-art-by-name (-> self draw art-group) "end" art-joint-anim)))
      (when (not arg0)
        ((lambda :behavior drill-crane
           ()
           (let ((gp-0 (process-spawn
                         manipy
                         :init manipy-init
                         (-> self root trans)
                         (-> self entity)
                         (art-group-get-by-name *level* "skel-drill-crane-a" (the-as (pointer uint32) #f))
                         #f
                         0
                         :name "drill-crane-a"
                         :to self
                         )
                       )
                 )
             (send-event (ppointer->process gp-0) 'anim-mode 'clone-anim)
             (send-event (ppointer->process gp-0) 'prefix "a-")
             )
           (let ((gp-2 (process-spawn
                         manipy
                         :init manipy-init
                         (-> self root trans)
                         (-> self entity)
                         (art-group-get-by-name *level* "skel-drill-crane-b" (the-as (pointer uint32) #f))
                         #f
                         0
                         :name "drill-crane-b"
                         :to self
                         )
                       )
                 )
             (send-event (ppointer->process gp-2) 'anim-mode 'clone-anim)
             (send-event (ppointer->process gp-2) 'prefix "b-")
             )
           (let ((gp-4 (process-spawn
                         manipy
                         :init manipy-init
                         (-> self root trans)
                         (-> self entity)
                         (art-group-get-by-name *level* "skel-drill-crane-c" (the-as (pointer uint32) #f))
                         #f
                         0
                         :name "drill-crane-c"
                         :to self
                         )
                       )
                 )
             (send-event (ppointer->process gp-4) 'anim-mode 'clone-anim)
             (send-event (ppointer->process gp-4) 'prefix "c-")
             )
           (let ((gp-6 (process-spawn
                         manipy
                         :init manipy-init
                         (-> self root trans)
                         (-> self entity)
                         (art-group-get-by-name *level* "skel-drill-crane-d" (the-as (pointer uint32) #f))
                         #f
                         0
                         :name "drill-crane-d"
                         :to self
                         )
                       )
                 )
             (send-event (ppointer->process gp-6) 'anim-mode 'clone-anim)
             (send-event (ppointer->process gp-6) 'prefix "d-")
             )
           (none)
           )
         )
        (ja-play-spooled-anim (-> self anim) (ja-group) s5-0 (the-as (function process-drawable symbol) false-func))
        )
      (ja-channel-set! 1)
      (set! (-> self skel root-channel 0 frame-group) s5-0)
      )
    (when (not arg0)
      (while (and *target* (focus-test? *target* ignore))
        (suspend)
        )
      (while (-> self child)
        (deactivate (-> self child 0))
        )
      )
    (suspend)
    (logior! (-> self mask) (process-mask sleep))
    (suspend)
    0
    )
  :post transform-post
  )

;; WARN: Return type mismatch object vs none.
(defmethod init-from-entity! ((this drill-crane) (arg0 entity-actor))
  "Typically the method that does the initial setup on the process, potentially using the [[entity-actor]] provided as part of that.
   This commonly includes things such as:
   - stack size
   - collision information
   - loading the skeleton group / bones
   - sounds"
  (local-vars (sv-16 res-tag) (sv-32 res-tag))
  ;; og:preserve-this increased from 512
  (stack-size-set! (-> this main-thread) 2048)
  (logior! (-> this mask) (process-mask collectable))
  (let ((s3-0 "drill-crane-break")
        (s4-0 (art-group-get-by-name *level* "skel-drill-crane" (the-as (pointer uint32) #f)))
        )
    (set! (-> this art-name) s3-0)
    (let ((s3-1 (new 'process 'collide-shape-moving this (collide-list-enum usually-hit-by-player))))
      (set! (-> s3-1 dynam) (copy *standard-dynamics* 'process))
      (set! (-> s3-1 reaction) cshape-reaction-default)
      (set! (-> s3-1 no-reaction)
            (the-as (function collide-shape-moving collide-query vector vector object) nothing)
            )
      (let ((s2-0 (new 'process 'collide-shape-prim-mesh s3-1 (the-as uint 0) (the-as uint 0))))
        (set! (-> s2-0 prim-core collide-as) (collide-spec obstacle pusher))
        (set! (-> s2-0 prim-core collide-with) (collide-spec jak player-list))
        (set! (-> s2-0 prim-core action) (collide-action solid))
        (set! (-> s2-0 transform-index) 9)
        (set-vector! (-> s2-0 local-sphere) 0.0 102400.0 0.0 327680.0)
        (set! (-> s3-1 total-prims) (the-as uint 1))
        (set! (-> s3-1 root-prim) s2-0)
        )
      (pusher-init s3-1)
      (set! (-> s3-1 nav-radius) (* 0.75 (-> s3-1 root-prim local-sphere w)))
      (let ((v1-21 (-> s3-1 root-prim)))
        (set! (-> s3-1 backup-collide-as) (-> v1-21 prim-core collide-as))
        (set! (-> s3-1 backup-collide-with) (-> v1-21 prim-core collide-with))
        )
      (set! (-> this root) s3-1)
      )
    (set! (-> this anim)
          (new 'static 'spool-anim :name "drill-crane-break" :anim-name "break" :parts 3 :command-list '())
          )
    (process-drawable-from-entity! this arg0)
    (initialize-skeleton this (the-as skeleton-group s4-0) (the-as pair 0))
    )
  (set! (-> this draw force-lod) 1)
  (let ((s4-1 (-> this root)))
    (set! sv-16 (new 'static 'res-tag))
    (let ((v1-28 (res-lump-data arg0 'scale-mult (pointer float) :tag-ptr (& sv-16))))
      (when v1-28
        (set! (-> s4-1 scale x) (* (-> s4-1 scale x) (-> v1-28 0)))
        (set! (-> s4-1 scale y) (* (-> s4-1 scale y) (-> v1-28 1)))
        (set! (-> s4-1 scale z) (* (-> s4-1 scale z) (-> v1-28 2)))
        )
      )
    )
  (set! sv-32 (new 'static 'res-tag))
  (let ((v1-30 (res-lump-data (-> this entity) 'actor-groups pointer :tag-ptr (& sv-32))))
    (cond
      ((and v1-30 (nonzero? (-> sv-32 elt-count)))
       (set! (-> this egg-group) (the-as actor-group (-> (the-as (pointer uint32) v1-30))))
       )
      (else
        )
      )
    )
  (cond
    ((or (and (-> this entity) (logtest? (-> this entity extra perm status) (entity-perm-status subtask-complete)))
         (task-node-closed? (game-task-node drill-eggs-resolution))
         )
     (logclear! (-> this mask) (process-mask actor-pause))
     (go (method-of-object this hit) #t)
     )
    (else
      (go (method-of-object this idle))
      )
    )
  (none)
  )
