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

;; name: gun-dummy.gc
;; name in dgo: gun-dummy
;; dgos: GGA

;; +++gun-dummy:tpath-command
(defenum tpath-command
  :type uint8
  (begin) ;; kinda a guess
  (arise)
  (translate)
  (wait)
  (align-with-track)
  (lower)
  (end) ;; kinda a guess
  )
;; ---gun-dummy:tpath-command

(declare-type training-manager process)

;; +++gun-dummy:tpath-flags
(defenum tpath-flags
  :type uint8
  :bitfield #t
  (need-to-spawn)
  (broken)
  (citizen)
  (bonus)
  (tpath-rand)
  (big)
  (peace)
  )
;; ---gun-dummy:tpath-flags


;; DECOMP BEGINS

(defpartgroup group-gun-dummy-sparks
  :id 519
  :bounds (static-bspherem 0 0 0 2)
  :parts ((sp-item 2295 :fade-after (meters 50) :falloff-to (meters 100)) (sp-item 2296 :fade-after (meters 50)))
  )

(defpart 2295
  :init-specs ((:texture (motion-blur-part effects))
    (:num 2.0 4.0)
    (:scale-x (meters 2.5))
    (:rot-x 4)
    (:scale-y (meters 0.04) (meters 0.03))
    (:r 255.0)
    (:g 128.0 128.0)
    (:b 0.0 128.0)
    (:a 128.0)
    (:omega (degrees 0.01125) (degrees 0.01125))
    (:vel-y (meters 0.1) (meters 0.06666667))
    (:fade-g -2.55 -2.55)
    (:fade-b -8.0)
    (:fade-a -0.64 -0.64)
    (:friction 0.8 0.02)
    (:timer (seconds 0.335))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
    (:func 'sparticle-motion-blur)
    (:conerot-x (degrees 0) (degrees 80))
    (:conerot-y (degrees 0) (degrees 3600))
    )
  )

(defpart 2296
  :init-specs ((:texture (glow effects))
    (:num 1.0)
    (:scale-x (meters 0.25))
    (:rot-x (degrees 0.225))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 128.0 128.0)
    (:b 0.0)
    (:a 96.0 16.0)
    (:omega (degrees 1136.25))
    (:scalevel-x (meters 0.08))
    (:scalevel-y :copy scalevel-x)
    (:fade-g -10.2)
    (:fade-a -4.48)
    (:timer (seconds 0.085))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
    (:userdata 0.0)
    )
  )

(defpartgroup group-gun-dummy-a
  :id 520
  :duration (seconds 8)
  :flags (use-local-clock unk-6 unk-7)
  :bounds (static-bspherem 0 0 0 15)
  :rotate ((degrees 0) (degrees 90) (degrees 0))
  :scale (1.0 0.83 1.2)
  :parts ((sp-item 2297 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.035))
    (sp-item 2298 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2299 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2300 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2301 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2302 :period (seconds 4) :length (seconds 0.017))
    )
  )

(defpart 2302
  :init-specs ((:texture (glow effects))
    (:num 1.0)
    (:y (meters 1.5))
    (:scale-x (meters 5))
    (:rot-x (degrees 0.675))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 64.0 64.0)
    (:g 128.0 64.0)
    (:b 192.0)
    (:a 64.0)
    (:omega (degrees 1136.25))
    (:scalevel-x (meters 0.2))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -2.56)
    (:timer (seconds 0.085))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
    (:userdata 1024.0)
    )
  )

(defpart 2299
  :init-specs ((:texture (bigpuff effects))
    (:num 12.0 3.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 2) (meters 2))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 2) (meters 2))
    (:r 64.0 32.0)
    (:g 96.0 32.0)
    (:b 96.0 32.0)
    (:a 16.0 8.0)
    (:vel-y (meters 0.05) (meters 0.033333335))
    (:scalevel-x (meters 0) (meters 0.0033333334))
    (:rotvel-z (degrees -0.2) (degrees 0.4))
    (:scalevel-y (meters 0) (meters 0.0033333334))
    (:fade-a -0.02 -0.02)
    (:accel-y (meters -0.00033333333) (meters -0.00083333335))
    (:friction 0.82 0.07)
    (:timer (seconds 4))
    (:flags (sp-cpuinfo-flag-2))
    (:conerot-x (degrees 30) (degrees 50.000004))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2298
  :init-specs ((:texture (meta-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 12.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.2) (meters 0.3))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 0.2) (meters 0.3))
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.083333336) (meters 0.05))
    (:scalevel-x (meters -0.00022222222))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:scalevel-y (meters -0.00022222222))
    (:fade-a -0.21333334 -0.21333334)
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-0 sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773138688
                       -1773138432
                       -1773138176
                       -1773137920
                       0
                       0
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2297
  :init-specs ((:texture (meta-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 8.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.5) (meters 0.5))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.1) (meters 0.06666667))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773138688
                       -1773138432
                       -1773138176
                       -1773137920
                       0
                       0
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 0.4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-gun-dummy-b
  :id 521
  :duration (seconds 8)
  :flags (use-local-clock unk-6 unk-7)
  :bounds (static-bspherem 0 0 0 15)
  :rotate ((degrees 0) (degrees 90) (degrees 0))
  :scale (1.0 0.97 0.87)
  :parts ((sp-item 2304 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.035))
    (sp-item 2305 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2299 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2300 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2301 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2302 :period (seconds 4) :length (seconds 0.017))
    )
  )

(defpart 2305
  :init-specs ((:texture (meta-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 12.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.2) (meters 0.3))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 0.2) (meters 0.3))
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.083333336) (meters 0.05))
    (:scalevel-x (meters -0.00022222222))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:scalevel-y (meters -0.00022222222))
    (:fade-a -0.21333334 -0.21333334)
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-0 sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773138688
                       -1773138432
                       -1773138176
                       -1773137920
                       0
                       0
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2304
  :init-specs ((:texture (meta-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 8.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.5) (meters 0.5))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.1) (meters 0.06666667))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773138688
                       -1773138432
                       -1773138176
                       -1773137920
                       0
                       0
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 0.4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-gun-dummy-c
  :id 522
  :duration (seconds 8)
  :flags (use-local-clock unk-6 unk-7)
  :bounds (static-bspherem 0 0 0 15)
  :rotate ((degrees 0) (degrees 90) (degrees 0))
  :scale (1.0 0.97 1.27)
  :parts ((sp-item 2306 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.035))
    (sp-item 2307 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2299 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2300 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2301 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2302 :period (seconds 4) :length (seconds 0.017))
    )
  )

(defpart 2307
  :init-specs ((:texture (meta-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 12.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.2) (meters 0.3))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 0.2) (meters 0.3))
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.083333336) (meters 0.05))
    (:scalevel-x (meters -0.00022222222))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:scalevel-y (meters -0.00022222222))
    (:fade-a -0.21333334 -0.21333334)
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-0 sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773138688
                       -1773138432
                       -1773138176
                       -1773137920
                       0
                       0
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2306
  :init-specs ((:texture (meta-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 8.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.5) (meters 0.5))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.1) (meters 0.06666667))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773138688
                       -1773138432
                       -1773138176
                       -1773137920
                       0
                       0
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 0.4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-gun-dummy-big
  :id 523
  :duration (seconds 8)
  :flags (use-local-clock unk-6 unk-7)
  :bounds (static-bspherem 0 0 0 15)
  :rotate ((degrees 0) (degrees 90) (degrees 0))
  :scale (1.0 1.13 1.3)
  :parts ((sp-item 2308 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.035))
    (sp-item 2309 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2299 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2300 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2301 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2302 :period (seconds 4) :length (seconds 0.017))
    )
  )

(defpart 2309
  :init-specs ((:texture (meta-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 12.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.2) (meters 0.3))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 0.2) (meters 0.3))
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.083333336) (meters 0.05))
    (:scalevel-x (meters -0.00022222222))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:scalevel-y (meters -0.00022222222))
    (:fade-a -0.21333334 -0.21333334)
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-0 sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773138688
                       -1773138432
                       -1773138176
                       -1773137920
                       0
                       0
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2308
  :init-specs ((:texture (meta-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 8.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.5) (meters 0.5))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.1) (meters 0.06666667))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773138688
                       -1773138432
                       -1773138176
                       -1773137920
                       0
                       0
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 0.4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-gun-dummy-gold
  :id 524
  :duration (seconds 8)
  :flags (use-local-clock unk-6 unk-7)
  :bounds (static-bspherem 0 0 0 15)
  :rotate ((degrees 0) (degrees 90) (degrees 0))
  :scale (1.0 0.83 1.2)
  :parts ((sp-item 2310 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.035))
    (sp-item 2311 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2312 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2300 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2301 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2313 :period (seconds 4) :length (seconds 0.017))
    )
  )

(defpart 2313
  :init-specs ((:texture (glow effects))
    (:num 1.0)
    (:y (meters 1.5))
    (:scale-x (meters 5))
    (:rot-x (degrees 0.675))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 128.0 64.0)
    (:g 96.0 32.0)
    (:b 32.0 32.0)
    (:a 64.0)
    (:omega (degrees 1136.25))
    (:scalevel-x (meters 0.2))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -2.56)
    (:timer (seconds 0.085))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
    (:userdata 1024.0)
    )
  )

(defpart 2312
  :init-specs ((:texture (bigpuff effects))
    (:num 12.0 3.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 2) (meters 2))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 2) (meters 2))
    (:r 128.0 64.0)
    (:g 96.0 32.0)
    (:b 32.0 32.0)
    (:a 16.0 8.0)
    (:vel-y (meters 0.05) (meters 0.033333335))
    (:scalevel-x (meters 0) (meters 0.0033333334))
    (:rotvel-z (degrees -0.2) (degrees 0.4))
    (:scalevel-y (meters 0) (meters 0.0033333334))
    (:fade-a -0.02 -0.02)
    (:accel-y (meters -0.00033333333) (meters -0.00083333335))
    (:friction 0.82 0.07)
    (:timer (seconds 4))
    (:flags (sp-cpuinfo-flag-2))
    (:conerot-x (degrees 30) (degrees 50.000004))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2311
  :init-specs ((:texture (gold-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 12.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.2) (meters 0.3))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 0.2) (meters 0.3))
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.083333336) (meters 0.05))
    (:scalevel-x (meters -0.00022222222))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:scalevel-y (meters -0.00022222222))
    (:fade-a -0.21333334 -0.21333334)
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-0 sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773139712
                       -1773139456
                       -1773139200
                       -1773138944
                       0
                       0
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2310
  :init-specs ((:texture (gold-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 8.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.5) (meters 0.5))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.1) (meters 0.06666667))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773139712
                       -1773139456
                       -1773139200
                       -1773138944
                       0
                       0
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 0.4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-gun-dummy-peace
  :id 525
  :duration (seconds 8)
  :flags (use-local-clock unk-6 unk-7)
  :bounds (static-bspherem 0 0 0 15)
  :rotate ((degrees 0) (degrees 90) (degrees 0))
  :scale (1.0 0.83 1.2)
  :parts ((sp-item 2314 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.035))
    (sp-item 2315 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2316 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2300 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2301 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2317 :period (seconds 4) :length (seconds 0.017))
    )
  )

(defpart 2317
  :init-specs ((:texture (glow effects))
    (:num 1.0)
    (:y (meters 1.5))
    (:scale-x (meters 5))
    (:rot-x (degrees 0.675))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 128.0 64.0)
    (:g 96.0 32.0)
    (:b 32.0 32.0)
    (:a 64.0)
    (:omega (degrees 1136.25))
    (:scalevel-x (meters 0.2))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -2.56)
    (:timer (seconds 0.085))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
    (:userdata 1024.0)
    )
  )

(defpart 2316
  :init-specs ((:texture (bigpuff effects))
    (:num 12.0 3.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 2) (meters 2))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 2) (meters 2))
    (:r 128.0 64.0)
    (:g 96.0 32.0)
    (:b 32.0 32.0)
    (:a 16.0 8.0)
    (:vel-y (meters 0.05) (meters 0.033333335))
    (:scalevel-x (meters 0) (meters 0.0033333334))
    (:rotvel-z (degrees -0.2) (degrees 0.4))
    (:scalevel-y (meters 0) (meters 0.0033333334))
    (:fade-a -0.02 -0.02)
    (:accel-y (meters -0.00033333333) (meters -0.00083333335))
    (:friction 0.82 0.07)
    (:timer (seconds 4))
    (:flags (sp-cpuinfo-flag-2))
    (:conerot-x (degrees 30) (degrees 50.000004))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2315
  :init-specs ((:texture (gold-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 12.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.2) (meters 0.3))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 0.2) (meters 0.3))
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.083333336) (meters 0.05))
    (:scalevel-x (meters -0.00022222222))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:scalevel-y (meters -0.00022222222))
    (:fade-a -0.21333334 -0.21333334)
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-0 sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773139712
                       -1773139456
                       -1773139200
                       -1773138944
                       0
                       0
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2314
  :init-specs ((:texture (gold-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 8.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.5) (meters 0.5))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.1) (meters 0.06666667))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773139712
                       -1773139456
                       -1773139200
                       -1773138944
                       0
                       0
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 0.4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-gun-cit-a
  :id 526
  :duration (seconds 8)
  :flags (use-local-clock unk-6 unk-7)
  :bounds (static-bspherem 0 0 0 15)
  :rotate ((degrees 0) (degrees 90) (degrees 0))
  :scale (1.0 0.73 0.97)
  :parts ((sp-item 2318 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.035))
    (sp-item 2319 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2320 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2300 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2301 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2321 :period (seconds 4) :length (seconds 0.017))
    )
  )

(defpart 2301
  :init-specs ((:texture (specs effects))
    (:num 12.0 3.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 1) (meters 2))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 1) (meters 2))
    (:r 0.0 128.0)
    (:g :copy r)
    (:b :copy g)
    (:a 32.0 64.0)
    (:vel-y (meters 0.06666667) (meters 0.05))
    (:rotvel-z (degrees -0.2) (degrees 0.4))
    (:fade-a -0.16 -0.16)
    (:accel-y (meters -0.00033333333) (meters -0.00083333335))
    (:friction 0.82 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2))
    (:conerot-x (degrees 30) (degrees 50.000004))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2320
  :init-specs ((:texture (bigpuff effects))
    (:num 12.0 3.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 2) (meters 2))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 2) (meters 2))
    (:r 128.0 64.0)
    (:g 64.0 64.0)
    (:b 32.0 32.0)
    (:a 16.0 8.0)
    (:vel-y (meters 0.05) (meters 0.033333335))
    (:scalevel-x (meters 0) (meters 0.0033333334))
    (:rotvel-z (degrees -0.2) (degrees 0.4))
    (:scalevel-y (meters 0) (meters 0.0033333334))
    (:fade-a -0.02 -0.02)
    (:accel-y (meters -0.00033333333) (meters -0.00083333335))
    (:friction 0.82 0.07)
    (:timer (seconds 4))
    (:flags (sp-cpuinfo-flag-2))
    (:conerot-x (degrees 30) (degrees 50.000004))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2300
  :init-specs ((:texture (bigpuff effects))
    (:num 12.0 3.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 2) (meters 2))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 2) (meters 2))
    (:r 0.0 128.0)
    (:g :copy r)
    (:b :copy g)
    (:a 16.0 8.0)
    (:vel-y (meters 0.05) (meters 0.033333335))
    (:scalevel-x (meters 0) (meters 0.0033333334))
    (:rotvel-z (degrees -0.2) (degrees 0.4))
    (:scalevel-y (meters 0) (meters 0.0033333334))
    (:fade-a -0.02 -0.02)
    (:accel-y (meters -0.00033333333) (meters -0.00083333335))
    (:friction 0.82 0.07)
    (:timer (seconds 4))
    (:flags (sp-cpuinfo-flag-2))
    (:conerot-x (degrees 30) (degrees 50.000004))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2321
  :init-specs ((:texture (glow effects))
    (:num 1.0)
    (:y (meters 1.5))
    (:scale-x (meters 5))
    (:rot-x (degrees 0.675))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 128.0 64.0)
    (:b 0.0)
    (:a 64.0)
    (:omega (degrees 1136.25))
    (:scalevel-x (meters 0.2))
    (:scalevel-y :copy scalevel-x)
    (:fade-a -2.56)
    (:timer (seconds 0.085))
    (:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
    (:userdata 1024.0)
    )
  )

(defpart 2319
  :init-specs ((:texture (cita-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 12.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.2) (meters 0.3))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 0.2) (meters 0.3))
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.083333336) (meters 0.05))
    (:scalevel-x (meters -0.00022222222))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:scalevel-y (meters -0.00022222222))
    (:fade-a -0.21333334 -0.21333334)
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-0 sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773142016
                       -1773141760
                       -1773141504
                       -1773141248
                       -1773140992
                       -1773140736
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2318
  :init-specs ((:texture (cita-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 8.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.5) (meters 0.5))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.1) (meters 0.06666667))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773142016
                       -1773141760
                       -1773141504
                       -1773141248
                       -1773140992
                       -1773140736
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 0.4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

;; WARN: Return type mismatch number vs none.
(defun check-gungame-piece-ground ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
  "Ensures the splatter that sits below the dummy when destroyed is at the right height"
  (if (and (>= 35635.2 (-> arg2 vector 0 y)) (>= 0.0 (-> arg1 vel-sxvel y)))
      (set! (-> arg2 vector 0 y) 35635.2)
      (set! (-> arg1 next-time)
            (the-as uint (* (max 1 (the-as int (-> *display* clock (-> arg1 clock-index) sparticle-data x))) 2))
            )
      )
  (none)
  )

(defpart 2303
  :init-specs ((:rot-x (degrees 0))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0))
    (:vel-y (meters 0))
    (:rotvel-x (degrees 0))
    (:rotvel-y (degrees 0))
    (:rotvel-z (degrees 0))
    (:accel-y (meters 0))
    (:friction 0.8 0.1)
    (:timer (seconds 4))
    (:next-time (seconds 1) (seconds 0.997))
    (:next-launcher 2322)
    )
  )

(defpart 2322
  :init-specs ((:fade-a -0.21333334) (:flags (sp-cpuinfo-flag-2 left-multiply-quat)))
  )

(defpartgroup group-gun-cit-b
  :id 527
  :duration (seconds 8)
  :flags (use-local-clock unk-6 unk-7)
  :bounds (static-bspherem 0 0 0 15)
  :rotate ((degrees 0) (degrees 90) (degrees 0))
  :scale (1.0 0.6 0.43)
  :parts ((sp-item 2323 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.035))
    (sp-item 2324 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2320 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2300 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2301 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2321 :period (seconds 4) :length (seconds 0.017))
    )
  )

(defpart 2324
  :init-specs ((:texture (cita-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 12.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.2) (meters 0.3))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 0.2) (meters 0.3))
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.083333336) (meters 0.05))
    (:scalevel-x (meters -0.00022222222))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:scalevel-y (meters -0.00022222222))
    (:fade-a -0.21333334 -0.21333334)
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-0 sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773142016
                       -1773141760
                       -1773141504
                       -1773141248
                       -1773140992
                       -1773140736
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2323
  :init-specs ((:texture (cita-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 8.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.5) (meters 0.5))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.1) (meters 0.06666667))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773142016
                       -1773141760
                       -1773141504
                       -1773141248
                       -1773140992
                       -1773140736
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 0.4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-gun-cit-c
  :id 528
  :duration (seconds 8)
  :flags (use-local-clock unk-6 unk-7)
  :bounds (static-bspherem 0 0 0 15)
  :rotate ((degrees 0) (degrees 90) (degrees 0))
  :scale (1.0 0.9 0.67)
  :parts ((sp-item 2325 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.035))
    (sp-item 2326 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2320 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2300 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2301 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2321 :period (seconds 4) :length (seconds 0.017))
    )
  )

(defpart 2326
  :init-specs ((:texture (cita-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 12.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.2) (meters 0.3))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 0.2) (meters 0.3))
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.083333336) (meters 0.05))
    (:scalevel-x (meters -0.00022222222))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:scalevel-y (meters -0.00022222222))
    (:fade-a -0.21333334 -0.21333334)
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-0 sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773142016
                       -1773141760
                       -1773141504
                       -1773141248
                       -1773140992
                       -1773140736
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2325
  :init-specs ((:texture (cita-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 8.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.5) (meters 0.5))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.1) (meters 0.06666667))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773142016
                       -1773141760
                       -1773141504
                       -1773141248
                       -1773140992
                       -1773140736
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 0.4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpartgroup group-gun-cit-d
  :id 529
  :duration (seconds 8)
  :flags (use-local-clock unk-6 unk-7)
  :bounds (static-bspherem 0 0 0 15)
  :rotate ((degrees 0) (degrees 90) (degrees 0))
  :scale (1.0 1.07 0.6)
  :parts ((sp-item 2327 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.035))
    (sp-item 2328 :flags (is-3d bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2320 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2300 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2301 :flags (bit7) :period (seconds 4) :length (seconds 0.05))
    (sp-item 2321 :period (seconds 4) :length (seconds 0.017))
    )
  )

(defpart 2328
  :init-specs ((:texture (cita-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 12.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.2) (meters 0.3))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y (meters 0.2) (meters 0.3))
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.083333336) (meters 0.05))
    (:scalevel-x (meters -0.00022222222))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:scalevel-y (meters -0.00022222222))
    (:fade-a -0.21333334 -0.21333334)
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-0 sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773142016
                       -1773141760
                       -1773141504
                       -1773141248
                       -1773140992
                       -1773140736
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(defpart 2327
  :init-specs ((:texture (cita-01 gungame-sprite))
    (:birth-func 'birth-func-texture-group)
    (:num 8.0 4.0)
    (:y (meters 0.5) (meters 2))
    (:z (meters -1.5) (meters 3))
    (:scale-x (meters 0.5) (meters 0.5))
    (:rot-x (degrees 0) (degrees 3600))
    (:rot-y (degrees 0) (degrees 3600))
    (:rot-z (degrees 0) (degrees 3600))
    (:scale-y :copy scale-x)
    (:r 255.0)
    (:g 255.0)
    (:b 255.0)
    (:a 128.0)
    (:vel-y (meters 0.1) (meters 0.06666667))
    (:rotvel-x (degrees -4.8) (degrees 9.6))
    (:rotvel-y (degrees -4.8) (degrees 9.6))
    (:rotvel-z (degrees -4.8) (degrees 9.6))
    (:accel-y (meters -0.0033333334) (meters -0.0016666667))
    (:friction 0.92 0.07)
    (:timer (seconds 2))
    (:flags (sp-cpuinfo-flag-2))
    (:userdata :data (new 'static 'boxed-array :type int32
                       5
                       0
                       0
                       -1773142016
                       -1773141760
                       -1773141504
                       -1773141248
                       -1773140992
                       -1773140736
                       -1773140480
                       -1773140224
                       -1773139968
                       )
               )
    (:func 'check-gungame-piece-ground)
    (:next-time (seconds 0.4))
    (:next-launcher 2303)
    (:conerot-x (degrees 0) (degrees 110))
    (:conerot-y (degrees 0) (degrees 180))
    (:rotate-y (degrees 0))
    )
  )

(deftype tpath-control-frame (structure)
  ((time       float)
   (path-pos   uint8)
   (command    tpath-command)
   (move-type  uint8)
   (path-num   uint8)
   )
  )


(deftype tpath-info (structure)
  ((s-time        float)
   (num           uint16)
   (ref-time-num  int16)
   (score         int16)
   (flags         tpath-flags)
   (num-anims     uint8)
   (bonus-time    float)
   (list          (array int32))
   (anims         (inline-array tpath-control-frame)  3)
   (anim1         (inline-array tpath-control-frame)  :overlay-at (-> anims 0))
   (anim2         (inline-array tpath-control-frame)  :overlay-at (-> anims 1))
   (anim3         (inline-array tpath-control-frame)  :overlay-at (-> anims 2))
   )
  )


(deftype gun-dummy (process-focusable)
  ((incoming-attack-id  uint32)
   (train-man           handle)
   (info                tpath-info)
   (y-offset            float)
   (rot-y-offset        float)
   (quat                quaternion  :inline)
   (hit-points          int32)
   (score               float)
   (path-num            uint32)
   (next-spark          int64)
   (inout-percent       float)
   (quat-ground         quaternion  :inline)
   (path-pos            float)
   (score-speed         float)
   (first-time-command  symbol)
   (current             (inline-array tpath-control-frame))
   (impact              vector      :inline)
   (done?               symbol      :inline)
   (move-sound          sound-id)
   (turn-sound          sound-id)
   (spin-sound          sound-id)
   (last-combo-time     time-frame)
   )
  (:state-methods
    idle
    )
  (:methods
    (init-dummy-collison! (_type_) none)
    (path-playing? (_type_) symbol)
    (path-time-elapsed (_type_) float)
    (init-tpath-info! (_type_ tpath-info) none)
    (break-dummy (_type_) none)
    )
  )


(define *tpath-rand* (the-as uint 0))

(defskelgroup skel-gun-dummy gun-dummy 0 2 ((1 (meters 999999))) :bounds (static-spherem 0 1.8 0 3.2))

(defskelgroup skel-gun-dummy-a gun-dummy-a gun-dummy-a-lod0-jg gun-dummy-a-idle-ja
              ((gun-dummy-a-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 1.8 0 3.2)
              )

(defskelgroup skel-gun-dummy-b gun-dummy-b gun-dummy-b-lod0-jg gun-dummy-b-idle-ja
              ((gun-dummy-b-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 1.8 0 3.2)
              )

(defskelgroup skel-gun-dummy-c gun-dummy-c gun-dummy-c-lod0-jg gun-dummy-c-idle-ja
              ((gun-dummy-c-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 1.8 0 3.2)
              )

(defskelgroup skel-gun-dummy-big gun-dummy-big gun-dummy-big-lod0-jg gun-dummy-big-idle-ja
              ((gun-dummy-big-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 1.8 0 3.2)
              )

(defskelgroup skel-gun-dummy-gold gun-dummy-gold gun-dummy-gold-lod0-jg gun-dummy-gold-idle-ja
              ((gun-dummy-gold-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 1.8 0 3.2)
              )

(defskelgroup skel-gun-dummy-peace gun-dummy-yellow-gun gun-dummy-yellow-gun-lod0-jg gun-dummy-yellow-gun-idle-ja
              ((gun-dummy-yellow-gun-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 1.8 0 3.2)
              )

(defskelgroup skel-gun-cit-a gun-cit-a gun-cit-a-lod0-jg gun-cit-a-idle-ja
              ((gun-cit-a-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 1.8 0 3.2)
              )

(defskelgroup skel-gun-cit-b gun-cit-b gun-cit-b-lod0-jg gun-cit-b-idle-ja
              ((gun-cit-b-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 1.8 0 3.2)
              )

(defskelgroup skel-gun-cit-c gun-cit-c gun-cit-c-lod0-jg gun-cit-c-idle-ja
              ((gun-cit-c-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 1.8 0 3.2)
              )

(defskelgroup skel-gun-cit-d gun-cit-d gun-cit-d-lod0-jg gun-cit-d-idle-ja
              ((gun-cit-d-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 1.8 0 3.2)
              )

(defskelgroup skel-gun-dummy-a-explode gun-dummy-a gun-dummy-a-explode-lod0-jg gun-dummy-a-explode-idle-ja
              ((gun-dummy-a-explode-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 80)
              )

(defskelgroup skel-gun-dummy-b-explode gun-dummy-b gun-dummy-b-explode-lod0-jg gun-dummy-b-explode-idle-ja
              ((gun-dummy-b-explode-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 80)
              )

(defskelgroup skel-gun-dummy-c-explode gun-dummy-c gun-dummy-c-explode-lod0-jg gun-dummy-c-explode-idle-ja
              ((gun-dummy-c-explode-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 80)
              )

(defskelgroup skel-gun-dummy-big-explode gun-dummy-big gun-dummy-big-explode-lod0-jg gun-dummy-big-explode-idle-ja
              ((gun-dummy-big-explode-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 80)
              )

(defskelgroup skel-gun-dummy-gold-explode gun-dummy-gold gun-dummy-gold-explode-lod0-jg gun-dummy-gold-explode-idle-ja
              ((gun-dummy-gold-explode-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 80)
              )

(defskelgroup skel-gun-dummy-peace-explode gun-dummy-yellow-gun gun-dummy-yellow-gun-explode-lod0-jg gun-dummy-yellow-gun-explode-idle-ja
              ((gun-dummy-yellow-gun-explode-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 80)
              )

(defskelgroup skel-gun-cit-a-explode gun-cit-a gun-cit-a-explode-lod0-jg gun-cit-a-explode-idle-ja
              ((gun-cit-a-explode-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 80)
              )

(defskelgroup skel-gun-cit-b-explode gun-cit-b gun-cit-b-explode-lod0-jg gun-cit-b-explode-idle-ja
              ((gun-cit-b-explode-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 80)
              )

(defskelgroup skel-gun-cit-c-explode gun-cit-c gun-cit-c-explode-lod0-jg gun-cit-c-explode-idle-ja
              ((gun-cit-c-explode-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 80)
              )

(defskelgroup skel-gun-cit-d-explode gun-cit-d gun-cit-d-explode-lod0-jg gun-cit-d-explode-idle-ja
              ((gun-cit-d-explode-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 80)
              )

(define *gun-dummy-a-exploder-params*
  (new 'static 'joint-exploder-static-params
    :joints (new 'static 'boxed-array :type joint-exploder-static-joint-params
      (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 16 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 17 :parent-joint-index -1)
      )
    :collide-spec #x1
    )
  )

(define *gun-dummy-b-exploder-params*
  (new 'static 'joint-exploder-static-params
    :joints (new 'static 'boxed-array :type joint-exploder-static-joint-params
      (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1)
      )
    :collide-spec #x1
    )
  )

(define *gun-dummy-c-exploder-params*
  (new 'static 'joint-exploder-static-params
    :joints (new 'static 'boxed-array :type joint-exploder-static-joint-params
      (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 16 :parent-joint-index -1)
      )
    :collide-spec #x1
    )
  )

(define *gun-dummy-big-exploder-params*
  (new 'static 'joint-exploder-static-params
    :joints (new 'static 'boxed-array :type joint-exploder-static-joint-params
      (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1)
      )
    :collide-spec #x1
    )
  )

(define *gun-dummy-gold-exploder-params*
  (new 'static 'joint-exploder-static-params
    :joints (new 'static 'boxed-array :type joint-exploder-static-joint-params
      (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 16 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 17 :parent-joint-index -1)
      )
    :collide-spec #x1
    )
  )

(define *gun-dummy-peace-exploder-params*
  (new 'static 'joint-exploder-static-params
    :joints (new 'static 'boxed-array :type joint-exploder-static-joint-params
      (new 'static 'joint-exploder-static-joint-params :joint-index 3 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1)
      )
    :collide-spec #x1
    )
  )

(define *gun-cit-a-exploder-params*
  (new 'static 'joint-exploder-static-params
    :joints (new 'static 'boxed-array :type joint-exploder-static-joint-params
      (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 16 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 17 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 18 :parent-joint-index -1)
      )
    :collide-spec #x1
    )
  )

(define *gun-cit-b-exploder-params*
  (new 'static 'joint-exploder-static-params
    :joints (new 'static 'boxed-array :type joint-exploder-static-joint-params
      (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 16 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 17 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 18 :parent-joint-index -1)
      )
    :collide-spec #x1
    )
  )

(define *gun-cit-c-exploder-params*
  (new 'static 'joint-exploder-static-params
    :joints (new 'static 'boxed-array :type joint-exploder-static-joint-params
      (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 16 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 17 :parent-joint-index -1)
      )
    :collide-spec #x1
    )
  )

(define *gun-cit-d-exploder-params*
  (new 'static 'joint-exploder-static-params
    :joints (new 'static 'boxed-array :type joint-exploder-static-joint-params
      (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 16 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 17 :parent-joint-index -1)
      (new 'static 'joint-exploder-static-joint-params :joint-index 18 :parent-joint-index -1)
      )
    :collide-spec #x1
    )
  )

(defmethod break-dummy ((this gun-dummy))
  "Does what you'd expect, sets up the [[joint-exploder-tuning]] to break the dummy into pieces, plays sounds, etc"
  0
  (none)
  )

(defmethod path-time-elapsed ((this gun-dummy))
  "@returns Calculates the combined total time across all control frames in the path"
  (let ((total-time 0.0))
    (let ((curr-frame (the-as tpath-control-frame (-> this current))))
      (loop
        (case (-> curr-frame command)
          (((tpath-command begin))
           (set! curr-frame (-> (the-as (inline-array tpath-control-frame) curr-frame) 1))
           )
          (((tpath-command arise))
           (+! total-time (-> curr-frame time))
           (set! curr-frame (-> (the-as (inline-array tpath-control-frame) curr-frame) 1))
           )
          (((tpath-command lower))
           (+! total-time (-> curr-frame time))
           (set! curr-frame (-> (the-as (inline-array tpath-control-frame) curr-frame) 1))
           )
          (((tpath-command align-with-track))
           (+! total-time (-> curr-frame time))
           (set! curr-frame (-> (the-as (inline-array tpath-control-frame) curr-frame) 1))
           )
          (((tpath-command translate))
           (+! total-time (-> curr-frame time))
           (set! curr-frame (-> (the-as (inline-array tpath-control-frame) curr-frame) 1))
           )
          (((tpath-command wait))
           (+! total-time (-> curr-frame time))
           (set! curr-frame (-> (the-as (inline-array tpath-control-frame) curr-frame) 1))
           )
          (((tpath-command end))
           (return total-time)
           )
          )
        )
      )
    total-time
    )
  )

(defmethod path-playing? ((this gun-dummy))
  "Core functionality for playing back the dummy's path.  Does things like:
   - calculates the score in case the dummy is hit based on the time elapsed
   - moves around the dummy
   - plays sounds accordingly
   @returns if the dummy's current path is still in progress"
  (local-vars (at-0 int) (ret symbol))
  (with-pp
    (rlet ((acc :class vf)
           (vf0 :class vf)
           (vf1 :class vf)
           (vf2 :class vf)
           (vf4 :class vf)
           (vf5 :class vf)
           (vf6 :class vf)
           (vf7 :class vf)
           )
      (init-vf0-vector)
      (let ((curr-path-command (-> this current))
            (event-msg-block (new 'stack-no-clear 'event-message-block))
            )
        (set! (-> event-msg-block from) (process->ppointer pp))
        (set! (-> event-msg-block num-params) 1)
        (set! (-> event-msg-block message) 'path)
        (set! (-> event-msg-block param 0) (-> this path-num))
        (let ((path (the-as path-control (send-event-function (handle->process (-> this train-man)) event-msg-block)))
              (f30-0 (* 0.0033333334 (the float (- (current-time) (-> this state-time)))))
              )
          (if (not path)
              (return #f)
              )
          (case (-> curr-path-command 0 command)
            (((tpath-command arise))
             (set! (-> this path-pos) (* 0.007843138 (the float (-> curr-path-command 0 path-pos))))
             (get-point-in-path! path (-> this root trans) (-> this path-pos) 'interp)
             (+! (-> this root trans y) (lerp-scale -16384.0 0.0 f30-0 0.0 (-> curr-path-command 0 time)))
             (let* ((s3-0 (get-point-in-path! path (new 'stack-no-clear 'vector) (-> this path-pos) 'interp))
                    (v1-26 (get-point-in-path!
                             path
                             (new 'stack-no-clear 'vector)
                             (if (< (-> this path-pos) 0.01)
                                 (+ 0.1 (-> this path-pos))
                                 (+ -0.1 (-> this path-pos))
                                 )
                             'interp
                             )
                           )
                    (s4-2 (vector-! (new 'stack-no-clear 'vector) v1-26 s3-0))
                    )
               (vector-rotate90-around-y! s4-2 s4-2)
               (if (< (vector-dot s4-2 (vector-! (new 'stack-no-clear 'vector) (target-pos 0) s3-0)) 0.0)
                   (vector-negate-in-place! s4-2)
                   )
               (vector-normalize! s4-2 1.0)
               (forward-up-nopitch->quaternion (-> this quat-ground) s4-2 *up-vector*)
               )
             (quaternion-normalize! (-> this quat-ground))
             (if (-> this first-time-command)
                 (sound-play "target-up-slow")
                 )
             (set! (-> this first-time-command) #f)
             (when (>= f30-0 (-> curr-path-command 0 time))
               (set! (-> this current) (the-as (inline-array tpath-control-frame) (-> this current 1)))
               (set! (-> this first-time-command) #t)
               (set-time! (-> this state-time))
               )
             (return #t)
             ret
             )
            (((tpath-command lower))
             (get-point-in-path! path (-> this root trans) (-> this path-pos) 'interp)
             (+! (-> this root trans y) (lerp-scale 0.0 -16384.0 f30-0 0.0 (-> curr-path-command 0 time)))
             (if (-> this first-time-command)
                 (sound-play "target-dwn-slow")
                 )
             (set! (-> this first-time-command) #f)
             (when (>= f30-0 (-> curr-path-command 0 time))
               (set! (-> this current) (the-as (inline-array tpath-control-frame) (-> this current 1)))
               (set! (-> this first-time-command) #t)
               (set-time! (-> this state-time))
               )
             (return #t)
             ret
             )
            (((tpath-command align-with-track))
             (let ((s3-3 (get-point-in-path! path (new 'stack-no-clear 'vector) (-> this path-pos) 'interp)))
               (let* ((v1-68 (get-point-in-path!
                               path
                               (new 'stack-no-clear 'vector)
                               (if (< (-> this path-pos) 0.01)
                                   (+ 0.1 (-> this path-pos))
                                   (+ -0.1 (-> this path-pos))
                                   )
                               'interp
                               )
                             )
                      (s4-6 (vector-! (new 'stack-no-clear 'vector) v1-68 s3-3))
                      )
                 (vector-rotate90-around-y! s4-6 s4-6)
                 (if (< (vector-dot s4-6 (vector-! (new 'stack-no-clear 'vector) (target-pos 0) s3-3)) 0.0)
                     (vector-negate-in-place! s4-6)
                     )
                 (vector-normalize! s4-6 1.0)
                 (forward-up-nopitch->quaternion (-> this quat-ground) s4-6 *up-vector*)
                 )
               (quaternion-normalize! (-> this quat-ground))
               (set! (-> this root trans quad) (-> s3-3 quad))
               )
             (set! (-> this inout-percent) (lerp-scale 0.0 1.0 f30-0 0.0 (-> curr-path-command 0 time)))
             (set! (-> this first-time-command) #f)
             (when (>= f30-0 (-> curr-path-command 0 time))
               (set! (-> this current) (the-as (inline-array tpath-control-frame) (-> this current 1)))
               (set! (-> this inout-percent) 1.0)
               (set! (-> this first-time-command) #t)
               (set-time! (-> this state-time))
               )
             (return #t)
             ret
             )
            (((tpath-command translate))
             (set! (-> this score) (- (-> this score) (* (-> this score-speed) (seconds-per-frame))))
             (set! (-> this inout-percent) (fmax 0.0 (- (-> this inout-percent) (* 4.0 (seconds-per-frame)))))
             (let ((s2-4 (new 'stack-no-clear 'vector))
                   (s3-4 (new 'stack-no-clear 'vector))
                   (f28-2 (lerp-scale 0.0 1.0 f30-0 0.0 (-> curr-path-command 0 time)))
                   )
               (let ((v1-87 (-> curr-path-command 0 move-type)))
                 (cond
                   ((zero? v1-87)
                    )
                   ((= v1-87 1)
                    (set! f28-2 (+ (* -2.0 f28-2 f28-2 f28-2) (* 3.0 f28-2 f28-2)))
                    )
                   ((= v1-87 2)
                    (set! f28-2 (* f28-2 f28-2 f28-2))
                    )
                   ((= v1-87 3)
                    (sin (* 16384.0 f28-2))
                    )
                   )
                 )
               (get-point-in-path! path s2-4 (-> this path-pos) 'interp)
               (get-point-in-path! path s3-4 (* 0.007843138 (the float (-> curr-path-command 0 path-pos))) 'interp)
               (let ((v1-102 (new 'stack-no-clear 'vector)))
                 (set! (-> v1-102 quad) (-> this root trans quad))
                 (vector-float*! (-> this root trans) s2-4 (- 1.0 f28-2))
                 (let ((a0-63 (-> this root trans)))
                   (let ((a1-23 (-> this root trans)))
                     (let ((a2-17 f28-2))
                       (.mov vf7 a2-17)
                       )
                     (.lvf vf5 (&-> s3-4 quad))
                     (.lvf vf4 (&-> a1-23 quad))
                     )
                   (.add.x.vf.w vf6 vf0 vf0)
                   (.mul.x.vf.xyz acc vf5 vf7)
                   (.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
                   (.svf (&-> a0-63 quad) vf6)
                   )
                 (let ((a0-65 (-> this root transv)))
                   (.lvf vf1 (&-> (vector-! (new 'stack-no-clear 'vector) (-> this root trans) v1-102) quad))
                   (let ((f0-50 (-> pp clock frames-per-second)))
                     (.mov at-0 f0-50)
                     )
                   (.mov vf2 at-0)
                   (.mov.vf.w vf1 vf0)
                   (.mul.x.vf.xyz vf1 vf1 vf2)
                   (.svf (&-> a0-65 quad) vf1)
                   )
                 )
               )
             (if (zero? (-> this move-sound))
                 (set! (-> this move-sound) (new-sound-id))
                 )
             (let ((s4-7 (static-sound-spec "target-mov-slow" :volume 100.0 :fo-max 60 :mask (pitch))))
               (set! (-> s4-7 pitch-mod) (the int (lerp-scale -1.0 1.0 (vector-length (-> this root transv)) 0.0 81920.0)))
               (sound-play-by-spec s4-7 (-> this move-sound) (-> this root trans))
               )
             (when (< (-> this next-spark) (current-time))
               (set! (-> this next-spark) (the-as int (+ (current-time) (the int (* 300.0 (rand-vu-float-range 0.0 0.3))))))
               (spawn (-> this part) (-> this root trans))
               )
             (set! (-> this first-time-command) #f)
             (when (>= f30-0 (-> curr-path-command 0 time))
               (when (nonzero? (-> this move-sound))
                 (sound-stop (-> this move-sound))
                 (set! (-> this move-sound) (new 'static 'sound-id))
                 0
                 )
               (sound-play "target-stop")
               (set! (-> this current) (the-as (inline-array tpath-control-frame) (-> this current 1)))
               (set! (-> this path-pos) (* 0.007843138 (the float (-> curr-path-command 0 path-pos))))
               (set! (-> this first-time-command) #t)
               (set-time! (-> this state-time))
               )
             (return #t)
             ret
             )
            (((tpath-command wait))
             (set! (-> this score) (- (-> this score) (* (-> this score-speed) (seconds-per-frame))))
             (set! (-> this inout-percent) (fmax 0.0 (- (-> this inout-percent) (* 4.0 (seconds-per-frame)))))
             (get-point-in-path! path (-> this root trans) (-> this path-pos) 'interp)
             (set! (-> this first-time-command) #f)
             (when (or (and (= (-> curr-path-command 0 time) -1.0) (< (-> this hit-points) 0))
                       (and (!= (-> curr-path-command 0 time) -1.0) (>= f30-0 (-> curr-path-command 0 time)))
                       )
               (set! (-> this current) (the-as (inline-array tpath-control-frame) (-> this current 1)))
               (set! (-> this first-time-command) #t)
               (set-time! (-> this state-time))
               )
             (return #t)
             ret
             )
            (((tpath-command end))
             (return #f)
             ret
             )
            )
          )
        )
      )
    )
  )

(defmethod get-trans ((this gun-dummy) (arg0 int))
  "@returns the `trans` [[vector]] from the process's `root` (typically either a [[trsqv]] or a [[collide-shape]])"
  (let ((root (-> this root)))
    (case arg0
      ((3 2)
       (let ((vec (new 'static 'vector :w 1.0)))
         (set! (-> vec quad) (-> root trans quad))
         (+! (-> vec y) 8192.0)
         vec
         )
       )
      (else
        (-> root trans)
        )
      )
    )
  )

(defstate idle (gun-dummy)
  :virtual #t
  :event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
    (case message
      (('combo)
       (set-time! (-> self last-combo-time))
       #t
       )
      (('track)
       (cond
         ((-> block param 0)
          (if (and (not (logtest? (-> self info flags) (tpath-flags citizen))) (> (-> self hit-points) 0))
              #t
              'abort
              )
          )
         (else
           (and (not (logtest? (-> self info flags) (tpath-flags citizen))) (> (-> self hit-points) 0))
           )
         )
       )
      (('attack)
       (let ((attack-info (the-as attack-info (-> block param 1))))
         (get-penetrate-using-from-attack-event (the-as process-drawable proc) block)
         (when (or (not (logtest? (-> self info flags) (tpath-flags peace)))
                   (and (logtest? (-> self info flags) (tpath-flags peace))
                        (or (= (-> attack-info mode) 'eco-dark) (= (-> attack-info mode) 'explode))
                        )
                   )
           (when (!= (-> attack-info id) (-> self incoming-attack-id))
             (set! (-> self incoming-attack-id) (-> attack-info id))
             (let ((proc-draw (if (type? proc process-drawable)
                                  (the-as process-drawable proc)
                                  )
                              )
                   )
               (when proc-draw
                 (let ((cshape (-> proc-draw root)))
                   (when (if (type? cshape collide-shape)
                             cshape
                             )
                     (vector+float*! (-> self impact) (-> self root trans) *up-vector* 8192.0)
                     (vector+!
                       (-> self impact)
                       (-> self impact)
                       (vector-normalize! (vector-! (new 'stack-no-clear 'vector) (target-pos 0) (-> self root trans)) 4096.0)
                       )
                     )
                   )
                 (cond
                   ((= (-> self hit-points) 2)
                    (set! (-> self rot-y-offset) 262144.0)
                    (set! (-> self spin-sound) (sound-play "target-spin"))
                    )
                   (else
                     (if (and (logtest? (process-mask projectile) (-> proc-draw mask))
                              (not (time-elapsed? (-> self last-combo-time) (seconds 1)))
                              )
                         (send-event (ppointer->process (-> self parent)) 'combo)
                         )
                     )
                   )
                 (if (> (-> self hit-points) 0)
                     (+! (-> self hit-points) -1)
                     )
                 #t
                 )
               )
             )
           )
         )
       )
      )
    )
  :enter (behavior ()
    (set-time! (-> self state-time))
    (set! (-> self inout-percent) 1.0)
    (set! (-> self y-offset) 0.0)
    (set! (-> self rot-y-offset) 0.0)
    (set! (-> self first-time-command) #t)
    (set! (-> self done? value) (the-as object #f))
    )
  :exit (behavior ()
    (logior! (-> self info flags) (tpath-flags broken))
    )
  :code (behavior ()
    (while (not (-> self done? value))
      (suspend)
      )
    (when (nonzero? (-> self move-sound))
      (sound-stop (-> self move-sound))
      (set! (-> self move-sound) (new 'static 'sound-id))
      0
      )
    (when (nonzero? (-> self turn-sound))
      (sound-stop (-> self turn-sound))
      (set! (-> self turn-sound) (new 'static 'sound-id))
      0
      )
    (when (nonzero? (-> self spin-sound))
      (sound-stop (-> self spin-sound))
      (set! (-> self spin-sound) (new 'static 'sound-id))
      0
      )
    (cleanup-for-death self)
    )
  :post (behavior ()
    (set! (-> self done? value) (not (path-playing? self)))
    (when (zero? (-> self hit-points))
      (logior! (-> self info flags) (tpath-flags broken))
      (if (>= -100.0 (-> self score))
          (sound-play "score-bad")
          )
      (send-event (handle->process (-> self train-man)) 'score (the int (-> self score)))
      (break-dummy self)
      (set! (-> self hit-points) -1)
      )
    (+! (-> self root trans y) (-> self y-offset))
    (set! (-> self rot-y-offset) (- (-> self rot-y-offset) (* 8.0 (seconds-per-frame) (-> self rot-y-offset))))
    (when (< (-> self rot-y-offset) 182.04445)
      (when (nonzero? (-> self spin-sound))
        (sound-stop (-> self spin-sound))
        (set! (-> self spin-sound) (new 'static 'sound-id))
        0
        )
      )
    (let ((vec-to-target (vector-! (new 'stack-no-clear 'vector) (target-pos 0) (-> self root trans))))
      (vector-normalize! vec-to-target 1.0)
      (seek-toward-heading-vec! (-> self root) vec-to-target 65536.0 (seconds 0.5))
      )
    (quaternion-rotate-local-y! (-> self root quat) (-> self root quat) (-> self rot-y-offset))
    (quaternion-slerp! (-> self root quat) (-> self root quat) (-> self quat-ground) (-> self inout-percent))
    (transform-post)
    )
  )

(defmethod init-dummy-collison! ((this gun-dummy))
  "Initializes the collision related stuff for the dummy"
  (let ((cshape-moving (new 'process 'collide-shape-moving this (collide-list-enum usually-hit-by-player))))
    (set! (-> cshape-moving dynam) (copy *standard-dynamics* 'process))
    (set! (-> cshape-moving reaction) cshape-reaction-default)
    (set! (-> cshape-moving no-reaction)
          (the-as (function collide-shape-moving collide-query vector vector object) nothing)
          )
    (set! (-> cshape-moving penetrated-by) (penetrate))
    (let ((prim-mesh (new 'process 'collide-shape-prim-mesh cshape-moving (the-as uint 0) (the-as uint 0))))
      (set! (-> prim-mesh prim-core collide-as) (collide-spec crate))
      (set! (-> prim-mesh prim-core action) (collide-action solid))
      (set! (-> prim-mesh transform-index) 0)
      (set-vector! (-> prim-mesh local-sphere) 0.0 7372.8 0.0 10240.0)
      (set! (-> cshape-moving total-prims) (the-as uint 1))
      (set! (-> cshape-moving root-prim) prim-mesh)
      )
    (set! (-> cshape-moving nav-radius) (* 0.75 (-> cshape-moving root-prim local-sphere w)))
    (let ((root-prim (-> cshape-moving root-prim)))
      (set! (-> cshape-moving backup-collide-as) (-> root-prim prim-core collide-as))
      (set! (-> cshape-moving backup-collide-with) (-> root-prim prim-core collide-with))
      )
    (set! (-> this root) cshape-moving)
    )
  0
  (none)
  )

;; WARN: Return type mismatch process-focusable vs gun-dummy.
(defmethod relocate ((this gun-dummy) (offset int))
  (the-as gun-dummy ((method-of-type process-focusable relocate) this offset))
  )

;; WARN: Return type mismatch object vs none.
(defmethod init-from-entity! ((this gun-dummy) (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"
  (init-dummy-collison! this)
  (process-drawable-from-entity! this arg0)
  (logclear! (-> this mask) (process-mask actor-pause))
  (initialize-skeleton
    this
    (the-as skeleton-group (art-group-get-by-name *level* "skel-gun-dummy" (the-as (pointer uint32) #f)))
    (the-as pair 0)
    )
  (transform-post)
  (go (method-of-object this idle))
  (none)
  )

(defmethod init-tpath-info! ((this gun-dummy) (arg0 tpath-info))
  "Given a [[tpath-info]] use it to initialize the dummy with any relevant data or flags"
  (logior! (-> this mask) (process-mask enemy))
  (logior! (-> this mask) (process-mask collectable))
  (vector-identity! (-> this root scale))
  (quaternion-copy! (-> this quat) (-> this root quat))
  (+! (-> this root trans y) -16384.0)
  (if (not (logtest? (-> arg0 flags) (tpath-flags tpath-rand)))
      (set! *tpath-rand* (the-as uint (rand-vu-int-count 16)))
      )
  (set! (-> this current)
        (the-as
          (inline-array tpath-control-frame)
          (-> (the-as (inline-array tpath-control-frame) (-> arg0 anims (mod *tpath-rand* (-> arg0 num-anims)))) 0)
          )
        )
  (let ((path (-> this current)))
    (when (= (-> path 0 command) (tpath-command begin))
      (set! (-> this path-num) (-> path 0 path-num))
      (set! (-> this current) (the-as (inline-array tpath-control-frame) (-> this current 1)))
      )
    )
  (set! (-> this score) (the float (-> arg0 score)))
  (if (logtest? (-> arg0 flags) (tpath-flags citizen))
      (set! (-> this score-speed) 0.0)
      (set! (-> this score-speed) (/ (-> this score) (path-time-elapsed this)))
      )
  (set! (-> this hit-points) (if (logtest? (-> arg0 flags) (tpath-flags big))
                                 2
                                 1
                                 )
        )
  (set! (-> this info) arg0)
  (set! (-> this part) (create-launch-control (-> *part-group-id-table* 519) this))
  (set! (-> this next-spark) 0)
  0
  (none)
  )

(deftype gun-dummy-a (gun-dummy)
  ()
  )


(deftype gun-dummy-b (gun-dummy)
  ()
  )


(deftype gun-dummy-c (gun-dummy)
  ()
  )


(deftype gun-dummy-big (gun-dummy)
  ()
  )


(deftype gun-dummy-gold (gun-dummy)
  ()
  )


(deftype gun-dummy-peace (gun-dummy)
  ()
  )


(deftype gun-cit-a (gun-dummy)
  ()
  )


(deftype gun-cit-b (gun-dummy)
  ()
  )


(deftype gun-cit-c (gun-dummy)
  ()
  )


(deftype gun-cit-d (gun-dummy)
  ()
  )


(defmethod break-dummy ((this gun-dummy-a))
  "Does what you'd expect, sets up the [[joint-exploder-tuning]] to break the dummy into pieces, plays sounds, etc"
  (let ((root-prim (-> this root root-prim)))
    (set! (-> root-prim prim-core collide-as) (collide-spec))
    (set! (-> root-prim prim-core collide-with) (collide-spec))
    )
  0
  (setup-masks (-> this draw) 0 -1)
  (setup-masks (-> this draw) 1 0)
  (sound-play "target-break")
  (let ((exploder-tuning (new 'stack 'joint-exploder-tuning (the-as uint 1))))
    (set! (-> exploder-tuning fountain-rand-transv-lo quad) (-> this impact quad))
    (set! (-> exploder-tuning fountain-rand-transv-hi x) 4096.0)
    (set! (-> exploder-tuning fountain-rand-transv-hi y) 122880.0)
    (process-spawn
      part-tracker
      :init part-tracker-init
      (-> *part-group-id-table* 520)
      300
      #f
      #f
      #f
      (-> this node-list data 3 bone transform)
      :to *entity-pool*
      )
    (process-spawn
      joint-exploder
      (art-group-get-by-name *level* "skel-gun-dummy-a-explode" (the-as (pointer uint32) #f))
      5
      exploder-tuning
      *gun-dummy-a-exploder-params*
      :to this
      )
    )
  0
  (none)
  )

(defmethod break-dummy ((this gun-dummy-b))
  "Does what you'd expect, sets up the [[joint-exploder-tuning]] to break the dummy into pieces, plays sounds, etc"
  (let ((root-prim (-> this root root-prim)))
    (set! (-> root-prim prim-core collide-as) (collide-spec))
    (set! (-> root-prim prim-core collide-with) (collide-spec))
    )
  0
  (setup-masks (-> this draw) 0 -1)
  (setup-masks (-> this draw) 1 0)
  (sound-play "target-break")
  (let ((exploder-tuning (new 'stack 'joint-exploder-tuning (the-as uint 1))))
    (set! (-> exploder-tuning fountain-rand-transv-lo quad) (-> this impact quad))
    (process-spawn
      part-tracker
      :init part-tracker-init
      (-> *part-group-id-table* 521)
      300
      #f
      #f
      #f
      (-> this node-list data 3 bone transform)
      :to *entity-pool*
      )
    (process-spawn
      joint-exploder
      (art-group-get-by-name *level* "skel-gun-dummy-b-explode" (the-as (pointer uint32) #f))
      5
      exploder-tuning
      *gun-dummy-b-exploder-params*
      :to this
      )
    )
  0
  (none)
  )

(defmethod break-dummy ((this gun-dummy-c))
  "Does what you'd expect, sets up the [[joint-exploder-tuning]] to break the dummy into pieces, plays sounds, etc"
  (let ((root-prim (-> this root root-prim)))
    (set! (-> root-prim prim-core collide-as) (collide-spec))
    (set! (-> root-prim prim-core collide-with) (collide-spec))
    )
  0
  (setup-masks (-> this draw) 0 -1)
  (setup-masks (-> this draw) 1 0)
  (sound-play "target-break")
  (let ((exploder-tuning (new 'stack 'joint-exploder-tuning (the-as uint 1))))
    (set! (-> exploder-tuning fountain-rand-transv-lo quad) (-> this impact quad))
    (process-spawn
      part-tracker
      :init part-tracker-init
      (-> *part-group-id-table* 522)
      300
      #f
      #f
      #f
      (-> this node-list data 3 bone transform)
      :to *entity-pool*
      )
    (process-spawn
      joint-exploder
      (art-group-get-by-name *level* "skel-gun-dummy-c-explode" (the-as (pointer uint32) #f))
      5
      exploder-tuning
      *gun-dummy-c-exploder-params*
      :to this
      )
    )
  0
  (none)
  )

(defmethod break-dummy ((this gun-dummy-big))
  "Does what you'd expect, sets up the [[joint-exploder-tuning]] to break the dummy into pieces, plays sounds, etc"
  (let ((root-prim (-> this root root-prim)))
    (set! (-> root-prim prim-core collide-as) (collide-spec))
    (set! (-> root-prim prim-core collide-with) (collide-spec))
    )
  0
  (setup-masks (-> this draw) 0 -1)
  (setup-masks (-> this draw) 1 0)
  (sound-play "target-break")
  (let ((exploder-tuning (new 'stack 'joint-exploder-tuning (the-as uint 1))))
    (set! (-> exploder-tuning fountain-rand-transv-lo quad) (-> this impact quad))
    (process-spawn
      part-tracker
      :init part-tracker-init
      (-> *part-group-id-table* 523)
      300
      #f
      #f
      #f
      (-> this node-list data 3 bone transform)
      :to *entity-pool*
      )
    (process-spawn
      joint-exploder
      (art-group-get-by-name *level* "skel-gun-dummy-big-explode" (the-as (pointer uint32) #f))
      5
      exploder-tuning
      *gun-dummy-big-exploder-params*
      :to this
      )
    )
  0
  (none)
  )

(defmethod break-dummy ((this gun-dummy-gold))
  "Does what you'd expect, sets up the [[joint-exploder-tuning]] to break the dummy into pieces, plays sounds, etc"
  (let ((root-prim (-> this root root-prim)))
    (set! (-> root-prim prim-core collide-as) (collide-spec))
    (set! (-> root-prim prim-core collide-with) (collide-spec))
    )
  0
  (setup-masks (-> this draw) 0 -1)
  (setup-masks (-> this draw) 1 0)
  (sound-play "target-bonus")
  (let ((exploder-tuning (new 'stack 'joint-exploder-tuning (the-as uint 1))))
    (set! (-> exploder-tuning fountain-rand-transv-lo quad) (-> this impact quad))
    (process-spawn
      part-tracker
      :init part-tracker-init
      (-> *part-group-id-table* 524)
      300
      #f
      #f
      #f
      (-> this node-list data 3 bone transform)
      :to *entity-pool*
      )
    (process-spawn
      joint-exploder
      (art-group-get-by-name *level* "skel-gun-dummy-gold-explode" (the-as (pointer uint32) #f))
      5
      exploder-tuning
      *gun-dummy-gold-exploder-params*
      :to this
      )
    )
  0
  (none)
  )

(defmethod break-dummy ((this gun-dummy-peace))
  "Does what you'd expect, sets up the [[joint-exploder-tuning]] to break the dummy into pieces, plays sounds, etc"
  (let ((root-prim (-> this root root-prim)))
    (set! (-> root-prim prim-core collide-as) (collide-spec))
    (set! (-> root-prim prim-core collide-with) (collide-spec))
    )
  0
  (setup-masks (-> this draw) 0 -1)
  (setup-masks (-> this draw) 1 0)
  (sound-play "target-break")
  (let ((exploder-tuning (new 'stack 'joint-exploder-tuning (the-as uint 1))))
    (set! (-> exploder-tuning fountain-rand-transv-lo quad) (-> this impact quad))
    (process-spawn
      part-tracker
      :init part-tracker-init
      (-> *part-group-id-table* 525)
      300
      #f
      #f
      #f
      (-> this node-list data 3 bone transform)
      :to *entity-pool*
      )
    (process-spawn
      joint-exploder
      (art-group-get-by-name *level* "skel-gun-dummy-gold-explode" (the-as (pointer uint32) #f))
      5
      exploder-tuning
      *gun-dummy-peace-exploder-params*
      :to this
      )
    )
  0
  (none)
  )

(defmethod break-dummy ((this gun-cit-a))
  "Does what you'd expect, sets up the [[joint-exploder-tuning]] to break the dummy into pieces, plays sounds, etc"
  (let ((root-prim (-> this root root-prim)))
    (set! (-> root-prim prim-core collide-as) (collide-spec))
    (set! (-> root-prim prim-core collide-with) (collide-spec))
    )
  0
  (setup-masks (-> this draw) 0 -1)
  (setup-masks (-> this draw) 1 0)
  (sound-play "target-break")
  (let ((exploder-tuning (new 'stack 'joint-exploder-tuning (the-as uint 1))))
    (set! (-> exploder-tuning fountain-rand-transv-lo quad) (-> this impact quad))
    (set! (-> exploder-tuning fountain-rand-transv-hi x) 4096.0)
    (set! (-> exploder-tuning fountain-rand-transv-hi y) 122880.0)
    (process-spawn
      part-tracker
      :init part-tracker-init
      (-> *part-group-id-table* 526)
      300
      #f
      #f
      #f
      (-> this node-list data 3 bone transform)
      :to *entity-pool*
      )
    (process-spawn
      joint-exploder
      (art-group-get-by-name *level* "skel-gun-cit-a-explode" (the-as (pointer uint32) #f))
      5
      exploder-tuning
      *gun-cit-a-exploder-params*
      :to this
      )
    )
  0
  (none)
  )

(defmethod break-dummy ((this gun-cit-b))
  "Does what you'd expect, sets up the [[joint-exploder-tuning]] to break the dummy into pieces, plays sounds, etc"
  (let ((root-prim (-> this root root-prim)))
    (set! (-> root-prim prim-core collide-as) (collide-spec))
    (set! (-> root-prim prim-core collide-with) (collide-spec))
    )
  0
  (setup-masks (-> this draw) 0 -1)
  (setup-masks (-> this draw) 1 0)
  (sound-play "target-break")
  (let ((exploder-tuning (new 'stack 'joint-exploder-tuning (the-as uint 1))))
    (set! (-> exploder-tuning fountain-rand-transv-lo quad) (-> this impact quad))
    (set! (-> exploder-tuning fountain-rand-transv-hi x) 4096.0)
    (set! (-> exploder-tuning fountain-rand-transv-hi y) 122880.0)
    (process-spawn
      part-tracker
      :init part-tracker-init
      (-> *part-group-id-table* 527)
      300
      #f
      #f
      #f
      (-> this node-list data 3 bone transform)
      :to *entity-pool*
      )
    (process-spawn
      joint-exploder
      (art-group-get-by-name *level* "skel-gun-cit-b-explode" (the-as (pointer uint32) #f))
      5
      exploder-tuning
      *gun-cit-b-exploder-params*
      :to this
      )
    )
  0
  (none)
  )

(defmethod break-dummy ((this gun-cit-c))
  "Does what you'd expect, sets up the [[joint-exploder-tuning]] to break the dummy into pieces, plays sounds, etc"
  (let ((root-prim (-> this root root-prim)))
    (set! (-> root-prim prim-core collide-as) (collide-spec))
    (set! (-> root-prim prim-core collide-with) (collide-spec))
    )
  0
  (setup-masks (-> this draw) 0 -1)
  (setup-masks (-> this draw) 1 0)
  (sound-play "target-break")
  (let ((exploder-tuning (new 'stack 'joint-exploder-tuning (the-as uint 1))))
    (set! (-> exploder-tuning fountain-rand-transv-lo quad) (-> this impact quad))
    (set! (-> exploder-tuning fountain-rand-transv-hi x) 4096.0)
    (set! (-> exploder-tuning fountain-rand-transv-hi y) 122880.0)
    (process-spawn
      part-tracker
      :init part-tracker-init
      (-> *part-group-id-table* 528)
      300
      #f
      #f
      #f
      (-> this node-list data 3 bone transform)
      :to *entity-pool*
      )
    (process-spawn
      joint-exploder
      (art-group-get-by-name *level* "skel-gun-cit-c-explode" (the-as (pointer uint32) #f))
      5
      exploder-tuning
      *gun-cit-c-exploder-params*
      :to this
      )
    )
  0
  (none)
  )

(defmethod break-dummy ((this gun-cit-d))
  "Does what you'd expect, sets up the [[joint-exploder-tuning]] to break the dummy into pieces, plays sounds, etc"
  (let ((root-prim (-> this root root-prim)))
    (set! (-> root-prim prim-core collide-as) (collide-spec))
    (set! (-> root-prim prim-core collide-with) (collide-spec))
    )
  0
  (setup-masks (-> this draw) 0 -1)
  (setup-masks (-> this draw) 1 0)
  (sound-play "target-break")
  (let ((exploder-tuning (new 'stack 'joint-exploder-tuning (the-as uint 1))))
    (set! (-> exploder-tuning fountain-rand-transv-lo quad) (-> this impact quad))
    (set! (-> exploder-tuning fountain-rand-transv-hi x) 4096.0)
    (set! (-> exploder-tuning fountain-rand-transv-hi y) 122880.0)
    (process-spawn
      part-tracker
      :init part-tracker-init
      (-> *part-group-id-table* 529)
      300
      #f
      #f
      #f
      (-> this node-list data 3 bone transform)
      :to *entity-pool*
      )
    (process-spawn
      joint-exploder
      (art-group-get-by-name *level* "skel-gun-cit-d-explode" (the-as (pointer uint32) #f))
      5
      exploder-tuning
      *gun-cit-d-exploder-params*
      :to this
      )
    )
  0
  (none)
  )

;; WARN: Return type mismatch object vs none.
(defbehavior gun-dummy-init-by-other gun-dummy ((manager training-manager) (path-info tpath-info))
  "Initializes a [[gun-dummy]] given a [[tpath-info]]"
  (init-dummy-collison! self)
  (initialize-skeleton
    self
    (the-as skeleton-group (art-group-get-by-name *level* "skel-gun-dummy" (the-as (pointer uint32) #f)))
    (the-as pair 0)
    )
  (set! (-> self train-man) (process->handle manager))
  (init-tpath-info! self path-info)
  (set! (-> self move-sound) (new 'static 'sound-id))
  (set! (-> self turn-sound) (new 'static 'sound-id))
  (set! (-> self spin-sound) (new 'static 'sound-id))
  (go-virtual idle)
  (none)
  )

;; WARN: Return type mismatch object vs none.
(defbehavior gun-dummy-a-init-by-other gun-dummy ((manager training-manager) (path-info tpath-info))
  "Initializes a [[gun-dummy-a]] given a [[tpath-info]]"
  (init-dummy-collison! self)
  (initialize-skeleton
    self
    (the-as skeleton-group (art-group-get-by-name *level* "skel-gun-dummy-a" (the-as (pointer uint32) #f)))
    (the-as pair 0)
    )
  (set! (-> self train-man) (process->handle manager))
  (init-tpath-info! self path-info)
  (set! (-> self move-sound) (new 'static 'sound-id))
  (set! (-> self turn-sound) (new 'static 'sound-id))
  (set! (-> self spin-sound) (new 'static 'sound-id))
  (setup-masks (-> self draw) 0 -1)
  (setup-masks (-> self draw) 2 0)
  (go-virtual idle)
  (none)
  )

;; WARN: Return type mismatch object vs none.
(defbehavior gun-dummy-b-init-by-other gun-dummy ((manager training-manager) (path-info tpath-info))
  "Initializes a [[gun-dummy-b]] given a [[tpath-info]]"
  (init-dummy-collison! self)
  (initialize-skeleton
    self
    (the-as skeleton-group (art-group-get-by-name *level* "skel-gun-dummy-b" (the-as (pointer uint32) #f)))
    (the-as pair 0)
    )
  (set! (-> self train-man) (process->handle manager))
  (init-tpath-info! self path-info)
  (set! (-> self move-sound) (new 'static 'sound-id))
  (set! (-> self turn-sound) (new 'static 'sound-id))
  (set! (-> self spin-sound) (new 'static 'sound-id))
  (setup-masks (-> self draw) 0 -1)
  (setup-masks (-> self draw) 2 0)
  (go-virtual idle)
  (none)
  )

;; WARN: Return type mismatch object vs none.
(defbehavior gun-dummy-c-init-by-other gun-dummy ((manager training-manager) (path-info tpath-info))
  "Initializes a [[gun-dummy-c]] given a [[tpath-info]]"
  (init-dummy-collison! self)
  (initialize-skeleton
    self
    (the-as skeleton-group (art-group-get-by-name *level* "skel-gun-dummy-c" (the-as (pointer uint32) #f)))
    (the-as pair 0)
    )
  (set! (-> self train-man) (process->handle manager))
  (init-tpath-info! self path-info)
  (set! (-> self move-sound) (new 'static 'sound-id))
  (set! (-> self turn-sound) (new 'static 'sound-id))
  (set! (-> self spin-sound) (new 'static 'sound-id))
  (setup-masks (-> self draw) 0 -1)
  (setup-masks (-> self draw) 2 0)
  (go-virtual idle)
  (none)
  )

;; WARN: Return type mismatch object vs none.
(defbehavior gun-dummy-big-init-by-other gun-dummy ((manager training-manager) (path-info tpath-info))
  "Initializes a [[gun-dummy-big]] given a [[tpath-info]]"
  (init-dummy-collison! self)
  (initialize-skeleton
    self
    (the-as skeleton-group (art-group-get-by-name *level* "skel-gun-dummy-big" (the-as (pointer uint32) #f)))
    (the-as pair 0)
    )
  (set! (-> self train-man) (process->handle manager))
  (init-tpath-info! self path-info)
  (set! (-> self move-sound) (new 'static 'sound-id))
  (set! (-> self turn-sound) (new 'static 'sound-id))
  (set! (-> self spin-sound) (new 'static 'sound-id))
  (setup-masks (-> self draw) 0 -1)
  (setup-masks (-> self draw) 2 0)
  (go-virtual idle)
  (none)
  )

;; WARN: Return type mismatch object vs none.
(defbehavior gun-dummy-gold-init-by-other gun-dummy ((manager training-manager) (path-info tpath-info))
  "Initializes a [[gun-dummy-gold]] given a [[tpath-info]]"
  (init-dummy-collison! self)
  (initialize-skeleton
    self
    (the-as skeleton-group (art-group-get-by-name *level* "skel-gun-dummy-gold" (the-as (pointer uint32) #f)))
    (the-as pair 0)
    )
  (set! (-> self train-man) (process->handle manager))
  (init-tpath-info! self path-info)
  (set! (-> self move-sound) (new 'static 'sound-id))
  (set! (-> self turn-sound) (new 'static 'sound-id))
  (set! (-> self spin-sound) (new 'static 'sound-id))
  (setup-masks (-> self draw) 0 -1)
  (setup-masks (-> self draw) 2 0)
  (go-virtual idle)
  (none)
  )

;; WARN: Return type mismatch object vs none.
(defbehavior gun-dummy-peace-init-by-other gun-dummy ((manager training-manager) (path-info tpath-info))
  "Initializes a [[gun-dummy-peace]] given a [[tpath-info]]"
  (init-dummy-collison! self)
  (initialize-skeleton
    self
    (the-as skeleton-group (art-group-get-by-name *level* "skel-gun-dummy-peace" (the-as (pointer uint32) #f)))
    (the-as pair 0)
    )
  (set! (-> self train-man) (process->handle manager))
  (init-tpath-info! self path-info)
  (set! (-> self move-sound) (new 'static 'sound-id))
  (set! (-> self turn-sound) (new 'static 'sound-id))
  (set! (-> self spin-sound) (new 'static 'sound-id))
  (setup-masks (-> self draw) 0 -1)
  (setup-masks (-> self draw) 2 0)
  (go-virtual idle)
  (none)
  )

;; WARN: Return type mismatch object vs none.
(defbehavior gun-cit-a-init-by-other gun-dummy ((manager training-manager) (path-info tpath-info))
  "Initializes a [[gun-cit-a]] given a [[tpath-info]]"
  (init-dummy-collison! self)
  (initialize-skeleton
    self
    (the-as skeleton-group (art-group-get-by-name *level* "skel-gun-cit-a" (the-as (pointer uint32) #f)))
    (the-as pair 0)
    )
  (set! (-> self train-man) (process->handle manager))
  (init-tpath-info! self path-info)
  (set! (-> self move-sound) (new 'static 'sound-id))
  (set! (-> self turn-sound) (new 'static 'sound-id))
  (set! (-> self spin-sound) (new 'static 'sound-id))
  (setup-masks (-> self draw) 0 -1)
  (setup-masks (-> self draw) 2 0)
  (go-virtual idle)
  (none)
  )

;; WARN: Return type mismatch object vs none.
(defbehavior gun-cit-b-init-by-other gun-dummy ((manager training-manager) (path-info tpath-info))
  "Initializes a [[gun-cit-b]] given a [[tpath-info]]"
  (init-dummy-collison! self)
  (initialize-skeleton
    self
    (the-as skeleton-group (art-group-get-by-name *level* "skel-gun-cit-b" (the-as (pointer uint32) #f)))
    (the-as pair 0)
    )
  (set! (-> self train-man) (process->handle manager))
  (init-tpath-info! self path-info)
  (set! (-> self move-sound) (new 'static 'sound-id))
  (set! (-> self turn-sound) (new 'static 'sound-id))
  (set! (-> self spin-sound) (new 'static 'sound-id))
  (setup-masks (-> self draw) 0 -1)
  (setup-masks (-> self draw) 2 0)
  (go-virtual idle)
  (none)
  )

;; WARN: Return type mismatch object vs none.
(defbehavior gun-cit-c-init-by-other gun-dummy ((manager training-manager) (path-info tpath-info))
  "Initializes a [[gun-cit-c]] given a [[tpath-info]]"
  (init-dummy-collison! self)
  (initialize-skeleton
    self
    (the-as skeleton-group (art-group-get-by-name *level* "skel-gun-cit-c" (the-as (pointer uint32) #f)))
    (the-as pair 0)
    )
  (set! (-> self train-man) (process->handle manager))
  (init-tpath-info! self path-info)
  (set! (-> self move-sound) (new 'static 'sound-id))
  (set! (-> self turn-sound) (new 'static 'sound-id))
  (set! (-> self spin-sound) (new 'static 'sound-id))
  (setup-masks (-> self draw) 0 -1)
  (setup-masks (-> self draw) 2 0)
  (go-virtual idle)
  (none)
  )

;; WARN: Return type mismatch object vs none.
(defbehavior gun-cit-d-init-by-other gun-dummy ((manager training-manager) (path-info tpath-info))
  "Initializes a [[gun-cit-d]] given a [[tpath-info]]"
  (init-dummy-collison! self)
  (initialize-skeleton
    self
    (the-as skeleton-group (art-group-get-by-name *level* "skel-gun-cit-d" (the-as (pointer uint32) #f)))
    (the-as pair 0)
    )
  (set! (-> self train-man) (process->handle manager))
  (init-tpath-info! self path-info)
  (set! (-> self move-sound) (new 'static 'sound-id))
  (set! (-> self turn-sound) (new 'static 'sound-id))
  (set! (-> self spin-sound) (new 'static 'sound-id))
  (setup-masks (-> self draw) 0 -1)
  (setup-masks (-> self draw) 2 0)
  (go-virtual idle)
  (none)
  )
